From d8456ee65b75adfa854ca56c1badc160f27ddd9a Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Sat, 6 Apr 2024 23:26:56 +0200 Subject: [PATCH] Don't throw NPE for unplaced blockstate on #getDrops (#10366) --- patches/api/0374-Add-getDrops-to-BlockState.patch | 15 +++++++++++---- .../server/0788-Add-getDrops-to-BlockState.patch | 15 +++------------ 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/patches/api/0374-Add-getDrops-to-BlockState.patch b/patches/api/0374-Add-getDrops-to-BlockState.patch index 0a8d8ad13a..f25ab4169f 100644 --- a/patches/api/0374-Add-getDrops-to-BlockState.patch +++ b/patches/api/0374-Add-getDrops-to-BlockState.patch @@ -7,10 +7,10 @@ Originally added isPreferredTool to BlockData but upstream added that. diff --git a/src/main/java/org/bukkit/block/BlockState.java b/src/main/java/org/bukkit/block/BlockState.java -index c439cf0bb6c50db2b3304c60e50046f096392f9f..ef35316fa66ac8d9c7836b9c8af56dcefbf6ff2e 100644 +index c439cf0bb6c50db2b3304c60e50046f096392f9f..19837f0eae67854f48e777bc7d4a13b53fa4b436 100644 --- a/src/main/java/org/bukkit/block/BlockState.java +++ b/src/main/java/org/bukkit/block/BlockState.java -@@ -243,5 +243,34 @@ public interface BlockState extends Metadatable { +@@ -243,5 +243,41 @@ public interface BlockState extends Metadatable { * @return true if collidable */ boolean isCollidable(); @@ -19,9 +19,12 @@ index c439cf0bb6c50db2b3304c60e50046f096392f9f..ef35316fa66ac8d9c7836b9c8af56dce + * Returns an immutable list of items which would drop by destroying this block state. + * + * @return an immutable list of dropped items for the block state ++ * @throws IllegalStateException if this block state is not placed + */ + @NotNull -+ java.util.@org.jetbrains.annotations.Unmodifiable Collection getDrops(); ++ default java.util.@org.jetbrains.annotations.Unmodifiable Collection getDrops() { ++ return this.getDrops(null); ++ } + + /** + * Returns an immutable list of items which would drop by destroying this block state @@ -29,9 +32,12 @@ index c439cf0bb6c50db2b3304c60e50046f096392f9f..ef35316fa66ac8d9c7836b9c8af56dce + * + * @param tool The tool or item in hand used for digging + * @return an immutable list of dropped items for the block state ++ * @throws IllegalStateException if this block state is not placed + */ + @NotNull -+ java.util.@org.jetbrains.annotations.Unmodifiable Collection getDrops(@Nullable org.bukkit.inventory.ItemStack tool); ++ default java.util.@org.jetbrains.annotations.Unmodifiable Collection getDrops(@Nullable org.bukkit.inventory.ItemStack tool) { ++ return this.getDrops(tool, null); ++ } + + /** + * Returns an immutable list of items which would drop by the entity destroying this @@ -40,6 +46,7 @@ index c439cf0bb6c50db2b3304c60e50046f096392f9f..ef35316fa66ac8d9c7836b9c8af56dce + * @param tool The tool or item in hand used for digging + * @param entity the entity destroying the block + * @return an immutable list of dropped items for the block state ++ * @throws IllegalStateException if this block state is not placed + */ + @NotNull + java.util.@org.jetbrains.annotations.Unmodifiable Collection getDrops(@Nullable org.bukkit.inventory.ItemStack tool, @Nullable org.bukkit.entity.Entity entity); diff --git a/patches/server/0788-Add-getDrops-to-BlockState.patch b/patches/server/0788-Add-getDrops-to-BlockState.patch index 93f48ad578..ba33e973c5 100644 --- a/patches/server/0788-Add-getDrops-to-BlockState.patch +++ b/patches/server/0788-Add-getDrops-to-BlockState.patch @@ -7,26 +7,17 @@ Originally added isPreferredTool to BlockData but upstream added that. diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java -index 08716e757b2e100f7bc47a046f02db664d882aba..d11d854ae90b99aa2ce227994d07fe1fe9b4a60a 100644 +index 08716e757b2e100f7bc47a046f02db664d882aba..2cfaa59a0bb6b5253b5a8dcc38ae65e0f085fd3f 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java -@@ -337,5 +337,33 @@ public class CraftBlockState implements BlockState { +@@ -337,5 +337,24 @@ public class CraftBlockState implements BlockState { public boolean isCollidable() { return this.data.getBlock().hasCollision; } + + @Override -+ public java.util.Collection getDrops() { -+ return this.getDrops(null); -+ } -+ -+ @Override -+ public java.util.Collection getDrops(org.bukkit.inventory.ItemStack item) { -+ return this.getDrops(item, null); -+ } -+ -+ @Override + public java.util.Collection getDrops(org.bukkit.inventory.ItemStack item, org.bukkit.entity.Entity entity) { ++ this.requirePlaced(); + net.minecraft.world.item.ItemStack nms = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(item); + + // Modelled off EntityHuman#hasBlock