Skip to content

Release 1.19.2 - #64

Open
tastybento wants to merge 12 commits into
masterfrom
develop
Open

Release 1.19.2#64
tastybento wants to merge 12 commits into
masterfrom
develop

Conversation

@tastybento

@tastybento tastybento commented Aug 1, 2026

Copy link
Copy Markdown
Member

Release PR for InvSwitcher 1.19.2.

What's in it

🐛 Inventories no longer roll back for players online at shutdown

[PR #63]

BentoBox closes its database immediately after addons are disabled and only kicks players afterwards, so the asynchronous write issued from saveOnShutdown() lost the race and was silently dropped — and the PlayerQuitEvent that would otherwise have saved the player fired after the database was already closed. Everything a player who was still online did since their last world change went unsaved, and because onPlayerJoin re-applies the stored inventory on login, the stale snapshot then overwrote their real inventory. Only players online at the moment the server stopped were affected — saveOnShutdown() iterates Bukkit.getOnlinePlayers(), and anyone who had already quit was saved normally while the database was still open. Shutdown saves are now synchronous.

💰 Economy commands work for normal players

[PR #63]

/<gamemode> balance and /<gamemode> pay failed with a permission error for every non-op player. The commands set permissions like invswitcher.balance, which CompositeCommand prefixes with the parent game mode's prefix, but addon.yml had no permissions: section — so those nodes were never registered with a default. They are now declared using BentoBox's [gamemode] placeholder: user commands default to true, admin eco commands to op.

⚙️ Missing game mode worlds added to the default config

[PR #61]

skygrid-world, raft_world, brix_world and parkour_world were absent from the shipped worlds: list, so on a fresh install InvSwitcher silently did not manage them — with no log line to signal the gap. Existing configs are untouched, so servers already running these game modes need to add the entries by hand.

📄 Documentation: do not run two inventory managers

[PR #60]

README section covering the disappearing-items symptom caused by running InvSwitcher alongside Multiverse-Inventories, PerWorldInventory or MultiInv, including the Multiverse-Inventories bypass-permission workaround and the two things that commonly mislead admins.

🏗️ Build and CI

[PR #63] [PR #62] [PR #59]

JaCoCo updated 0.8.12 → 0.8.15. 0.8.12 cannot read class file major version 69, so instrumentation failed with Unsupported class file major version 69 on the JDK 25 CI agent. The pinned publish-platforms.yml reusable workflow was also bumped twice.

Testing

mvn test — 128 tests, all passing on JDK 25 with the JaCoCo agent attached. Three new StoreTest cases cover the shutdown save path.

🤖 Generated with Claude Code

https://claude.ai/code/session_0183f7bfWoU9rmXxRCRwvrAs

tastybento and others added 12 commits July 3, 2026 11:53
…a2dcd1

ci: bump pinned publish-platforms.yml to ca2dcd1
Running InvSwitcher alongside Multiverse-Inventories (or PerWorldInventory,
MultiInv, etc.) makes both plugins save and restore the player on every world
change, so they overwrite each other's data. The symptom is disappearing items
with nothing logged, and it is independent of the InvSwitcher version.

Documents the Multiverse-Inventories case, including the two dead ends admins
usually hit first - inventory groups do not control whether MV-I handles a
world, and `/mv remove` is undone when Multiverse-Core re-registers the worlds
on the next restart - plus the working bypass-permission fix.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YXnYDGiASdSUZFtNyS4jbc
…icts

docs: warn against running a second inventory manager
The shipped `worlds:` list had not kept up with the game modes BentoBox now
has, so SkyGrid, Raft, Brix and Parkour were absent. On a fresh install
InvSwitcher silently did not manage those worlds, and because nothing is
logged for a world that was never hooked, there is no signal that coverage is
missing until items start leaking between worlds.

This surfaced on a server running Multiverse-Inventories alongside
InvSwitcher. After granting `mvinv.bypass.world.parkour_world` to stop MV-I
handling the world, `parkour_world` was left with no inventory manager at all
- it was not in InvSwitcher's world list either - and items carried straight
out of the parkour world into the lobby.

World names verified against each game mode's own config: skygrid-world
(SkyGrid), raft_world (Raft, from Settings.java), brix_world (Brix),
parkour_world (Parkour). Existing entries are untouched, and only new installs
pick up the additions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YXnYDGiASdSUZFtNyS4jbc
…gamemodes

fix: add missing game mode worlds to the default config
The pinned SHA predates BentoBoxWorld/.github#13, which moved the CurseForge
metadata and Hangar versionUpload JSON out of inline curl -F values and into
files. curl treats a ';' in an inline -F value as the start of a type=
attribute, so a release body containing a semicolon truncates the JSON and
both platforms reject the upload.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SAQ3YQkcfRoCZEwa6SPJcp
ci: bump publish-platforms pin to the multipart-JSON fix
…hutdown

Two fixes, released as 1.19.2.

Economy command permissions were never declared. The commands set permissions
like "invswitcher.balance", which CompositeCommand prefixes with the parent
game mode's permission prefix, giving e.g. "bskyblock.invswitcher.balance".
addon.yml had no permissions section, so those nodes were never registered with
a default and hasPermission() was false for every non-op player - /<gm> balance
and /<gm> pay failed with a permission error. Declare them in addon.yml using
BentoBox's [gamemode] placeholder, which AddonsManager expands into every game
mode's prefix. User commands default to true, admin eco commands to op.

Shutdown saves are now synchronous. BentoBox closes its database immediately
after addons are disabled and only kicks players afterwards, so the async write
issued from saveOnShutdown() lost the race and was silently dropped, and the
PlayerQuitEvent that would otherwise save fired after the database was closed.
Everything a player did since their last world change went unsaved on server
stop, and because onPlayerJoin re-applies the stored inventory, the stale
snapshot then overwrote their real inventory on the next login. Route both save
paths through a persist() helper that writes synchronously when shutting down.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0183f7bfWoU9rmXxRCRwvrAs
JaCoCo 0.8.12 cannot read class file major version 69, so instrumenting the
classes Mockito generates at runtime failed with "Error while instrumenting ...
Unsupported class file major version 69" whenever the build ran on a JDK 25
toolchain - which is what the CodeMC CI agent (OpenJDK_25) uses. 0.8.15 adds
Java 25 class file support.

Verified on JDK 25: mvn test now runs all 128 tests green with the agent
attached, and jacoco:report analyzes the bundle and writes the report.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0183f7bfWoU9rmXxRCRwvrAs
…-shutdown-save

fix: register economy command permissions and save synchronously on shutdown (1.19.2)
Pre-emptive, following the same audit as the other game mode worlds. As with
those, an existing config.yml on disk is not rewritten, so this only affects
fresh installs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0183f7bfWoU9rmXxRCRwvrAs
@sonarqubecloud

sonarqubecloud Bot commented Aug 1, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant