Fix TeamListener corrupting range on other game modes' islands#11
Merged
tastybento merged 1 commit intoMay 19, 2026
Merged
Conversation
onTeamKick and onTeamLeave had inverted boolean logic: they called resize() whenever the kicked/leaving island was NOT in StrangerRealms' own world, so any /<gamemode> team kick or leave on the server would fire resize() on the wrong addon's island. resize() then called Island.setRange() with StrangerRealms' configured distance (typically 64 with defaults: 32 + 32*(members-1)), overwriting the range field of e.g. AOneBlock, BSkyBlock, Boxed islands. On the next server restart IslandsManager.load() refused to load those islands because range no longer matched the configured distance-between-islands and BentoBox panic-disabled with "Island distance mismatch". Invert the conditions to early-return when the island isn't in StrangerRealms' world (matching the pattern already used in onTeamJoin) and add a defensive guard at the top of resize() so any future listener bug can't reintroduce the same corruption. Includes a TeamListenerTest regression suite. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
TeamListener.onTeamKickandonTeamLeavehad inverted boolean logic — they invokedresize()whenever the affected island was not in StrangerRealms' world, so a/<gamemode> team kickorteam leaveon any island anywhere on the server would fire StrangerRealms' resize against the wrong addon's data.resize()then calledIsland.setRange(stranger.islandDistance + stranger.memberBonus * (members - 1))— with defaults32 + 32*1 = 64— directly mutating therangefield of e.g. AOneBlock / BSkyBlock / Boxed islands.IslandsManager.loadIslandrejects those islands (range 64 != distance 400) and BentoBox panic-disables withIsland distance mismatch.Fix: invert the conditions in
onTeamKickandonTeamLeaveto early-return when the island isn't in StrangerRealms' world (matching the pattern already used inonTeamJoin), plus add a defensive guard at the top ofresize()so any future listener bug can't reintroduce the same corruption.Diagnostic trace
From a server running BentoBox 3.16.1 with diagnostic logging on
Island.setProtectionRange:The same fingerprint reproduced for BSkyBlock and Boxed islands on the same server.
Test plan
mvn test -Dtest=TeamListenerTest— 3/3 green, covers:onTeamKickon a non-StrangerRealms island never callssetRange/setProtectionRangeonTeamLeaveon a non-StrangerRealms island never callssetRange/setProtectionRangeonTeamKickwithmemberBonus == 0early-returns even in StrangerRealms' own worldmvn test) — 173 tests passCompanion work
A separate PR will land in BentoBox core to harden
Island.setRangeso it refuses to mutate the range of game modes that haveisEnforceEqualRanges() == trueto a value that doesn't match the configureddistance-between-islands. That belt-and-suspenders fix means even if a third-party addon repeats this mistake in the future, it won't be able to corrupt the database.Recovery for affected servers
Existing corrupted islands stored with
range: 64will still crash on load. Either:plugins/BentoBox/database/Island/*.jsonand setrangeback to the gamemode's configureddistance-between-islands(e.g. 400 for AOneBlock / BSkyBlock, 320 for Boxed), or🤖 Generated with Claude Code