Release 3.16.1#2977
Merged
Merged
Conversation
/bbox admin delete used to hard-delete the Island row immediately and kick off DeleteIslandChunks to repaint blocks via the addon's ChunkGenerator. Two problems: the row was gone before chunks were touched (so /bbox info reported "no island here" while the player was still standing on the old blocks), and DeleteIslandChunks called the deprecated ChunkGenerator#generateChunkData on modern generators that only override generateNoise — the futures completed exceptionally and the failure was silently swallowed by the regen loop, so no blocks were ever cleared. Collapse AdminDeleteCommand.deleteIsland to always soft-delete via IslandsManager.deleteIsland(island, true, uuid). The row stays in the DB marked deletable; PurgeRegionsService / HousekeepingManager reaps the region files at the filesystem level on its schedule. With the simple-gen branch gone, the chunk-regen / seed-world infrastructure has no remaining consumers in BentoBox or any in-tree gamemode. Removed: - DeleteIslandChunks, IslandChunkDeletionManager, CopyWorldRegenerator - AddonsManager seed-world creation/removal (createSeedWorlds, removeSeedWorlds, seedWorld, deleteWorldFolder, BENTOBOX constant) - IslandDeletionManager DB handler, BentoBoxReady recovery loader, and IslandDeleteChunksEvent listener (inDeletion set retained; populated only by IslandDeletedEvent removal now) - IslandsManager bentobox-deleteIsland MultiLib subscriber Slimmed: - WorldRegenerator interface: only regenerateChunk(Chunk) remains - WorldRegeneratorImpl: pure-Bukkit, delegates to World.regenerateChunk for CleanSuperFlatListener's recovery path Deprecated for removal: - GameModeAddon.isUsesNewChunkGeneration() — last consumer was the seed-world flag in AddonsManager.enableAddon, now gone. Bumped buildVersion to 3.16.1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This release updates BentoBox’s island-deletion flow to always soft-delete islands (keeping the DB row marked deletable until region files are purged later), and removes the now-unused chunk regeneration / seed-world infrastructure that previously attempted to repaint island chunks.
Changes:
- Admin delete now always uses
IslandsManager.deleteIsland(..., true, uuid)(soft-delete) instead of conditionally hard-deleting and chunk-regenerating. - Removed chunk-regeneration / seed-world deletion pipeline (
DeleteIslandChunks,IslandChunkDeletionManager,CopyWorldRegenerator, seed-world management inAddonsManager). - Simplified
WorldRegeneratorto only supportregenerateChunk(Chunk)and provided a pure-Bukkit implementation.
Reviewed changes
Copilot reviewed 12 out of 13 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java | Updates mocks to match removal of chunk-deletion manager wiring. |
| src/test/java/world/bentobox/bentobox/api/commands/admin/AdminDeleteCommandTest.java | Updates tests to assert admin delete always soft-deletes; removes hard-delete path coverage. |
| src/main/java/world/bentobox/bentobox/util/DeleteIslandChunks.java | Removed obsolete chunk-by-chunk island deletion/regeneration utility. |
| src/main/java/world/bentobox/bentobox/nms/WorldRegeneratorImpl.java | Replaced NMS/seed-world regenerator with a Bukkit World#regenerateChunk delegate. |
| src/main/java/world/bentobox/bentobox/nms/WorldRegenerator.java | Slimmed interface to only regenerateChunk(Chunk). |
| src/main/java/world/bentobox/bentobox/nms/CopyWorldRegenerator.java | Removed seed-world copy regenerator implementation. |
| src/main/java/world/bentobox/bentobox/managers/IslandsManager.java | Removes MultiLib delete-island subscriber; updates hard-delete Javadoc guidance. |
| src/main/java/world/bentobox/bentobox/managers/IslandDeletionManager.java | Removes DB-backed deletion queue/loader; attempts to retain “in deletion” tracking. |
| src/main/java/world/bentobox/bentobox/managers/IslandChunkDeletionManager.java | Removed deletion queue runner. |
| src/main/java/world/bentobox/bentobox/managers/AddonsManager.java | Removes seed-world create/remove logic and related constants. |
| src/main/java/world/bentobox/bentobox/api/commands/admin/AdminDeleteCommand.java | Collapses delete behavior to always soft-delete. |
| src/main/java/world/bentobox/bentobox/api/addons/GameModeAddon.java | Deprecates isUsesNewChunkGeneration() for removal (no longer used by BentoBox). |
| build.gradle.kts | Bumps buildVersion to 3.16.1. |
Copilot flagged that after the seed-world cleanup the inDeletion set was permanently empty (no more DELETE_CHUNKS event populating it), so inDeletion(Location) always returned false and the call sites in DefaultNewIslandLocationStrategy and AdminRegisterCommand were silently no-ops. Re-anchor the check on the live island state instead of a side-channel set: ask the islands manager whether the island at that location is marked deletable. This restores the original semantic for AdminRegisterCommand (block re-registering an island that's awaiting filesystem reap) without needing event-based bookkeeping. The DefaultNewIslandLocationStrategy call stays redundant-but-harmless — soft-deleted islands are also caught by getIslandAt(l).isPresent(). Drops the inDeletion HashSet, the IslandDeletedEvent listener, and the Listener interface implementation. BentoBoxListenerRegistrar no longer registers the manager for events. Public API surface is unchanged: BentoBox.getIslandDeletionManager() and IslandDeletionManager.inDeletion(Location) still work. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment on lines
+8
to
+14
| * Reports whether an island location is awaiting filesystem-level cleanup | ||
| * (i.e. the row is still in the DB with {@code deletable = true}, before | ||
| * {@code PurgeRegionsService} reaps the region files). | ||
| * | ||
| * <p>Backed by the live island state rather than a side-channel set, so | ||
| * it can never drift out of sync with the actual database. | ||
| * |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.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.



/bbox admin delete used to hard-delete the Island row immediately and kick off DeleteIslandChunks to repaint blocks via the addon's ChunkGenerator. Two problems: the row was gone before chunks were touched (so /bbox info reported "no island here" while the player was still standing on the old blocks), and DeleteIslandChunks called the deprecated ChunkGenerator#generateChunkData on modern generators that only override generateNoise — the futures completed exceptionally and the failure was silently swallowed by the regen loop, so no blocks were ever cleared.
Collapse AdminDeleteCommand.deleteIsland to always soft-delete via IslandsManager.deleteIsland(island, true, uuid). The row stays in the DB marked deletable; PurgeRegionsService / HousekeepingManager reaps the region files at the filesystem level on its schedule.
With the simple-gen branch gone, the chunk-regen / seed-world infrastructure has no remaining consumers in BentoBox or any in-tree gamemode. Removed:
Slimmed:
Deprecated for removal:
Bumped buildVersion to 3.16.1.