From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Fri, 22 Oct 2021 16:24:17 -0700 Subject: [PATCH] Add exploded block state to BlockExplodeEvent diff --git a/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java b/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java index 641c71ab66bd2499b35cf3c1d533fd105d096e10..d8b5362d0cdc3440efe30d619985018509b669e7 100644 --- a/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java +++ b/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java @@ -10,18 +10,29 @@ import org.jetbrains.annotations.NotNull; * Called when a block explodes interacting with blocks. The * event isn't called if the {@link org.bukkit.GameRule#MOB_GRIEFING} * is disabled as no block interaction will occur. + *

+ * The {@link Block} returned by this event is not necessarily + * the block that caused the explosion, just the block at the location where + * the explosion originated. See {@link #getExplodedBlockState()} */ public class BlockExplodeEvent extends BlockEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); private boolean cancel; private final List blocks; private float yield; + private final org.bukkit.block.BlockState explodedBlockState; // Paper public BlockExplodeEvent(@NotNull final Block what, @NotNull final List blocks, final float yield) { + // Paper start + this(what, blocks, yield, null); + } + public BlockExplodeEvent(@NotNull final Block what, @NotNull final List blocks, final float yield, @org.jetbrains.annotations.Nullable org.bukkit.block.BlockState explodedBlockState) { + // Paper end super(what); this.blocks = blocks; this.yield = yield; this.cancel = false; + this.explodedBlockState = explodedBlockState; // Paper } @Override @@ -34,6 +45,22 @@ public class BlockExplodeEvent extends BlockEvent implements Cancellable { this.cancel = cancel; } + // Paper start + /** + * Get a capture of the block that directly caused + * the explosion, like a bed or respawn anchor. This + * block state is not placed so {@link org.bukkit.block.BlockState#isPlaced} + * will be false. + *

+ * Can be null if no block directly caused the explosion. + * + * @return the exploded block state or null if not applicable + */ + public @org.jetbrains.annotations.Nullable org.bukkit.block.BlockState getExplodedBlockState() { + return this.explodedBlockState; + } + // Paper end + /** * Returns the list of blocks that would have been removed or were removed * from the explosion event.