mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 07:20:00 +08:00
af1a50993f
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 CraftBukkit Changes: ebe18b9b0 SPIGOT-6487: Fix issue with villagers picking up items in certain situations
63 lines
3.0 KiB
Diff
63 lines
3.0 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/InventorySubcontainer.java b/src/main/java/net/minecraft/world/InventorySubcontainer.java
|
|
index 12dad3fe0eee8b0cd8959df6dba449d90bc95844..b8aca5f1c950c8ab28c432d93a6cec5d32e48b9e 100644
|
|
--- a/src/main/java/net/minecraft/world/InventorySubcontainer.java
|
|
+++ b/src/main/java/net/minecraft/world/InventorySubcontainer.java
|
|
@@ -34,6 +34,16 @@ public class InventorySubcontainer implements IInventory, AutoRecipeOutput {
|
|
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.update();
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public void onOpen(CraftHumanEntity who) {
|
|
transaction.add(who);
|
|
}
|
|
@@ -148,6 +158,7 @@ public class InventorySubcontainer implements IInventory, AutoRecipeOutput {
|
|
return itemstack;
|
|
}
|
|
|
|
+ public ItemStack addItem(ItemStack itemstack) { return a(itemstack); } // Paper - OBFHELPER
|
|
public ItemStack a(ItemStack itemstack) {
|
|
ItemStack itemstack1 = itemstack.cloneItemStack();
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java
|
|
index c29f05b6fd0664345d8d09f898777a3e44f866c4..85374ac8f5460790de03b47d7c3ce19ed5596afe 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java
|
|
@@ -845,15 +845,19 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
|
|
}
|
|
|
|
// CraftBukkit start
|
|
- ItemStack remaining = new InventorySubcontainer(inventorysubcontainer).a(itemstack);
|
|
- if (CraftEventFactory.callEntityPickupItemEvent(this, entityitem, remaining.getCount(), false).isCancelled()) {
|
|
+ // Paper start
|
|
+ List<ItemStack> contentsSnapshot = new java.util.ArrayList<>(inventorysubcontainer.getContents());
|
|
+ ItemStack itemstack1 = inventorysubcontainer.addItem(itemstack);
|
|
+ if (CraftEventFactory.callEntityPickupItemEvent(this, entityitem, itemstack1.getCount(), false).isCancelled()) {
|
|
+ inventorysubcontainer.setContents(contentsSnapshot);
|
|
+ // Paper end
|
|
return;
|
|
}
|
|
// CraftBukkit end
|
|
|
|
this.a(entityitem);
|
|
this.receive(entityitem, itemstack.getCount());
|
|
- ItemStack itemstack1 = inventorysubcontainer.a(itemstack);
|
|
+ // ItemStack itemstack1 = inventorysubcontainer.a(itemstack); // Paper - moved up
|
|
|
|
if (itemstack1.isEmpty()) {
|
|
entityitem.die();
|