Foxcraftupdates

OneBlock
  • 🐛 FixFix announcement bar lifecycle: stranded bars, orphaned boss bars, UUID keying, cleanup
  • 🐛 FixModernise to Paper 26.2 + Adventure, and fix the render hot paths
  • Validate config values and declare exclude permissions
  • Condition operators, per-player scope, and announcement targeting
  • Command UX: list, info, show, stop, help and tab completion
  • Review pass over #19-#22: private previews, rotation accounting, loader consistency
  • Route every detection alert to the staff channel, not just the red ones (#542)
  • 🐛 Fixfix: code review cleanup
  • 🐛 Fixfix: don't call CompoundTag.remove, which does not exist on 26.x
  • 🐛 Fixfix: repair enchantments in the format Minecraft actually uses
  • 🐛 Fixfix: repair the enchantments of items stored inside other items
  • Snapshot-based, thread-confined save pipeline for the chest cache
  • Event handlers: stale cache after reload, off-hand double fire, own-inventory swaps, holder snapshots
  • Commands: null-group return, chest-lock gates, modern material names
  • Load path: per-group importers, row off-by-one, NBT validation, importer threading
  • Storage: serialize database access, write chest files atomically
  • Item-filter costs and remaining cleanup items
  • 🐛 FixFix races and edge cases found by independent review of PRs #32-#37
  • Store the items waiting to be handed to a chest's owner
  • 🐛 Fixfix(selldecay): maturity gate on hand-harvest credit + per-instance credit bridge rebinding
  • 🐛 Fixfix: reload completeness, live join-notice resolve, single-stage idle flag
  • 🐛 Fixfix(recipe): stop vanilla recipes consuming FoxFarming items (crafting table + Crafter)
  • perf: incremental leaderboard scan, chunk-gated liquid flow, gated market clock, commit-stamped version
  • feat(skilltree): confirm the reset, give Bedrock a real form, group the Elysium costs
  • 🐛 Fixfeat(bedrock): native forms for the three chest-only info menus, plus two config-parity fixes
  • feat(shop): make the farm shop's feedback and its price visible
  • feat(codex): Bedrock forms for field crops, a visible discovery reward, lifetime harvest counts
  • feat: make the farm's progression legible — hub tiles, generated command list, guide topics, harvest feedback
  • feat: un-invert the confirmation friction, and make personal orders actually personal
  • 🐛 Fixfix(bedrock): stop double-rendering entity-backed crops where GeyserModelEngine mirrors them
  • ⚖️ Tweakfeat(selldecay): surface the hand-harvest credit balance
  • feat(api): publish orders, Elysium, growstation and skill-tree events (api 1.4.0)
  • 🐛 Fixfix(skilltree): seed the FormMax message key #751 introduced
  • Gate the 42 sulfur-caves fish on the phase biome, not a phantom world
  • 🚫 RemovedMake debug.disable-debuglogger disable the whole debug logger; audit of #195
  • Read the storage snapshot once per iteration; drop two Gson serialisations from hot paths
  • perf: cache outbound protocol resolver's handler context per channel (#5)
  • Toolchain + CI + unit tests (Gradle 9.7.1, packetevents 2.13.0, GitHub Actions, JUnit)
  • Track region music through WorldGuard's session system; drop WGRegionEvents (#23, #18, #19, #22)
  • Toast + resource-pack awareness: grant-then-revoke, suppress for pack-less Java clients, re-emit only when needed (#21, #20, #25, #33, #36)
  • Playback UX: leave-grace period, last-track memory, per-player volume, vanilla-music stop (#24, #35, #27, #37)
  • Player controls + region-flag audit: /nowplaying, /frm off|on via FoxSettings, /frm regions (#26, #39)
  • Hygiene: config-key drift warning, string lengths, micro-optimisations, proxy hardening, docs drift (#29, #34, #32, #38)
  • sellDecay: expose one seller's unspent hand-harvest credit
  • TransactionLog: batch CSV appends per drain (#137)
  • Sell from the off-hand: include slot 40 in sellable count and removal, drained last (#132)
  • Perf: cache per-Trade derivations; lazy, clone-free menu rendering (#125, #126)
  • ConfirmMenu: clamp amount to live caps (parity with the Bedrock slider); one modifier scan per render (#127, #131)
  • sellDecay ops: resolver TTL caches + reload re-arm + BentoBox softdepend + /shopadmin status section (#128, #129, #130)
  • Bedrock-aware list-menu lore; one combined sell-all line; open-sound parity (#133)
  • Widen bundled pool past every day-group request; warn and preview-flag saturation (#134)
  • PlaceholderAPI: sell-decay multiplier / pressure / grace-left / harvest-credit placeholders (#135)
  • shopadmin list: pagination + display names + search; register: optional id:<name> (#136)
  • 🐛 Fixfix(editmode): point marker direction, preview leakage and stand ids
  • Placement safety: physics after confirmation, own-half containers, inventory-holder drops, top-down destroy, BentoBox hook (#19 #20 #21 #25 #26 #28 #38)
  • 🐛 FixCharging & command correctness: selection-world gating, one affordability rule, DEFAULT use on first placement, give fixes, quiet NBT-API (#22 #23 #24 #27 #41 #42)
  • 🐛 FixHotpaths: batched per-tick charging, lazy region, resolve-once hooks, cheaper selection box, wand pre-filter (#29 #30 #31 #32 #33)
  • Player UX: real limits, forgiving materials + tab completion, /pwe pos1|pos2|sel|clear, feedback + progress, confirm + undo, hex colours (#34 #35 #36 #37 #39 #43 #44)
cloakfox

OneBlock
  • Make market_key compare byte-exact so recent-sales grouping respects case (V34)
  • Gate Bedrock form senders on the player, not on whether Floodgate is installed
  • 🐛 Fixfix(stats): answer "unknown", not zero, when a player's data isn't loaded
cloakfox

OneBlock
  • 🐛 Fixfix(stats): add a monotone %wwarp_explored% for timed leaderboards
cloakfox

OneBlock
  • Let a player turn off region and combat music (foxregionmusic.nomusic)
cloakfox

OneBlock
  • Group recent-sales figures by product, not just material (#536)
  • 🐛 Fixfix(commands): count a bag on the cursor or in an open screen as held
  • Stamp the shared foxmarket:key product tag on backpacks
  • Stamp the shared foxmarket:key product tag on fish and rod skins
  • Stamp the shared foxmarket:key product tag on minion eggs
  • 🐛 FixFixed hostile mobs not dealing damage in pvp area
  • sellDecay C4c: let prestige scale the global backstop grace too (opt-in)
  • 🐛 Fixfix: return a sentinel for missing-{type} vehicle data instead of throwing
  • Stamp the shared foxmarket:key product tag on vouchers
cloakfox

OneBlock
  • ✨ NewAdd /emoji picker GUI so players can browse and use chat emoji
  • 🐛 Fixfix: don't let an unreadable vehicle record abort chunk loading
cloakfox

OneBlock
  • Name a minion listing by its type and tier, not "Minion Egg"
  • ✨ NewWire up 91 new Pepe + Meme chat emoji (emoji.yml)
  • 🐛 Fixfix: don't overwrite survival armor when respawning into a disabled world
  • List each bingo cell's catchers on the card view
  • perf: swap the query cache on invalidation instead of clear()-walking it
cloakfoxfweef

OneBlock
  • Right-click withdraws a bid-less listing, instead of nagging (#450 tail)
  • ⚡ PerformancePerf improvements related to crates
cloakfox

OneBlock
  • ⬆️ ImprovementImproved collection bin info message
  • 🐛 FixMake bare :D, <3 and pasted emoji resolve to pack emoji
  • 🐛 FixRelay chat emoji to Discord as native Unicode or :name:
  • 🐛 FixRender emoji glyphs in their own colours (stop chat colour tinting them)
  • ✨ NewShow both participants' inline heads on private messages
  • 🐛 FixDraw bingo card cells with the actual fish sprites (off-hand map)
  • ✨ NewAdd challenge mobs for uncontested koth holds
  • ✨ NewMake the claim announcement clickable: preview the exact trophy
  • ⚖️ TweakIncreased total items in /shop rotation on weekdays and weekends
  • ⚡ PerformanceVarious perf improvements
cloakfox

OneBlock
  • A withdrawal gesture that does nothing has to say so
  • A listing row says how long is left
  • The browse row says who is selling
  • Pricing a listing is not fifty clicks
  • The row uses the palette and the layout it replaced
  • The chat prefix says Auction House, and is a message key
  • What clicking a row does is configuration too
  • The other screens' contents are configuration, not just their titles
  • Two hardcoded numbers become settings, and one becomes nothing
  • Two hardcoded numbers become settings, and one becomes nothing
  • Tell an owner when their listing expires into their collection bin
  • An unreadable legacy bundle must say why, and leave its bytes behind
  • Bedrock rows carry the item's own lore, so a minion is identifiable again
  • Guard /fa return against collected sales and settlement against stale bid amounts (#330, #334)
  • Persist player names so sellers and leaderboard rows survive the usercache (#365)
  • 🐛 FixFix command-usage replies, stale config docs, and an unfilled-deadline request race (#340, #342, #353, #354, #355)
  • 🐛 FixMoney-safety: guard bare settlement/refund hops and fix two stat counters (#331, #332, #336, #337, #356, #344, #345)
  • Resilience and observability: /fa status, a DB-outage latch, and economy self-heal (#362, #363, #367)
  • 🐛 FixFix detection false-positives from bin returns, lost cutover ladders, and importer data-loss (#338, #346, #339, #341, #347)
  • 🐛 FixFix seven GUI-correctness bugs: request-fulfil confirm, repaint guards, permission re-checks, dead search filter, Bedrock buy-type axis, transactions filter carry-forward (#333, #335, #348, #349, #350, #351, #352)
  • 🐛 Fixperf: notification, browse, and sweep hot-paths + a release-keying correctness fix (#343, #357, #358, #359, #360, #361)
  • Bound configured money magnitude before setScale (#290)
  • Make the MariaDB verification fail instead of skip when asked to run (#364)
  • Recover claims that committed but never delivered into the collection bin (#366)
  • Backfill imported seller names from the legacy owner_name (#328)
  • Decouple doubling auto-freeze from the alert with detection.doubling-auto-freeze-run (#299)
  • Withdraw your own listing with a plain click on the browse, both clients (#382)
  • ✨ NewAdd /ah price <id> <amount>: reprice a buy-it-now listing in place
  • Edit a listing's price from the withdrawal prompt, on both clients
  • Withdraw your own request with a plain click on the browse, both clients (#382)
  • Make the bid ladder configurable and decouple it from the sell picker
  • Click the auction broadcasts to open the listing they name (#389)
  • Money-safety: refund only on a proven pre-commit, and close two escrow-refund and two delivery gaps (#422–#426)
  • Storage & config robustness: outage-storm quieting, input caps/guards, seekable pending-count index (#391–#395, #409)
  • Commands, listeners, detection & importer: reachable bundle unpack, honest replies, on-tick permission checks, dedupe gate (#404–#408, #410, #411)
  • Hotpath: stop re-decoding payloads per click and re-reading blobs per repaint (#412, #413, #414)
  • Discovery: searchable lore/enchants, a Search button on both clients, watch counts on rows (#415, #417, #418)
  • Selling & notifications: /ah sell -all bulk listing, and tell the seller a bid landed (#416, #419)
  • Market intel & alert push: detection/conservation alerts to Discord, recent-sales pricing help (#420, #421)
  • ✨ NewNew-commit UX & correctness: bid-steps validation, editPrice restriction gate, gesture/hint fixes (#396–#403, #427, #428)
  • Set a socketTimeout default so a transient DB slowdown can't wedge the pool forever
  • Tell the seller their listing sold, and optionally auto-credit the proceeds (#440)
  • Self-heal a wedged connection pool instead of staying dead until restart
  • Upgrade MariaDB driver to 3.5.10 + pool keepalive (wedge root cause)
  • Give Bedrock players the menu cues Java players get
  • Make every refusal sound like one
  • Sound the cue when a request is withdrawn
  • One cue for one sale, however it sold
  • Name minions and spawners in /ah history instead of "weird numbers" thread ↗
  • 🐛 FixFix /ah search: ESCAPE '!' so the LIKE query parses on MariaDB (error 1064)
  • ✨ NewAdd chat emoji: parse :name: into resource-pack glyphs (Java + Bedrock)
  • ✨ NewAdd Minecraft 26.2 support (cherry-pick upstream)
  • 🐛 Fixfix: cancel teleport warmup particles when a warmup is aborted
  • feat(config): drop the SmartDataUnloader knob that never did anything (#657)
  • feat(field): turn crop discovery into a collection ladder that pays (#646)
  • ✨ Newfeat(leaderboard): rank several boards, add a resetting one, and tell a player their own rank (#652)
  • 🐛 Fixfix(market): stop selling rotating-exclusive items in the permanent shop
  • feat(tournament): make tournament types data-driven over the farmable registries (#647)
  • feat(tournament): let a tournament rank islands instead of players (#647)
  • feat(player): lifetime harvest statistics for the plugin's own content (#645)
  • 🐛 Fixfix(leaderboard): reload re-arm, rank clamp, refresh gate, off-main cache install, period debit (#670 #671 #679 #685 #687)
  • 🐛 Fixfix(tournament): registry-first Crops resolution, name leniency, island-reset row merge (#672 #673 #686)
  • 🐛 Fixfix(field,orders): discovery-ladder and orders polish (#674 #675 #676 #688 #689)
  • perf(growstation): incremental storage snapshots + dirty-gated autosave (#678)
  • perf: tick/event hotpaths — flow keys, trait memo, rain cache, settings snapshot, window memo (#680 #681 #682 #683 #684)
  • 🐛 Fixfix(listener): SafeYaml crop-placements, brewing-stand guards, disabled-world doc (#669 #677 #690)
  • perf(listener): chunk-gate the piston and physics handlers
  • feat(orders): rotation countdown, join notice and %timetillorders% placeholder
  • perf(field): skip the per-second tick for ripe standing crops
  • sellDecay C4a (write side): stamp foxfarming:hand_harvested on genuine player crop harvests
  • sellDecay C4a-v2: earn hand-harvest CREDIT instead of tagging produce
  • perf(listeners): gate interact handlers on the action before touching item meta (#495, #514)
  • 🐛 Fixfix(papi): survive a PlaceholderAPI reload and re-apply the root alias (#499, #505, #509)
  • 🚫 Removedperf(catch): remove the per-catch rod, region and world-gate re-reads (#496, #497, #498)
  • 🐛 Fixfix(economy): sanitize the special-fish multiplier and gate the eat payout (#510, #511)
  • 🐛 Fixfix(util): declare the codex opt-out, stat messages.yml, carry colour past head tags (#506, #507, #508)
  • 🐛 Fixfix(tournaments): isolate the winner firework and escape Discord markdown in names (#512, #515)
  • 🐛 Fixfix(totems): fold shared benefits over an active-totem index and share one capacity predicate (#500, #513)
  • 🐛 Fixfix(gui): gate the Stats tile, refresh the Augmenter balance, voice the creative refusals (#501, #502, #503, #504)
  • Augments read the rod being fished with, not the main hand
  • ✨ NewAdd 42 sulfur-caves fish + 5 rod skins, distribute rods via deliveries (#526)
  • Render the caught crab as an animated BetterModel (#526)
  • feat(totems): bank fish toward passive slots instead of an all-at-once buy thread ↗
  • 🐛 Fixfix(packet-entity): allocate entity ids via packetevents on 26.2
  • perf(chunkloader): scan the players near the loader's box, not the world's chunk table
  • perf(chunkloader): read the source container on one skipped hopper pass in four
  • perf(chunkloader): don't walk the source container into a hopper that is already full
  • 🐛 Fixfix(collector): match filters and the blocklist on item identity, not Material alone
  • 🐛 Fixfix(tasks): respect RestrictedCreative tracking in lumberjack and farmer
  • perf: probe hopper emptiness off the NMS handle, not CraftInventory
  • perf(chunkloader): ask the near-player guard once per chunk, not once per simulation
  • perf(chunkloader): decide a hopper's pass off the NMS handle, build no state for it
  • 🐛 Fixfix(tasks): stop block-breaking minions destroying the AOneBlock magic block & phase generators (#408)
  • Route seller-minion payouts through DailyShop's sell-decay curve
  • perf(chunkloader): skip sections that can't random-tick, as vanilla does
  • sellDecay: report the minion per-item split to DailyShop observe-only breakdown
  • sellDecay C3: charge minion sales per item type when perItem curve active
  • sellDecay C4a-v2: minion sales spend hand-harvest credit (channel-agnostic)
  • shopadmin: warn when registering FoxFarming produce with no identity tag
  • Diminishing returns on selling (sellDecay), off by default
  • 🐛 FixsellDecay legibility: visible haircut %, per-rotation notice, and shift/middle sell-all fix
  • sellDecay C1+C2: island-keying + observe-only per-item (both default-off), v1.16.0
  • sellDecay C3: per-item dual curve + global backstop (default-off), v1.17.0
  • sellDecay C4b: prestige-scaled per-item grace (default-off), v1.18.0
  • sellDecay C4a (DailyShop side): harvest-provenance read + accrual (default-off), v1.19.0
  • sellDecay C4a-v2: harvest-provenance CREDIT (replaces item tagging), v1.20.0
cloakfox

OneBlock
  • perf: look up crate locations by field, not by formatted string
  • Persistence: serialize + coalesce data.yml saves (#91)
  • 🚫 RemovedHolograms: remove Decent/Fancy/CMI providers (#116 #117 #68 #103)
  • Keys & UserManager API correctness (11 issues)
  • Commands: validation, feedback, tab-completion, transfer, teleport (10 issues)
  • Prize-roll odds & core objects (9 issues)
  • 🐛 FixCosmic/War/Casino open mechanics (8 issues) — incl. critical cosmic crash
  • Quad/Mobile/QuickCrate/FireCracker/respin mechanics (9 issues)
  • Crate interaction / open gating / location safety (6 issues)
  • PlaceholderAPI expansion (#93 #118; partial #52)
  • 🐛 FixShipped config/resource + message fixes (6 issues)
  • Config/crate migrators (8 issues)
  • Build & CI hardening + first test suite (6 issues)
  • Item rendering / menu display / animation perf (8 issues)
  • data.yml thread-safety + PAPI hardening (#91, #52)
  • Answer mcMMO's simulated breaks instead of acting on them
  • 🐛 Fixfix: refuse unenumerated entity paths that clear a tracked block (#78, part of #79)
  • 🐛 Fixfix: hold block changes until tracked blocks finish loading (#15)
  • 🐛 Fixfix: suppress protected-block drops before other plugins act on the break (#80)
  • 🐛 Fixfix: natural-lifecycle removals — leaf decay dupe, burn/fade stale rows, falling-block swallow (#84, #85, #86)
  • 🐛 Fixfix: XP separation acts on the real level bar, not the totalExperience counter (#87)
  • 🐛 Fixfix: creation/drops bypass permissions honored, vanilla-only creature geometry (#90, #91)
  • 🐛 Fixfix: housekeeping bundle, spawn-egg auto-block, virtual-GUI exemption (#92, #93, #94)
  • perf: hopper holder snapshots, hot-path guard ordering, cached moving limits (#96, #97)
  • 🐛 Fixfix: storage scalability — dedicated inventory connection, chunked batches, WE backpressure (#95)
  • 🐛 Fixfix: drop duplicated load-pending mark that broke master's build
  • 🐛 Fixfix: port vanilla's build-pattern matcher; reload inventories for online players (#107)
  • perf: cheapen the two hottest guards on BlockPhysicsEvent
  • perf(physics): check isTracked before reading the block's material
  • perf(grid): mix the spatial-hash cell key and store islands in the cells
  • feat: inline player heads in streak-end broadcast
  • ✨ NewAdd a packet factory for the 26.x game versions
  • Resync upstream 2026 08
  • 🐛 FixFix Towny plot-type gating and matcherplus item equality
  • 🐛 FixFix menu pagination, keeper permission gates, chat-input capture and GUI main-thread scans
  • 🐛 FixFix reversed-trade bug, tax-account loss, inventory-cache clobber and shop-load data integrity
  • 🐛 FixFix sign template hijacking, locale handling and render-path waste
  • 🐛 FixHot-path optimizations: gate the debug logger, kill the matcher clone storm, fix inShop leak
  • 🐛 FixFix addons killing core tasks, dyesigns permissions, limit resets and web-map marker lifecycle
  • 🐛 FixFix reload-orphaned display entities, traveller invisibility and interaction-listener cancellation
  • Harden shop lookup-table eviction and extra-key removal
  • Spawn display entities in their final visibility state; bound the despawn watcher
  • 🐛 FixFix dyesigns administrator access, BlueMap marker-set churn and migrator logging
  • Reach evicted players in the staff picker; move GUI chat input to the modern event
  • Make the player-finder dedup atomic; drop the unguarded debug stack walk
  • 🐛 FixFix single-shop /qs benefit remove threading, spurious dirty and false success
  • Detect unloaded worlds in map addons with isWorldLoaded()
  • Pass both benefit event values to listeners; log ShopLoader extra-key collisions
  • Keep addon-registered shop permissions alive across /qs reload
  • Make DisplayManager removal value-conditional; fire the put event after the mutation
  • Scope single-shop and menu-opening command work to the right Folia scheduler
  • Use Location#isWorldLoaded() for world guards instead of getWorld() null tests
  • Share per-player sign renders instead of re-rendering once per viewer
  • Scope shop-transfer and keeper-menu work to the right Folia scheduler
  • Hoist the shop-side clone in ContainerShop.matches; cache the parsed symbol link
  • Draw the staff picker's candidates from the player profile table, off the render thread; remind while a chat prompt listens
  • Console support, /wwarp help, and a permission node per subcommand
  • Staff moderation commands for warps
  • Optional teleport warmup that cancels on move or damage
  • ✨ NewAdd /wwarp reload for config.yml and locale.yml
  • Teleport cooldowns, /wwarp back, and world warp rules
  • Bypass and discount permission nodes for costs, cooldowns and limits
  • ✨ NewSearch ranking, new sort modes, remembered preferences, online filter
  • Menu search button with anvil/chat input, and a back button on results
  • Featured slot lifecycle: per-slot pricing, extension, auto-renew, expiry warnings
  • Owner analytics, offline visit summary, per-warp toggles
  • Staff featured control and warp-creation sanctions
  • Soft Vault/PlaceholderAPI dependencies and optional per-teleport cost
  • /wwarp top leaderboards and an expanded PlaceholderAPI expansion
  • Waiting queue for a full featured row
  • Move remaining player-visible strings into configuration
  • Warp names and descriptions
  • Server-defined warp categories with a menu filter
  • Warp ratings: visit-gated thumbs with Wilson scoring
  • Public API, read-only warp views, and cancellable events
  • Land-provider integration: creation ownership and entry rules
  • Modernise the locale system: MiniMessage, languages, prefix, per-message off switch
  • Post-merge review pass: auto-renew refund, rename rollback, visit-log migration, queue holds, API future
  • GUI framework: handle-identity registration, no-op heartbeat removal, latent defects
  • Async discipline: events, Vault and PAPI off async threads; featured-queue gates
  • ✨ NewSign core: create-veto ordering, parked worlds, INACTIVE rows, landing safety
  • ⚡ PerformancePerformance: owner index, placeholder caches, lazy costs, cached /wwarp top; locale + prefs fixes
  • 🐛 FixCommands & polish: number parsing, ROOT-locale filters, audit gaps, picker fixes, first-arg completion
  • Follow-ups: locale AUTO misdetection, unrefunded featured-queue holds, dead picker config
  • Config: probe the admin's own file, not the packaged defaults
  • perf: gate the BlockPhysicsEvent handler on the chunk index
  • 🐛 Fixfix(search): anvil search-bar item duplication (open results off the click event)
  • perf(signs): primitive keys for the sign position and chunk indexes
  • Don't reward blocks RestrictedCreative flagged as creative-placed
  • perf(blocks): track transient block marks so the piston failsafe stops asking Bukkit
cloakfoxfweef

OneBlock
  • 🐛 Fixfix: survive a non-numeric patch segment in the server version string
  • 🐛 Fixfix: stop shipping vendored classes under their upstream package names
cloakfox