Oraxen v1.219.0

Features

  • 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.
  • Removed the SHADER custom armor type, texture generator, configuration, shader generation, OptiFine compatibility files, resource extraction, pack collection, and duplicate handling branches.
  • Removed PackSlicer 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.
  • Removed ReflectionUtils 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.
  • Fixed use_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_placing DENY 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.
  • Fixed TimersFactory 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.
  • Fixed OraxenBlocks.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.
  • Updated VersionLoadingTest 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.