Added custom recipe support for smithing tables, cauldrons, anvils, and grindstones, alongside the existing crafting, cooking, campfire, and stonecutting recipes.
Added recipe book grouping support via an optional group key in recipe configurations.
Added configurable blocked-items lists to backpacks, including namespaced Oraxen items and matching all colored shulker box variants.
Added tri-state per-loot Silk Touch filtering for custom block drops, supporting drops that require or forbid Silk Touch while preserving the existing boolean behavior.
Changes
Renamed the Oraxen inventory configuration from oraxen_inventory to inventory-menu, with concise title, rows, slots, layout, and category name properties; existing configurations are migrated automatically.
Changed Oraxen inventory navigation to use the bundled arrow_previous_icon, arrow_next_icon, and exit_icon items with vanilla fallbacks, removing the corresponding settings.
Changed custom model data generation to only apply to items with explicit Pack.custom_model_data, removed automatic allocation and the obsolete disable_automatic_model_data setting.
Added cross-version helpers for item display names and custom model data while preserving legacy behavior and unrelated modern component fields.
Unified lore and item name parsing.
Moved FontEvents handling to components.
Replaced the packet-based efficiency mechanic with a BLOCK_BREAK_SPEED attribute modifier, so the mechanic no longer requires ProtocolLib or PacketEvents.
Removed the repair command’s restrictions so it repairs every damageable item, instead of being limited to a specific set.
Restricted scoreboard background hiding to Minecraft 1.21.6 and newer.
Converted Oraxen to a Paper plugin (paper-plugin.yml) with declarative dependency ordering and a plugin loader for runtime libraries, raising the declared API version from 1.18 to 1.20.
Changed command registration to Paper’s Brigadier API on 1.20.6+, adding typed arguments with client-side validation and removing command-map reflection.
Changed painting and jukebox song startup registration to Paper bootstrap registry events while retaining NMS-backed hot reloads, and moved noteblock mineable-tag edits to Paper’s tag lifecycle.
Changed the plugin to use Paper-only APIs directly instead of maintaining dead non-Paper fallbacks.
Modernized player-facing messages, item names, lore, broadcasts, locale handling, inventory titles, cursor updates, falling-block spawning, recipe choices, event dispatch, armor durability, item damage, target-block lookup, fireball acceleration, damage sources, and registry-based sound lookup using current Paper and Adventure APIs.
Optimized hot-path item, version, glyph, and replaceable-block lookups, and removed redundant per-item YAML parsing.
Split item configuration parsing and registration into separate workflow stages.
Removed the TextEffects API, commands, configuration, MiniMessage tags, effect fonts, documentation, and shader branches.
RemovedPackSlicer and its supporting slicer utilities, generation hooks, atlas exclusions, and configuration options.
Removed WorldEdit block settings, the custom block parser, edit-session handlers, furniture clipboard handling, and WorldEdit tab completions.
Removed the legacy Bukkit chat handler and Chat.chat_handler setting, leaving Paper’s modern Adventure chat handling as the only chat formatting path.
Removed the legacy block correction implementation and CustomBlocks.block_correction setting, leaving Minecraft’s native NMS placement logic as the only block-state correction path.
Removed defunct compatibility integrations for BossShopPro and ProtocolSupport, and the legacy ModelEngine R3 reflection fallback.
Removed version guards, fallback branches, and display-entity compatibility paths for Minecraft versions older than the minimum supported Paper version of 1.20.1.
Removed the reflection-based Folia scheduler resolution and BukkitScheduler fallbacks from SchedulerUtil, calling Paper’s region-aware scheduler APIs directly.
Removed the runtime-downloaded Adventure, Gson, and JOML libraries that Paper already bundles, replacing the BukkitAudiences fallback with Paper’s native Adventure API.
Removed reflection over compile-target Paper data-component, equipment-slot-group, RegionAccessor, and Adventure shadow-color APIs, retaining cached version gates for APIs newer than Paper 1.20.1.
RemovedReflectionUtils because it is unreferenced throughout the project and no longer serves any purpose.
Removed the unused ItemModelGenerator class and its obsolete model and tint generation logic.
Removed the unused named MinecraftVersion constants and outdated LATEST field while preserving the actively used version parsing, current-version detection, constructors, and comparison APIs.
Removed unused utility classes and dead utility members.
Removed stale commented-out code blocks and outdated TODO markers.
Fixes
Fixed crafting permission checks when PrepareItemCraftEvent has no supported recipe.
Fixeduse_remainder dropping referenced Oraxen items on first startup or resolving stale items on reload by deferring references until the new item registry is loaded.
Fixed chained use_remainder item references losing their own leftover item due to a stale item cache.
Fixed custom anvil and grindstone results ignoring hotbar-swap and drop clicks.
Fixed custom anvil recipes failing and repeatedly logging errors on Paper 1.20.1 due to incompatible inventory view access.
Fixed recipes referencing MMOItems could abort plugin startup when MMOItems was not installed.
Fixed an issue where MythicMobs drops could throw an exception and fail to register when configured with an unknown Oraxen item ID.
Fixed enchantment glint override components not being applied to configured items.
Fixed anvil glyph renames displaying literal legacy color codes instead of applying MiniMessage formatting.
Fixed recipe GUI title glyph rendering by preserving MiniMessage component structure.
Fixed animated glyph shaders on Minecraft 26.2 by selecting the unified core/text shader layout from the resource pack format.
Fixed animated glyphs resolving as raw MiniMessage tags before asynchronous pack generation completed, including during pack reloads.
Fixed reference glyph placeholders, PlaceholderAPI lookup, tab completions, and emoji-list visibility by registering references as first-class glyphs.
Fixed pack language files (pack/lang) not applying until a server restart.
Fixed API-added resource pack files being written as empty ZIP entries by materializing their contents before deferred generation, and added warning diagnostics for ZIP write failures.
Fixed scoreboard number hiding on all supported Minecraft versions.
Fixed an issue where sneaking did not allow players to place blocks against interactive custom blocks.
Fixed a noteblock dupe where breaking a custom block within a tick of its note playing restored the old block data and resurrected the block.
Fixed vanilla block placement next to custom string blocks and stale glider components during item updates, while removing no-op block-break listeners and unreachable command arguments.
Fixed an issue where cancelling custom block break events could still break the underlying vanilla block or drop storage contents.
Fixed an issue where insta-breaking custom blocks could bypass protection and leave stale Oraxen block data.
Fixed stale custom block data and chorus seats remaining after non-player block destruction.
Fixed furniture seat yaw being treated as world yaw instead of furniture-local yaw, so seats now face the correct direction on rotated furniture (@OlivierChiasson).
Fixed furniture rotation teleporting hitboxes and seats synchronously instead of asynchronously, which broke furniture rotation on Folia.
Fixed furniture seat passengers not being restored when an asynchronous teleport fails.
Fixed furniture with an item: override dropping the display-only item instead of the configured source loot.
Fixed furniture limited_placingDENY never being enforced, because a dangling else if made the deny check unreachable.
Fixed BottledExp triggering on left-click air or denied interactions and dropping oversized experience-bottle stacks.
Fixed the LifeLeech mechanic failing on every hit because max health was resolved by the pre-1.21.2 attribute name.
Fixed the Bleeding and KnockbackStrike mechanics throwing NoSuchFieldError on Minecraft 1.20.1-1.20.4 by resolving particle constants renamed in 1.20.5 through ParticleWrapper.
Fixed an issue where Big Mining’s recursive block-break guard raced across Folia region threads, triggering cascading area breaks.
Fixed/oraxen emojis throwing a ClassCastException when run from the console or a command block, and silently ignoring the documented oraxen.command.emojis permission.
Fixed an issue where /oraxen give, /oraxen take and HUD updates accessed Folia-owned state from the wrong thread, and /oraxen dump-log blocked the tick thread and reported nothing to the sender.
Fixed the Java 21 NMS handler attempting to load on Paper 1.20.1-1.21.1; NMS is now explicitly disabled below 1.21.2 with a version-specific warning.
Fixed the packet adapter reporting a hardcoded 1.21.8 as the latest Minecraft version, deriving it from the server version instead.
Fixed an issue where a failed item load left the item registry uninitialized and caused subsequent item lookups to throw exceptions.
FixedTimersFactory leaking a per-player cooldown timer for every player that ever triggered a spell, harvesting, commands, or custom mechanic, and sharing that map unsynchronized across Folia region threads.
Fixed an issue where mechanic registries and glyph completion state were accessed through unsynchronized maps across Folia region threads, and stale bitmap definitions survived font reloads.
Fixed entity- and location-bound tasks being scheduled on the global region scheduler, which ran backpack cosmetics, toggleable furniture light, and furniture text follow-ups on the wrong thread on Folia.
Fixed click actions and console command actions scheduling through the Bukkit scheduler, which is unsupported on Folia; they now run on the player’s entity thread or the global thread.
Fixed/oraxen update and admin block commands touching chunks, blocks, and entities outside the invoking region on Folia, adding radius clamps and per-region scheduling.
Fixed furniture text displays, storage cache clearing, energy blast beams, and jukebox music discs accessing entities and blocks from the wrong region thread on Folia.
Fixed recipe reloads mutating the server recipe registry off the global thread.
Fixed an issue where recipe builders, inventory views, block variation maps, breaker modifiers, aura state, and item builds were shared unsynchronized across Folia region threads.
FixedOraxenBlocks.place and OraxenFurniture.updateFurniture failing when invoked from a non-owning region thread, and documented the threading contracts of the block and furniture APIs.
Fixed Oraxen blocks appearing as noteblocks for a tick when broken.
Maintenance
Added tests for cross-version item display names and KnockbackStrike sound resolution.
UpdatedVersionLoadingTest to run up to five versions concurrently in isolated server directories.
Updated the Paper 26.2 test server fixture to build 71.
Added repository guidance for contributors and coding agents.
Removed the obsolete Orbs agent setup.
Replaced the shaded CustomBlockData library with native chunk PersistentDataContainer storage, keeping the existing per-block key encoding so worlds need no migration.
Replaced Apache HttpClient with the JDK HTTP client for pack uploads and the license check, and bumped outdated bundled libraries (gson, commons-lang3, commons-io, PacketEvents, spring-expression), removing the httpmime and javax.json runtime libraries.
Replaced hand-rolled server version parsing with Paper’s Bukkit.getMinecraftVersion(), removing the NMS-revision enum and the SharedConstants pack-format reflection.
Replaced manual synchronization in hot paths with lock-free concurrency primitives and cached settings values, so packet listeners and per-event code no longer traverse YAML or contend on monitors across Folia region threads.
Replaced the remaining deprecated player-facing API calls (String-based sounds, legacy sign opening, String inventory titles, forced inventory updates, and seat armor-stand AI toggling) with their modern Paper and Adventure equivalents.
Replaced the hand-rolled OS, SHA1Utils, EventUtils, BlockHelpers location, and Utils file-name helpers with commons-lang3 SystemUtils, HexFormat, Paper’s Event#callEvent(), the Bukkit Location API, and commons-io FilenameUtils, also fixing the buggy trailing-segment strip and 0x colour parsing.
Removed reflection for Paper’s public death-event retained-items and hanging-placement item APIs, calling them directly instead.
Removed the remaining pre-1.20 resource-pack mappings and chat workarounds, and consolidated text shader pack-format resolution into the shared version mapping.
Replaced legacy plugin-description version lookups and command ChatColor formatting with Paper plugin metadata and Adventure colors.