Add pet matcher texture pack support

Closes https://github.com/nea89o/Firmament/issues/29
This commit is contained in:
Linnea Gräf
2024-07-06 01:06:53 +02:00
parent dd2c455b19
commit c3d32559e4
5 changed files with 357 additions and 0 deletions

View File

@@ -114,6 +114,30 @@ Sub object match:
}
```
#### Pet Data
Filter by pet information. While you can already filter by the skyblock id for pet type and tier, this allows you to
further filter by level and some other pet info.
```json5
"firmament:pet" {
"id": "WOLF",
"exp": ">=25353230",
"tier": "[RARE,LEGENDARY]",
"level": "[50,)",
"candyUsed": 0
}
```
| Name | Type | Description |
|-------------|------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|
| `id` | [String](#string-matcher) | The id of the pet |
| `exp` | [Number](#number-matcher) | The total experience of the pet |
| `tier` | Rarity (like [Number](#number-matcher), but with rarity names instead) | The total experience of the pet |
| `level` | [Number](#number-matcher) | The current level of the pet |
| `candyUsed` | [Number](#number-matcher) | The number of pet candies used on the pet. This is present even if they are not shown in game (such as on a level 100 legendary pet) |
Every part of this matcher is optional.
#### Logic Operators
@@ -181,6 +205,58 @@ specify one of these other matchers and one color preserving property.
}
```
### Number Matchers
This matches a number against either a range or a specific number.
#### Direct number
You can directly specify a number using that value directly:
```json5
"firmament:pet": {
"level": 100
}
```
This is best for whole numbers, since decimal numbers can be really close together but still be different.
#### Intervals
For ranges you can instead use an interval. This uses the standard mathematical notation for those as a string:
```json5
"firmament:pet": {
"level": "(50,100]"
}
```
This is in the format of `(min,max)` or `[min,max]`. Either min or max can be omitted, which results in that boundary
being ignored (so `[50,)` would be 50 until infinity). You can also vary the parenthesis on either side independently.
Specifying round parenthesis `()` means the number is exclusive, so not including this number. For example `(50,100)`
would not match just the number `50` or `100`, but would match `51`.
Specifying square brackets `[]` means the number is inclusive. For example `[50,100]` would match both `50` and `100`.
You can mix and match parenthesis and brackets, they only ever affect the number next to it.
For more information in intervals check out [Wikipedia](https://en.wikipedia.org/wiki/Interval_(mathematics)).
#### Operators
If instead of specifying a range you just need to specify one boundary you can also use the standard operators to
compare your number:
```json5
"firmament:pet": {
"level": "<50"
}
```
This example would match if the level is less than fifty. The available operators are `<`, `>`, `<=` and `>=`. The
operator needs to be specified on the left. The versions of the operator with `=` also allow the number to be equal.
### Nbt Matcher
This matches a single nbt element.
@@ -223,6 +299,11 @@ You can override that like so:
}
```
> [!WARNING]
> This syntax for numbers is *just* for **NBT values**. This is also why specifying the type of the number is necessary.
> For other number matchers, use [the number matchers](#number-matchers)
## Armor textures
You can re-*texture* armors, but not re-*model* them with firmament.