aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0402-Add-exploded-block-state-to-BlockExplodeEvent-and-En.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/api/0402-Add-exploded-block-state-to-BlockExplodeEvent-and-En.patch')
-rw-r--r--patches/api/0402-Add-exploded-block-state-to-BlockExplodeEvent-and-En.patch130
1 files changed, 130 insertions, 0 deletions
diff --git a/patches/api/0402-Add-exploded-block-state-to-BlockExplodeEvent-and-En.patch b/patches/api/0402-Add-exploded-block-state-to-BlockExplodeEvent-and-En.patch
new file mode 100644
index 0000000000..c9fd0c6501
--- /dev/null
+++ b/patches/api/0402-Add-exploded-block-state-to-BlockExplodeEvent-and-En.patch
@@ -0,0 +1,130 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Fri, 22 Oct 2021 16:24:17 -0700
+Subject: [PATCH] Add exploded block state to BlockExplodeEvent and
+ EntityDamageByBlockEvent
+
+
+diff --git a/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java b/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java
+index 641c71ab66bd2499b35cf3c1d533fd105d096e10..7dcbb75170296c1dd1d784a032bf369602328b29 100644
+--- a/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java
++++ b/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java
+@@ -10,18 +10,31 @@ 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.
++ * <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
+
++ @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper
+ public BlockExplodeEvent(@NotNull final Block what, @NotNull final List<Block> blocks, final float yield) {
++ // Paper start
++ this(what, blocks, yield, null);
++ }
++ @org.jetbrains.annotations.ApiStatus.Internal
++ 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
+@@ -34,6 +47,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.
+diff --git a/src/main/java/org/bukkit/event/entity/EntityDamageByBlockEvent.java b/src/main/java/org/bukkit/event/entity/EntityDamageByBlockEvent.java
+index 461727dc7f06efb3550fc370e0db5bd04ba89711..ab18f35b686ec79551c307dde9e43c7dfad1b182 100644
+--- a/src/main/java/org/bukkit/event/entity/EntityDamageByBlockEvent.java
++++ b/src/main/java/org/bukkit/event/entity/EntityDamageByBlockEvent.java
+@@ -9,18 +9,38 @@ import org.jetbrains.annotations.Nullable;
+
+ /**
+ * Called when an entity is damaged by a block
++ * <p>
++ * For explosions, the Block returned by {@link #getDamager()} has
++ * already been cleared. See {@link #getDamagerBlockState()} for a snapshot
++ * of the block if it has already been changed.
+ */
+ public class EntityDamageByBlockEvent extends EntityDamageEvent {
+ private final Block damager;
++ private final org.bukkit.block.BlockState damagerBlockState; // Paper
+
+ public EntityDamageByBlockEvent(@Nullable final Block damager, @NotNull final Entity damagee, @NotNull final DamageCause cause, final double damage) {
++ // Paper start
++ this(damager, damagee, cause, damage, null);
++ }
++ @org.jetbrains.annotations.ApiStatus.Internal
++ public EntityDamageByBlockEvent(@Nullable final Block damager, @NotNull final Entity damagee, @NotNull final DamageCause cause, final double damage, final @Nullable org.bukkit.block.BlockState damagerBlockState) {
++ // Paper end
+ super(damagee, cause, damage);
+ this.damager = damager;
++ this.damagerBlockState = damagerBlockState; // Paper
+ }
+
+ public EntityDamageByBlockEvent(@Nullable final Block damager, @NotNull final Entity damagee, @NotNull final DamageCause cause, @NotNull final Map<DamageModifier, Double> modifiers, @NotNull final Map<DamageModifier, ? extends Function<? super Double, Double>> modifierFunctions) {
++ // Paper start
++ this(damager, damagee, cause, modifiers, modifierFunctions, null);
++ }
++
++ @org.jetbrains.annotations.ApiStatus.Internal
++ public EntityDamageByBlockEvent(@Nullable final Block damager, @NotNull final Entity damagee, @NotNull final DamageCause cause, @NotNull final Map<DamageModifier, Double> modifiers, @NotNull final Map<DamageModifier, ? extends Function<? super Double, Double>> modifierFunctions, final @Nullable org.bukkit.block.BlockState damagerBlockState) {
++ // Paper end
+ super(damagee, cause, modifiers, modifierFunctions);
+ this.damager = damager;
++ this.damagerBlockState = damagerBlockState; // Paper
+ }
+
+ /**
+@@ -32,4 +52,20 @@ public class EntityDamageByBlockEvent extends EntityDamageEvent {
+ public Block getDamager() {
+ return damager;
+ }
++
++ // Paper start
++ /**
++ * Get a capture of the block that directly caused
++ * the damage, 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 the block wasn't changed before the event
++ *
++ * @return the damager block state or null if not applicable
++ */
++ public @Nullable org.bukkit.block.BlockState getDamagerBlockState() {
++ return this.damagerBlockState;
++ }
++ // Paper end
+ }