Repository navigation
fix: apply TNT protections to Sulfur Cube explosions - #3104
Open
daniel-skopek wants to merge 1 commit into
Open
daniel-skopek wants to merge 1 commit into
daniel-skopek wants to merge 1 commit into
Conversation
A Sulfur Cube exploding with absorbed TNT raises an EntityExplodeEvent whose entity type is SULFUR_CUBE, not TNT. ExplosionListener only matched primed TNT and TNT minecarts, so these explosions bypassed TNT_DAMAGE and WORLD_TNT_DAMAGE and could destroy island blocks. Resolve SULFUR_CUBE at runtime so older servers still load the listener, and include it in TNT_TYPES so block and entity damage follow the existing TNT flags. Also gate player ignition with flint and steel or a fire charge by TNT_PRIMING. Adds regression tests for allowed and denied Sulfur Cube explosions, entity damage and priming.
This branch has not been deployed
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
A Sulfur Cube with absorbed TNT explodes as an
EntityExplodeEventwhose entitytype is
SULFUR_CUBE, notTNT.ExplosionListeneronly matched primed TNTand TNT minecarts, so these explosions bypassed
TNT_DAMAGEandWORLD_TNT_DAMAGE. On protected islands that allowed destroying blocks anddamaging entities even when TNT damage was disabled. The AOneBlock magic block
itself was already protected by
BlockProtect, but player builds around it werenot.
Changes
SULFUR_CUBEat runtime withfindFirstMatchingEnum(...), so thelistener still loads on servers without the entity.
SULFUR_CUBEinTNT_TYPES, making Sulfur Cube explosions follow theexisting
TNT_DAMAGEandWORLD_TNT_DAMAGEflags for both blocks and entitydamage.
TNT_PRIMING, matching the existing TNT block behaviour.entity damage, and priming.
Testing
./gradlew test --tests 'world.bentobox.bentobox.listeners.flags.protection.*'./gradlew testgit diff --checkNotes
AOneBlock still ships
TNT_DAMAGE: trueby default; servers that want SulfurCube explosions blocked there must set it to
false. Ignition by redstone,dispensers or environmental explosions has no player actor, so
TNT_PRIMINGdoes not apply to those paths, but the resulting explosion still respects
TNT_DAMAGE.