testserver/patches/server/0699-Reset-villager-inventory-on-cancelled-pickup-event.patch
Jake Potrebic ea0ec8c5a0
Updated Upstream (Bukkit/CraftBukkit) & more patches
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
e9ce88b9 SPIGOT-6562: Add more specific sculk sensor event

CraftBukkit Changes:
d7ef1e91 SPIGOT-6558: Attempt to improve SkullMeta
e7a63287 SPIGOT-6562: Add more specific sculk sensor event
2021-06-15 21:12:14 -07:00

54 lines
2.6 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <blake.galbreath@gmail.com>
Date: Tue, 1 Jun 2021 22:05:08 -0500
Subject: [PATCH] Reset villager inventory on cancelled pickup event
diff --git a/src/main/java/net/minecraft/world/SimpleContainer.java b/src/main/java/net/minecraft/world/SimpleContainer.java
index 502e29644504aabe3834351d3b479e21bd8f4be7..4e47ea7359ae56efeb2b74161dc9e7387589415b 100644
--- a/src/main/java/net/minecraft/world/SimpleContainer.java
+++ b/src/main/java/net/minecraft/world/SimpleContainer.java
@@ -34,6 +34,16 @@ public class SimpleContainer implements Container, StackedContentsCompatible {
return this.items;
}
+ // Paper start
+ public void setContents(List<ItemStack> items) {
+ this.items.clear();
+ for(int i = 0; i < items.size(); i++) {
+ this.items.set(i, items.get(i));
+ }
+ this.setChanged();
+ }
+ // Paper end
+
public void onOpen(CraftHumanEntity who) {
this.transaction.add(who);
}
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
index 18b35c8d2160d24c31483edef13cc5e8d93ed09b..27530389690ec329bd92a722e4faf87e367bce91 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -888,15 +888,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
// CraftBukkit start
- ItemStack remaining = new SimpleContainer(inventorysubcontainer).addItem(itemstack);
- if (CraftEventFactory.callEntityPickupItemEvent(this, item, remaining.getCount(), false).isCancelled()) {
+ // Paper start
+ List<ItemStack> contentsSnapshot = new java.util.ArrayList<>(inventorysubcontainer.getContents());
+ ItemStack itemstack1 = inventorysubcontainer.addItem(itemstack);
+ if (CraftEventFactory.callEntityPickupItemEvent(this, item, itemstack1.getCount(), false).isCancelled()) {
+ inventorysubcontainer.setContents(contentsSnapshot);
+ // Paper end
return;
}
// CraftBukkit end
this.onItemPickup(item);
this.take(item, itemstack.getCount());
- ItemStack itemstack1 = inventorysubcontainer.addItem(itemstack);
+ // ItemStack itemstack1 = inventorysubcontainer.a(itemstack); // Paper - moved up
if (itemstack1.isEmpty()) {
item.discard();