From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
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 44f7f6939a27b9a0a796d91eac4b7c97ec90a643..2474628851c35fe8500d4d113aaafda6ce087313 100644
--- a/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java
+++ b/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java
@@ -8,18 +8,29 @@ import org.jetbrains.annotations.NotNull;
 
 /**
  * Called when a block explodes
+ * <p>
+ * 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<Block> blocks;
     private float yield;
+    private final org.bukkit.block.BlockState explodedBlockState; // Paper
 
     public BlockExplodeEvent(@NotNull final Block what, @NotNull final List<Block> blocks, final float yield) {
+        // Paper start
+        this(what, blocks, yield, null);
+    }
+    public BlockExplodeEvent(@NotNull final Block what, @NotNull final List<Block> 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
@@ -32,6 +43,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.
+     * <p>
+     * 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.
