aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorShane Freeder <[email protected]>2019-04-14 21:05:37 +0100
committerShane Freeder <[email protected]>2019-04-14 21:05:41 +0100
commit8f7f4cfb3c4ec4d7dbeb502b1f66977115ffe5c6 (patch)
tree23389d3b8e461c1e04fae26a22f95788cc11b349
parentb8c184a4d998809f36f728a1064be5e796b79f8c (diff)
downloadPaper-8f7f4cfb3c4ec4d7dbeb502b1f66977115ffe5c6.tar.gz
Paper-8f7f4cfb3c4ec4d7dbeb502b1f66977115ffe5c6.zip
Don't drop items into the world if BlockPlaceEvent is cancelled (Fixes #1970)
-rw-r--r--Spigot-Server-Patches/0382-Don-t-drop-items-into-the-world-if-BlockPlaceEvent-i.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0382-Don-t-drop-items-into-the-world-if-BlockPlaceEvent-i.patch b/Spigot-Server-Patches/0382-Don-t-drop-items-into-the-world-if-BlockPlaceEvent-i.patch
new file mode 100644
index 0000000000..931808f6c0
--- /dev/null
+++ b/Spigot-Server-Patches/0382-Don-t-drop-items-into-the-world-if-BlockPlaceEvent-i.patch
@@ -0,0 +1,38 @@
+From f560ea0c9401e8a2d36c3d01bf9a7084c867bf70 Mon Sep 17 00:00:00 2001
+From: Shane Freeder <[email protected]>
+Date: Sun, 14 Apr 2019 20:59:16 +0100
+Subject: [PATCH] Don't drop items into the world if BlockPlaceEvent is
+ cancelled
+
+
+diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
+index 53e0688d96..c5f5fa4e74 100644
+--- a/src/main/java/net/minecraft/server/ItemStack.java
++++ b/src/main/java/net/minecraft/server/ItemStack.java
+@@ -187,12 +187,15 @@ public final class ItemStack {
+ }
+ }
+ }
++ world.captureDrops = new java.util.ArrayList<>(); // Paper - Don't drop items if block place is cancelled
+ EnumInteractionResult enuminteractionresult = this.getItem().a(entityhuman, world, blockposition, enumhand, enumdirection, f, f1, f2);
+ int newData = this.getData();
+ int newCount = this.getCount();
+ this.setCount(oldCount);
+ this.setData(oldData);
+ world.captureBlockStates = false;
++ List<EntityItem> drops = world.captureDrops; // Paper - Don't drop items if block place is cancelled
++ world.captureDrops = null; // Paper - Don't drop items if block place is cancelled
+ if (enuminteractionresult == EnumInteractionResult.SUCCESS && world.captureTreeGeneration && world.capturedBlockStates.size() > 0) {
+ world.captureTreeGeneration = false;
+ Location location = new Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ());
+@@ -254,6 +257,7 @@ public final class ItemStack {
+ this.setData(newData);
+ this.setCount(newCount);
+ }
++ if (drops != null) drops.forEach(world::addEntity); // Paper - Don't drop items if block place is cancelled
+
+ for (Map.Entry<BlockPosition, TileEntity> e : world.capturedTileEntities.entrySet()) {
+ world.setTileEntity(e.getKey(), e.getValue());
+--
+2.21.0
+