## **Fix:**
- Vanilla components are now serialized under minecraft namespace, old serialized items can be ported by replacing the namespace of component ids
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).
Structure API along with ingame Structure Block for saving/loading ingame
Worldgen API for generating features with json config support (default has ore, geode, spring and structure and more)
Color API for Color conversions, creation, and more
ItemPredicate for weak stack checks
Transaction and Batch query support for Database
MySQL implementation for Database
A few other useful methods for queries and batch queries
From-scratch Energy API with EnergyUnit support and builtin Energy Network
Loot table API rewritten to be datadriven, can also be now used to replace or merge with vanilla tables
More hooks for CustomBlock, and more properties for it
Almost all loaders can now be used to load relevant object from jar or a folder
Changes:
Particle API now uses ColorProvider instead of Gradient
Tag API now uses ItemPredicate, and has overall been rewritten
DataComponent uses Type instead of ID, this also removes all reflection related to data component API (thus making it faster than before)
CustomBlock#place no longer resets placed blocks state (this also means if calling via API, the vanilla block should be placed before calling CustomBlock#place)
Try utility has been entirely rewritten, any usages must update to new format
insert() no longer refers to INSERT_OR_REPLACE, use new replace() chain
All database operations (player statistics, block manager etc) now use optimized db calls (transactions, batch calls, async calls)
Removal:
Gradient has been removed (replaced by ColorProvider)
New:
-
ListedLayers#reset() and
PaginatedElements#reset() [Useful if layer hasn't been added to GUI and is being handled by another layer]
-
Item#onSwapHand,
Item#onSlotChange,
Item#onDrop,
Item#onPickup (
#1)
Changes:
-
Item#onUse now has a third argument
ClickType showing what type of click it was (left/right) (
#1)
Fixes:
-
BlockInteractionEvent#getInteractionPoint is now Nullable
From now on AbyssalLib will receive
smaller updates as well as
dev versions (dev only on GitHub)
For Developers: you should now add a lang key `plugin.<plugin_id>` so that you can show a proper name inside ItemMenu (default is plugin_id). Optionally, also add an icon.
New:
Statistics Menu, and Item Menu for viewing said content (view permissions in docs)
Namespace#icon for specifying the plugin icon to show in /abyssallib content items (textures/items/icon.png)
EntitySpawner component for items that spawn custom entities
Statistics API for adding custom Statistics to players
Command now supports aliases
Codecs for all DataComponents
Codec#collection and Codec#collection(collectionConstructor) (e.g. codec.collection(HashSet::new))
Entity now supports DataComponent (not Vanilla ones, only custom)
EnergyContainer component (wrapper for SimpleEnergyContainer)
A lot of new codecs in ExtraCodecs and Codecs
oversizedInGui field for ItemDefinition
Kotlin player and entity extensions for various methods
Middle Click now picks the blocks item (if it exists) instead of the vanilla item
Changes:
Rewrote Item class (for devs):
There is NO change in how you register the item or create them, but now, instead of passing the Item as an ItemStack, you must call Item#stack() instead