# Changelog
## Features & Additions
- **Permissions System:** Added a Permission API with an in-game GUI and Web Editor (with domain support). Includes custom permission checks (`Player#hasPerm`) and removes the need for permissions in `paper-plugin.yml`.
- **Dynamic Translations:** Added `ItemTranslationProvider` and `ServerTranslator` global providers/resolvers, allowing developers to add dynamic translations without PlaceholderAPI.
- **Resource Pack Loading:** Implemented configuration phase sending for resource packs.
- **New Asset Types:** Added support for Atlas, BBModelLoader, and Core Shader assets.
- **Loot Commands:** Added a command to set custom loot tables on any container (loot generates upon interaction). Added custom loot table support directly to entities.
- **Locate Command:** Added a `locate` command for structures, which works exclusively in newly generated chunks.
- **Dynamic Statistics:** Added dynamically generated tracking for `entities_killed`, `blocks_mined`, and `items_crafted` based on namespace and ID.
## Changes & Improvements
- **Asynchronous Item Ticking & GUI Performance:** `ItemTicker` now runs asynchronously. Additionally, `GuiManager` now creates a ticker specifically for GUIs with a `tickInterval` greater than 0 (default is 1), improving overall server performance.
- **Structure Optimization:** Improved structure placement performance by ~75% and reduced structure file sizes by ~95%. Increased the `StructureBlock` size limit to 1028 for X/Y/Z coordinates.
- **GUI Engine Overhaul:** Reworked `ItemMenu` to utilize `ItemCategory` systems, allowing categorized item displays (a default category is generated if none is specified by a plugin). Missing plugin icons now default to an apple placeholder.
- **Particle Performance:** Improved the performance of default particle renderers.
- **Component Handling:** Component Maps and custom components now use `NbtOps` codecs to properly maintain data types natively.
## Fixes
- **Worldgen & Structures:** Fixed structure rotation failing to rotate by the origin anchor. Fixed an issue where worldgen would fail for structures extending beyond a 3x3 chunk region. Fixed structure placement not working with processors.
- **MiniMessage Parsing:** Fixed MiniMessage text parsing for Server-Side Rendering (SSR), chat packets (including disguised packets), boss-bars, objectives, and dialogs.
- **Translation Overrides:** Fixed `TranslationLoader` overriding previously loaded locale files, and fixed a bug where failed translation strings were replaced by their raw keys instead of parsing correctly.
- **Packet Translation:** Fixed `PacketTranslator` breaking items server-side, allowing custom items to function correctly in recipes.
- **Block State Adapters:** Fixed and added adapters for Nameable, Container, InventoryHolder, Lootable, Lockable, Leaves, and Bed (part/occupied) tile states.
## API & Developer Notes
- **Dependencies:** Updated to Kotlin 2.1.0, added `kotlinx.coroutines`, and added Kotlin API for config and database.
- **Database Loader:** Added a universal Database API and Loader via Config, supporting MariaDB, MongoDB, Redis, PostgreSQL, and H2.
- **New APIs:** Added Scoreboard API, Economy API (requires plugin implementation, not Vault compatible), Advancement & Toast API, and Placeholder API with defaults.
- **Kotlin DSLs:** Added Kotlin DSLs for Blocks and Block Entities (similar to the Item DSL).
- **Energy Conductor Nodes:** Added `EnergyConductor` for cable-type nodes with simulation mode for insert/extract. Transfers now depend on `BlockFace`. Custom blocks must manually handle `EnergyNetwork` registration/unregistration.
- **Library Migrations:** Moved away from `ItemBridge`, `BlockBridge`, and `Identifier`. Use `BlockInfo` and Adventure `Key` instead. Direct support for Nexo and ItemsAdder has been removed.
- **GUI API Adjustments:** Added `GuiClickContext` and `GuiDragContext` as overrides, replacing the old `onDrag` and `onClick`. Added new builder utilities (`fill`, `fillBorder`, `structure`) and new UI layers (`ScrollLayer`, `StateCycleElement`, `ToggleElement`, `ProgressBarLayer`).
- **Javadocs:** Added extensive Javadoc coverage across the library, linking to PaperMC and Adventure APIs.
- **Removals & Deprecations:**
- Deleted the Multiblock API.
- Removed deprecated GUI implementations (`ListedLayers` and `PaginatedElements` are replaced by `LayerStack` and `PagedLayer`).
- Removed `BlockPileFeature`, `CaveVineFeature`, and `RandomPatchFeature`.
- Removed `DamageType.Registrar` (use `DamageType#register` in `PluginBootstrap`).
> Note for devs using particle API; if you spawn a HUGE amount of particles, consider using ItemDisplayRenderer instead as the client wont have to receive a ton of packets (tested with 2500 item displays, client and server performance was good, however particles cause client to disconnect on same configuration)
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" }