Repository navigation
Releases
SF_MagicExpansion 1.1.19
Magic Expansion 1.1.19 — Water Cloud Progression, Fishing Safety & Compatibility
Release candidate only — not yet published. Magic Expansion 1.1.18 remains the current standalone GitHub release. This candidate collects verified Java-side source maintenance since that release for the coordinated Slimefun Legacy 4.1.78 addon refresh.
Upstream Water Cloud feature parity
- Eight-level, item-bound rod progression for Reedflower, Snowy River and Fine Rain with upstream integer keys
magicexpansion:watercloud_lvandmagicexpansion:watercloud_xp. Existing rods preserve their original Slimefun item IDs and unrelated metadata; Cyan Bamboo remains the starter rod. - Twenty supported lures across four rod families, including the existing bait bag's matching-lure priority and exact successful consumption before a custom payout. Missing bait leaves vanilla fishing untouched instead of granting a free reward.
- Generation 2 catches now receive individual elemental values, quality and breeding traits at payout. Existing generated/bred fish are never rerolled.
- Restored the upstream Water Cloud guide item IDs and an English right-click fishing reference, without replacing installed historical rod recipes.
- Imported all nine numerical classic/alternate progression bonus schedules. The supported classic hook-speed and junk reduction effects are opt-in and OFF by default; they respect the existing fishing-plugin coexistence gate.
- Optional classic bait-preservation and double-catch paths (pending final merge/test): preserve the originally selected lure only while it is still present; award two entire independently cloned stacks rather than truncating 40+40 to 64. These also default OFF.
- Protect custom fishing selection against empty loot pools, invalid weights and integer overflow. Existing valid loot ratios remain unchanged.
Java compatibility and stability
- Clear temporary player selection, item rename and shop UI state on disconnect without touching Black Market cycle ledgers or prematurely discarding unsaved shop-editor item refunds.
- Preserve movement-speed attribute modifiers owned by other plugins when applying Magic Expansion slowness; tie expiry to the target entity's owning region with a token preventing an old timer from removing a newer effect.
- Keep Mining Robot six-row menu fixes and deterministic transaction protections from 1.1.18.
- Native CI checks include the 45-addon Paper/Purpur stack, Black Market restarts and purchase conservation, Generation 2 fish metadata, rod PDC identities, and guide item registration.
Upgrade and distribution contract
Use the canonical SF_MagicExpansion1.1.19.jar only after an official immutable GitHub release exists. Never distribute this PR's JAR as a released version. Preserve your config, player records, worlds, magic shop files, and Slimefun data. Back up the entire server before replacing an older plugin; stop the server and remove duplicate older JARs before restarting.
The candidate is built on Java 25 while targeting Java 21 bytecode and Paper 1.21.11+ for Paper, Purpur, Leaf and Folia. Passing server startup and one-region native CI tests does not certify all cross-region Folia item/entity interactions.
No Geyser/Bedrock integrations, no GuizhanLib hard dependency, no existing resource-pack changes, and no Slimefun Legacy 4.1.78 or addon ZIP release in this PR.
Final publication gates
- Merge and validate the remaining Water Cloud classic features, if included, and freeze the exact 1.1.19 source SHA.
- Pass the exact-head Java build, unit tests, four-platform item-catalog smoke, Black Market ledger and full-stack restart workflows.
- Verify original Slimefun/Generation 2 PDC keys, item amounts, bait-bag transactions and absence of partial/doubled-item loss in a backed-up world.
- Publish only through the explicit immutable release workflow once standalone publication is approved. Capture the JAR SHA-256.
- Update the coordinated Slimefun Legacy 4.1.78 addon manifest to that published source and digest; then rerun the exact 45-addon candidate, not an old r150 receipt.
SF_MagicExpansion 1.1.18
MagicExpansion 1.1.18
This hotfix repairs the resource-generator menu size mismatch reported on
Purpur 1.21.11 with Slimefun Legacy 4.1.76 and MagicExpansion 1.1.16.
Mining robot GUI and tick stability
The Diamond Mining Robot and other ResourceMachine / ResourceRandomOneMachine
generators declare 36 physical output slots (18 through 53), but their menu
presets only populated slots 0 through 17. Newly placed blocks could therefore
initially open a two-row chest. A completed machine would subsequently attempt
to access slot 18 of that 18-slot inventory, repeatedly producing an
ArrayIndexOutOfBoundsException in Slimefun's InvUtils.fitAll.
Both menu presets now explicitly reserve a 54-slot (six-row) inventory before
adding the upper-row controls. The generator layout and available output slots
are unchanged.
The shared machine ticker also refuses to process an undersized or invalid
inventory instead of charging energy or throwing repeatedly. Breaking a machine
only inspects physical slots present in its inventory. Random-one generators
additionally hold any persisted pending output until a correctly sized menu is
available, rather than attempting a dangerous flush.
No saved Slimefun IDs, recipes, resource rates, output probabilities, energy
costs, player data, or Cargo routing rules were changed.
Regression checks
The source-level menu contract check verifies that both generator families
reserve 54 slots for outputs 18-53. JUnit coverage checks valid and invalid
inventory slot boundaries. The build workflow runs these checks alongside
the repository's existing Paper/Purpur compilation and verification gates.
Upgrade
Back up your server's world and Slimefun data, stop the server completely,
replace the older MagicExpansion JAR with SF_MagicExpansion1.1.18.jar,
and restart. Do not hot-reload Slimefun or MagicExpansion. The corrected
menu preset is applied as inventories are newly created or reloaded.
After starting, open an affected Diamond Mining Robot and verify its inventory
shows six rows immediately. Allow the machine to complete a production cycle and
confirm the previous ArrayIndexOutOfBoundsException no longer occurs.
Geyser/Bedrock integration is unchanged and remains managed by Geyser outside
of this addon.
SF_MagicExpansion 1.1.16
MagicExpansion 1.1.16
This coordinated maintenance release completes the item and machine audit, portable
shop receipt repair, optional Slimefun market catalog and Black Market stable-read
handling. It retains the existing item and research identities, saved data keys,
recipes, costs, machine rates and optional integrations.
Shops and saved receipts
Portable shops now commit a purchase receipt before issuing its reward. A refused
receipt save restores the payment and leaves the purchase allowance available.
The shop editor, ordinary restart and catalog population preserve existing usage.
Black Market reads recheck the file after reading and refuse an unstable snapshot
without overwriting the external data.
Operators can add the bundled fixed catalog with /magicshop generate or by
left-clicking Update / Populate Shops in the admin menu. The catalog contains
207 offers in 19 named shops: 151 core Slimefun offers and 56 optional
InfinityExpansion2 offers. Missing or disabled required items refuse the complete
offer. Catalog population adds previously unseen offer IDs, preserves installed
prices and counters, and remembers deleted offers. It is an explicit operator
action; starting the server does not populate new stock automatically.
The existing Garran, Artificer and Xur shops and randomized Black Market cycle
remain in place. Right-clicking the sunflower reloads saved shops. New
/magicshop open <shop> and /magicshop blackmarket commands support self-service;
openfor <player> <shop> and blackmarketfor <player> require the operator-default
permission to open a menu for another player. See market catalog guidance
for allowance caps, physical-item prices and NPC command examples.
Items, machines and world changes
The completed audit repairs inventory conservation and underfilled-input handling
in crafting and machine paths, bounds resource output and power transfers, and
preserves stored state during refused output or failed saves. It also covers
stacked fish output, generators, storage pages, consumables, protection checks and
structure placement. The untimed mystery-box scanner and storage chest expose
zero energy capacity, retaining their established unpowered behavior.
The Fish Energy Generator retains its full long-valued output through both
supported Slimefun data-container overloads. A malformed encoded Page Chest slot
refuses the entire page without changing its stored contents or issuing drops.
The guide generator saves its selected 64-book batch before delivery and retains
the portion that cannot fit in the 36 output slots. Pending delivery drains before
another cycle, without extra energy charges; an uncertain write holds the saved
record instead of automatically delivering it again. Collect pending output before
breaking the machine. This is normal-restart protection, not a claim of atomic
persistence across a machine menu and its block-data record during power loss.
Saved item encoding uses the JDK Base64 implementation instead of an internal
SnakeYAML class that is unavailable on some supported servers. Existing wrapped
Base64 records remain readable, and newly written records retain the legacy format.
World-changing tools check the final destination and respect protection refusals.
Structure operations preflight the affected blocks, track every attempted write,
and report restoration failures accurately. Container or other tile-state
replacements are refused where restoring a snapshot could duplicate dropped data.
Release and validation
The canonical file is SF_MagicExpansion1.1.16.jar. It is built with Java 25 against
the Paper 1.21.11 and checksum-pinned stable Slimefun API, with Java 21 baseline
bytecode. Supported API compilation and native runtime audits remain release gates,
including the full addon stack, item catalog, machine transactions, generators,
power relays, stacked vivariums, storage, portable-shop restarts and catalog imports.
Temporary audit plugins and test libraries are excluded from the distributable.
Native fixture values are now retained in source and checked against every original
item and authored-shop fingerprint, removing a deleted Actions artifact dependency.
Ordinary master pushes build artifacts without publishing. Explicit release runs
refuse mismatched version tags and refuse to replace an existing release.
Automated verification covers the exercised server API and persistence paths. It
does not establish power-loss atomicity, every historical world, arbitrary external
plugin behavior or live-client rendering. Folia is not promoted by this release.
Upgrade
Stop the server normally, retain a complete backup of worlds and plugin data, and
replace the previous MagicExpansion JAR with the single canonical 1.1.16 JAR. Keep
plugins/magicexpansion/, portable shop files, Black Market cycle and player
receipts. Start normally; do not use /reload or overwrite used shops with starter
copies. Existing catalog definitions are preserved; review prices before choosing
to populate additional offers.
SF_MagicExpansion 1.1.15
MagicExpansion 1.1.15 — automatic Slimefun Tick Monitor sampling
This maintenance release repairs the SF Timings Machine / Slimefun Tick Monitor that could remain at Tick:0ms and currentTick:0ms until an operator manually ran /sf tick top.
Tick Monitor repair
- A loaded Tick Monitor now requests a detailed Slimefun profiler sample automatically instead of only reading whatever old detailed sample happens to exist.
- All placed monitors share one coordinator. At most one profiler request is outstanding, and a new automatic sample is requested no more often than once every ten seconds after the previous request completes or fails.
- Multiple monitors in the same world/chunk share one chunk timing lookup per completed sample.
- Missing data displays
Waiting for sample; failed or overdue sampling displaysSample unavailable; old cached results are explicitly marked stale. A genuine measured0msremains a valid measurement. - Hologram and menu labels are clarified to
Slimefun totalandThis chunk, with sample age shown in the menu. These values are sampled Slimefun processing durations, not server TPS or MSPT. - The existing item ID, recipe, storage, energy behavior, hologram positions and break/place cleanup remain unchanged.
Scope
This change does not alter Black Market trades, receipts, fishing, item/research IDs, recipes, stored machine data or configuration defaults. It does not reset existing Tick Monitor blocks.
The monitor deliberately uses Slimefun's existing detailed profiler request path rather than installing another repeating server task. If the Slimefun ticker is paused, the monitor also stops updating.
Validation
The candidate includes regression coverage for first-use sampling, shared requests, chunk deduplication, cooldowns, unanswered requests, timeout recovery, stale data, genuine zero timings, inactive chunk pruning, partial-read failure and the actual Slimefun PerformanceSummary delivery protocol.
Release promotion requires the versioned candidate to pass the repository unit suite, Paper/Purpur API checks and published-core full-stack gates. A live server acceptance check is still recommended because automated CI cannot prove hologram rendering, every historical world state, arbitrary third-party interaction or Folia region-thread behavior.
Upgrade
Stop the server normally and back up the server/plugins data before replacing the JAR. Install only one MagicExpansion JAR and start normally; do not use /reload. Existing Tick Monitor blocks should begin requesting their own sample after ticking, without needing /sf tick top.
SF_MagicExpansion 1.1.14
MagicExpansion 1.1.14 — Working Black Market item offers
This is a targeted functional repair for Invalid or unreadable Black Market item when the cycle matches but a player's generated offers cannot be saved. Release availability is determined by the official GitHub release, not by a branch artifact.
Functional change
Black Market rewards and payment templates are normalized through the complete public Bukkit item serializer before ledger serialization. A SlimefunItemStack template or nested subclass delegate must not be persisted as an unrecognized YAML item class. Material-only/ID-only reconstruction is not used: complete item data, quantities, custom metadata and existing Slimefun identity remain attached.
The four-hour rotation, ten personal offers, random reward/cost pools, reveal behavior and one purchase per slot are unchanged. Receipt persistence still precedes reward delivery. Invalid files, conflicting writes, missing cycle safeguards and all existing purchase-history checks remain active. No receipt deletion, reroll, forced unlock, data schema change or unrelated addon change is included.
Validation scope
PR #20 contains the exact-error baseline reproduction, native tests of every real reward/payment pool entry, generated offers, normal/free purchases, insufficient payments, duplicate purchases, a refused-receipt refund and clean restarts. The player-flow probe runs the actual shop handlers with native inventories; only the player identity/menu handoff is simulated, not a network-connected Minecraft client. All test plugins live outside the distributed JAR.
Source unit tests, API compilation, native Paper 1.21.11/26.2/26.3 tests and published-core full-45-addon Paper/Purpur validation must pass at the versioned candidate before promotion. Refer to the release/PR evidence for the actual final SHA-256 checksums and run results. These checks do not certify every historical player file, third-party event interaction, full-inventory scenario or abrupt power-loss interleaving.
Installation
Stop the server normally and back up worlds, Slimefun data and the entire plugins/magicexpansion/ folder. Replace the older MagicExpansion JAR with the single SF_MagicExpansion1.1.14.jar; keep black_market/cycle.yml, every player receipt and all configs intact. Start normally, not with /reload. The clean restart discards the previous runtime-only player lock and loads the preserved records using the fixed item path.
Check /magicexpansion blackmarket status and open the Black Market. A valid cycle can report AVAILABLE/MATCH while a separate unreadable player ledger remains blocked. A genuinely malformed historic record still needs investigation; do not delete it to suppress the warning. This release does not automatically reconcile the older externally changed cycle-file incident.
Final release verification
All checks completed at the versioned source: 150 tests / 15 suites / 44 Black Market tests, zero failures/errors/skips; 253 native offer cases passed with zero blocked synthetic manager users. The exact JAR was tested with all 45 addons against the published Slimefun 4.1.74 core on Paper 1.21.11 build 132, Paper 26.2 build 134, Paper 26.3 build 190 and experimental Purpur 26.3 build 2646. Each target completed 210 reveals and trades, rejected insufficient payments and 210 immediate duplicate purchases, then rejected 210 more duplicate purchases in a separate JVM after restart. Each also passed the deliberately refused-receipt refund/isolation check. All ordinary console logs passed the strict error/watchdog audit. These are actual native shop handlers/inventories with synthetic player identities, not network-client or power-loss tests.
This publication promotes the exact previously tested artifact; it does not rebuild it. Only one existing production class and version/POM metadata differ from 1.1.13. No test plugins or separate stable-read PR #19 are included. No production server was changed.
Source: 1876e699b4557ab144bc36c4d8b6682aeb93e17d
JAR SHA-256: e3552fc5d54dc282194428d593d08c939f71172182075667ac87d10571b192dd
Verified r138 addon ZIP SHA-256: 3a5473e2dd994558045fa1c8854f6a2547b87a93fa294fb721f14b305a937468
PR and independent artifact audit: #20
Source/API CI: https://github.com/wickidcow/SF_MagicExpansion/actions/runs/38675709884
Published-core full-stack gate: https://github.com/wickidcow/SF_MagicExpansion/actions/runs/38675710068
SF_MagicExpansion 1.1.13
MagicExpansion 1.1.13 — Black Market receipt safety
Official exact-byte safety release from merged PR #18. The published JAR is the tested source-CI artifact, not a subsequent rebuild.
Changes
- Preserve purchase history when a missing cycle marker coexists with receipts, backups or incomplete saves.
- Refuse unreadable, empty or symbolic-link state instead of treating it as a new purchase history.
- Invalidate stale authorization after failed initialization and reject outdated refresh requests.
- Preserve four-hour rotation, purchase limits, costs, rewards, item IDs, metadata and receipt-before-reward ordering.
Verification
Source CI: https://github.com/wickidcow/SF_MagicExpansion/actions/runs/38664857521 — 146 tests, 14 suites, 40 Black Market tests; zero failures, errors or skips.
Exact-byte gate: https://github.com/wickidcow/Slimefun-Legacy/actions/runs/38665734646 — published Slimefun 4.1.74, Paper 1.21.11/26.2/26.3 and experimental Purpur 26.3. All 16 Black Market JVM phases passed; native Networks/Fluffy conservation passed on Paper 26.3.
Source: 13924991a1960daa40fe221cab5a4eef95d46ecb
JAR SHA-256: 674aeac4dbf5ce09969131dbfdbadd1e037eebfed74588f98f135902ab81adde
Upgrade and limits
Stop and back up the server, preserve the complete magicexpansion folder, and replace the old JAR rather than loading two versions. Start normally; do not use /reload. Run /magicexpansion blackmarket status.
This does not diagnose or automatically repair Albion's original cycle.yml mismatch. Do not delete receipts or reset offers to clear a lock. Synthetic restart tests are not proof of every live-client or power-loss scenario. No production server was changed by publication.
SF_MagicExpansion 1.1.12
MagicExpansion 1.1.12 — Black Market cycle diagnostics (draft candidate)
This build preserves MagicExpansion 1.1.11 fishing announcement privacy and 1.1.10 restart-safe Black Market purchase receipts.
Operator diagnostics
/magicexpansion blackmarket statusrequires OP and reads only the cycle marker; it reports whether the live and disk cycles match, are semantically identical with altered file bytes, differ in cycle ID/time, or are unreadable/missing.- It prints trading lock state, safely decoded cycle IDs/start timestamps, and an in-memory count of locked player records. It does not expose players' purchases, item contents, or credentials.
- It does not perform an automatic migration, repair, reset, refresh, or transaction. The original fail-closed purchase path is unchanged.
- Regression tests cover missing, unreadable, same-cycle rewrite and different-cycle mismatches. Existing market transaction and fishing tests remain enabled.
Upgrade
- Keep existing
plugins/magicexpansion/black_market/untouched and back it up, includingcycle.ymlandplayers/. - Replace the older JAR with the single versioned
SF_MagicExpansion1.1.12.jaronly after CI, checksum and staging verification; do not install two plugin JARs with the same plugin name. - Check
/magicexpansion blackmarket status. A mismatch does not clear on demand. Investigate the real file and purchase ledger history before enabling trading. - Keep all existing configs and item IDs; this release changes no persistent schema, offer prices, rewards, fishing behavior, loot or public chat defaults.
Read docs/black-market-cycle-diagnostics.md for lock semantics and a recovery checklist.
Release gate: This is a draft version, not a publication, and the original affected production state has not been examined. Do not publish or deploy it until a clean CI build and an old-world read-only test prove expected behavior.
SF_MagicExpansion 1.1.11
MagicExpansion 1.1.11 incorporates the coordinate-safe rare-fishing privacy changes already merged to master after 1.1.10.
- Public rare, super-rare and Fish Emperor catch announcements are disabled by default, including on servers with older configuration files that have no announcement keys.
- Precise player coordinates are no longer included in public catch announcements by default. Showing the world and X/Y/Z publicly requires both
fishing.announcements.enabled: trueandfishing.announcements.show-coordinates: true. - Optionally send the angler a private congratulatory notice (
fishing.announcements.notify-player: trueby default) without revealing their location. /magicexpansion reload fishingapplies updated fishing settings without a full server restart.- Tests cover defaults, disabled public broadcasts, private messages, explicit public/coordinate opt-in and unchanged fish catch/reward behavior.
- Retains all 1.1.10 Black Market restart-safe purchase receipts and trade persistence fixes, existing configs/persistent records, Slimefun item IDs, recipes, fish metadata, rewards, shop/command behavior, English descriptions and Java 21 bytecode compatibility.
- The public JAR remains compatible with Minecraft 1.21.11+, including Paper/Purpur 26.3. GuizhanLib remains optional.
Upgrade: Back up the plugins/magicexpansion folder, especially the black_market subfolder containing purchase receipts. Replace the previous JAR rather than installing both. If you want public rare-catch messages, explicitly opt in using the new fishing announcement keys. Do not enable show-coordinates unless the server deliberately wants to share player locations.
Scope: This version adds no new location telemetry or database schema migration. It changes message privacy defaults only. The existing caveat for a process crash between purchase-receipt persistence and Black Market reward delivery still applies.
Canonical release JAR: SF_MagicExpansion1.1.11.jar. Do not distribute the versioned artifact until GitHub Actions tests and release checks pass.
SF_MagicExpansion 1.1.10
MagicExpansion 1.1.10 hardens Black Market purchase tracking across server restarts and reconnects.
- Persists each player's ten generated Black Market offers, revealed slots and completed-purchase receipts within the same four-hour market cycle.
- Uses a durable cycle marker and per-player YAML files under
plugins/magicexpansion/black_market/. A cycle refresh commits the new cycle marker first so previous-cycle purchases cannot be reused. - Writes player state through a validated temporary file and atomic replacement. A failed write or unreadable record disables affected trades rather than silently resetting purchase limits.
- Records each purchase before issuing the reward. If the receipt cannot be saved, the purchase is cancelled and inventory payment is refunded (overflow is dropped at the player).
- Rejects stale purchase clicks after cycle rotation; existing costs, odds, offers, Slimefun item IDs, recipes and other shop functions are unchanged.
- Adds MockBukkit tests for persistent item metadata, restart/rejoin replay protection, four-hour refresh, malformed data, external edits and failed disk commits.
- Leaves the upstream logout-reset exploit closed. In addition, a complete server restart no longer rerolls a saved player's offers within the same cycle.
Upgrade note: Back up the plugin data folder before updating. The first run establishes a new four-hour cycle because earlier releases did not save Black Market session state. For a seamless migration, deploy at a scheduled Black Market refresh. Do not delete black_market/ during a cycle: this folder now contains purchase receipts.
Safety note: No Minecraft plugin can atomically commit a YAML receipt and mutate a player inventory in one filesystem transaction. A process crash between the successful receipt write and reward delivery can leave a completed receipt without a delivered reward; the order is deliberately biased against reward duplication. The storage checks are synchronous by design. If a save fails, inspect the server log and repair or restore state rather than deleting corrupted receipt files.
Install the raw SF_MagicExpansion1.1.10.jar asset after the CI build passes. Minecraft support remains 1.21.11 through 26.3 with the existing universal Java 21 bytecode baseline.
SF_MagicExpansion 1.1.9
MagicExpansion 1.1.9 adds automatic coexistence with dedicated fishing plugins.
- With
Fish.Compatibility.mode: AUTO(the default), MagicExpansion leaves fishing to enabled PyroFishing/PyroFishingPro, BetterFish/BetterFishing, EvenMoreFish, CustomFishing or UltimateFishing plugins. Without one of these plugins, its original fishing system runs normally. - Both regular and Water Cloud rods use the same compatibility decision. When paused, MagicExpansion does not replace catches, consume its bait, add rewards, change fishing XP or trigger catch effects.
- Plugin enable/disable changes are detected automatically. Add other plugin names under
Fish.Compatibility.additional-plugins, or selectCOMPATIBILITYto leave all fishing events untouched.FULLexplicitly enables MagicExpansion catch effects and can conflict with another fishing plugin. - Added
/magicexpansion fishingfor status and/magicexpansion reload fishingto apply compatibility configuration changes. - Cancelled, missing and removed catches are ignored. Normal pending catch entities still reach the original rod handlers.
- Existing rods, fish, item/research IDs, typed persistent data, recipes, guides, machines and shop records are retained. Other plugins' fish are not converted into MagicExpansion fish. Dedicated fishing plugins decide which rods they accept.
Install the raw SF_MagicExpansion1.1.9.jar asset and use a full server restart. The distributable is built against Paper 1.21.11 and checksum-verified Slimefun Legacy 4.1.61, with Java 21 bytecode. Java 25 is used for builds and tests.
Validation includes 97 passing automated tests (21 fishing cases), Paper 1.21.11/26.2/26.3 compilation, and tests against published Slimefun Legacy 4.1.68. The baseline-built candidate passed binary linkage checks against 4.1.68 and two isolated Paper 26.3 build 143 server boots, including both actual rod handlers, cancelled and pending catches, bait/XP preservation, cargo, sword and shop regressions.
Named-plugin detection uses MockBukkit tests. The real-Paper checks use a no-network player facade. Actual PyroFishing/BetterFish JAR combinations, live-client fishing, arbitrary plugin combinations, historical worlds and Folia region behavior are not certified. Inherited deprecated compatibility APIs remain visible in build output.