diff --git a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch index 6bf39741d4..ca3ff8eb89 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch @@ -956,7 +956,7 @@ protected abstract void addAdditionalSaveData(ValueOutput output); @Nullable -@@ -2039,11 +_,63 @@ +@@ -2039,11 +_,60 @@ @Nullable public ItemEntity spawnAtLocation(ServerLevel level, ItemStack stack, Vec3 offset) { @@ -985,6 +985,7 @@ return null; } else { - ItemEntity itemEntity = new ItemEntity(level, this.getX() + offset.x, this.getY() + offset.y, this.getZ() + offset.z, stack); +- itemEntity.setDefaultPickUpDelay(); + // CraftBukkit start - Capture drops for death event + if (this instanceof net.minecraft.world.entity.LivingEntity && !this.forceDrops) { + // Paper start - Restore vanilla drops behavior @@ -998,10 +999,7 @@ + return null; + } + // CraftBukkit end -+ ItemEntity itemEntity = new ItemEntity(level, this.getX() + offset.x, this.getY() + offset.y, this.getZ() + offset.z, stack.copy()); // Paper - copy so we can destroy original -+ stack.setCount(0); // Paper - destroy this item - if this ever leaks due to game bugs, ensure it doesn't dupe -+ - itemEntity.setDefaultPickUpDelay(); ++ ItemEntity itemEntity = new ItemEntity(level, this.getX() + offset.x, this.getY() + offset.y, this.getZ() + offset.z, stack.copy()); // Paper - copy + itemEntity.setDefaultPickUpDelay(); // Paper - diff on change (in dropConsumer) + // Paper start - Call EntityDropItemEvent + return this.spawnAtLocation(level, itemEntity); diff --git a/paper-server/patches/sources/net/minecraft/world/entity/LivingEntity.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/LivingEntity.java.patch index 3553abdf60..c24ffeac4d 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/LivingEntity.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/LivingEntity.java.patch @@ -1643,18 +1643,6 @@ private void updatingUsingItem() { if (this.isUsingItem()) { if (ItemStack.isSameItem(this.getItemInHand(this.getUsedItemHand()), this.useItem)) { -@@ -3141,6 +_,11 @@ - return null; - } else { - double d = this.getEyeY() - 0.3F; -+ // Paper start -+ final ItemStack tmp = stack.copy(); -+ stack.setCount(0); -+ stack = tmp; -+ // Paper end - ItemEntity itemEntity = new ItemEntity(this.level(), this.getX(), d, this.getZ(), stack); - itemEntity.setPickUpDelay(40); - if (includeThrower) { @@ -3172,7 +_,12 @@ protected void updateUsingItem(ItemStack usingItem) { diff --git a/paper-server/patches/sources/net/minecraft/world/inventory/AbstractContainerMenu.java.patch b/paper-server/patches/sources/net/minecraft/world/inventory/AbstractContainerMenu.java.patch index ba70c9588e..e392e9183a 100644 --- a/paper-server/patches/sources/net/minecraft/world/inventory/AbstractContainerMenu.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/inventory/AbstractContainerMenu.java.patch @@ -171,6 +171,19 @@ ItemStack item = inventory.getItem(button); Slot slot = this.slots.get(slotId); ItemStack carried = slot.getItem(); +@@ -530,7 +_,11 @@ + } + + carried = slot2.safeTake(i1, Integer.MAX_VALUE, player); +- player.drop(carried, true); ++ // CraftBukkit start - SPIGOT-8010: break loop ++ if (player.drop(carried, true) == null) { ++ break; ++ } ++ // CraftBukkit end - SPIGOT-8010: break loop + player.handleCreativeModeItemDrop(carried); + } + } @@ -590,8 +_,9 @@ if (player instanceof ServerPlayer) { ItemStack carried = this.getCarried();