> The API is now available on the Maven Central Repository.
## **New:**
- Codec API now returns `DataResult`, allowing errors to propagate and partial-success warnings to accumulate.
- Added `Codec#encodeAsync/decodeAsync`, `Codec.dispatch`, `Codec.taggedUnion`, `Codec.tuple`, and much more.
- `RecordCodecBuilder` → `RecordBuilder`; it has also been rewritten.
- Added `EncodeContext`/`DecodeContext` to help simplify more complicated codecs.
- Reflection API now covers more previously missed features.
- Added Menu API, useful for custom containers and crafting UIs, with automatic item movement handling.
- Added config options to toggle Item Server-Side Translation Ticking, Item Ticking, and the Energy Network, as well as an option to change the delay of server-side translation ticking.
- Added new `enable_custom_break_speeds` and `enable_natural_spawning` config fields to the `features` section.
- Added `TypedRegistry`.
- Added placeholders for permissions:
- `abyssallib:player_has_permission:<permission>` — Checks whether the player has the permission (Boolean).
- `abyssallib:player_has_group:<group>` — Checks whether the player belongs to a group (Boolean).
- `abyssallib:player_groups` — Gets all groups the player is in (List of String).
- `abyssallib:player_group:<index>` — Gets the player's group at a specific index in the sorted group list.
- `abyssallib:player_primary_group` — Gets the player's group with the highest weight. This can be inconsistent if multiple groups have the same highest weight.
- Added 2 JSON-specific `MergeStrategy`s for replacing or inheriting from existing loot tables, allowing vanilla loot tables to be merged or replaced.
- Added custom block breaking, utilizing the value of `BlockProperties#hardness`.
- Added `CustomTool` component, which behaves similarly to the `Tool` component but for custom blocks.
- Added `compress` config option to the resource-pack section. Enabled by default; currently minifies all JSON, making it useful for packs with a lot of models.
- Added `FakePlayer` and `OfflinePlayerData` APIs for modifying players while they are offline and for using that data with fake players.
## **Changes:**
- `RECIPES` registry is now typed, allowing recipes of a specific type to be retrieved using `RECIPES#getByType`.
- Reflection API is now safer.
- UpdateChecker now accepts a String vararg of ignored identifiers (e.g. `.alpha`, `.beta`, etc.).
- Resource Pack Server has been optimized.
- `external-packs` now supports `{"path": boolean}`, allowing external packs to be exempted from compression. This is required if a pack is already compressed or encrypted.
## **Fixes:**
- Default (folder) recipe registration is now delayed by 10 ticks, giving other plugins time to register their items.
- Fixed duplicate ghost items caused by SSR and ItemTicker in most cases.
- ItemTicker no longer triggers on inventory updates.
- PackServer will no longer duplicate packs for the client, as packs now use deterministic UUIDs.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }