Fix shift click result in anvil/grindstone take result event

This commit is contained in:
BillyGalbreath
2022-07-06 14:15:51 -05:00
parent 52b42b7fd8
commit f1e3c8eb0f
5 changed files with 60 additions and 21 deletions

View File

@@ -4,8 +4,20 @@ Date: Sun, 19 Apr 2020 00:17:56 -0500
Subject: [PATCH] Anvil API
diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
index 79d8bcf3f9b0fe4a65ad7899f858efefac6feaa7..79770da8a1e4ca3f5c531fd040626b90124aeb66 100644
--- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java
@@ -75,6 +75,7 @@ public abstract class AbstractContainerMenu {
@Nullable
private ContainerSynchronizer synchronizer;
private boolean suppressRemoteUpdates;
+ @javax.annotation.Nullable protected ItemStack activeQuickItem = null; // Purpur
// CraftBukkit start
public boolean checkReachable = true;
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbffc6758c3 100644
index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e95eddd77 100644
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
@@ -21,6 +21,13 @@ import org.slf4j.Logger;
@@ -31,7 +43,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
public AnvilMenu(int syncId, Inventory inventory) {
this(syncId, inventory, ContainerLevelAccess.NULL);
@@ -59,12 +68,14 @@ public class AnvilMenu extends ItemCombinerMenu {
@@ -59,12 +68,15 @@ public class AnvilMenu extends ItemCombinerMenu {
@Override
protected boolean mayPickup(Player player, boolean present) {
@@ -41,13 +53,14 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
@Override
protected void onTake(Player player, ItemStack stack) {
+ if (org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent.getHandlerList().getRegisteredListeners().length > 0) new org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack)).callEvent(); // Purpur
+ ItemStack itemstack = activeQuickItem == null ? stack : activeQuickItem; // Purpur
+ if (org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent.getHandlerList().getRegisteredListeners().length > 0) new org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack)).callEvent(); // Purpur
if (!player.getAbilities().instabuild) {
+ if (bypassCost) ((ServerPlayer) player).lastSentExp = -1; else // Purpur
player.giveExperienceLevels(-this.cost.get());
}
@@ -115,6 +126,12 @@ public class AnvilMenu extends ItemCombinerMenu {
@@ -115,6 +127,12 @@ public class AnvilMenu extends ItemCombinerMenu {
@Override
public void createResult() {
@@ -60,7 +73,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
ItemStack itemstack = this.inputSlots.getItem(0);
this.cost.set(1);
@@ -191,7 +208,7 @@ public class AnvilMenu extends ItemCombinerMenu {
@@ -191,7 +209,7 @@ public class AnvilMenu extends ItemCombinerMenu {
int i2 = (Integer) map1.get(enchantment);
i2 = l1 == i2 ? i2 + 1 : Math.max(i2, l1);
@@ -69,7 +82,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
if (this.player.getAbilities().instabuild || itemstack.is(Items.ENCHANTED_BOOK)) {
flag3 = true;
@@ -203,7 +220,7 @@ public class AnvilMenu extends ItemCombinerMenu {
@@ -203,7 +221,7 @@ public class AnvilMenu extends ItemCombinerMenu {
Enchantment enchantment1 = (Enchantment) iterator1.next();
if (enchantment1 != enchantment && !enchantment.isCompatibleWith(enchantment1)) {
@@ -78,7 +91,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
++i;
}
}
@@ -274,6 +291,13 @@ public class AnvilMenu extends ItemCombinerMenu {
@@ -274,6 +292,13 @@ public class AnvilMenu extends ItemCombinerMenu {
this.cost.set(this.maximumRepairCost - 1); // CraftBukkit
}
@@ -92,7 +105,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
if (this.cost.get() >= this.maximumRepairCost && !this.player.getAbilities().instabuild) { // CraftBukkit
itemstack1 = ItemStack.EMPTY;
}
@@ -296,6 +320,12 @@ public class AnvilMenu extends ItemCombinerMenu {
@@ -296,6 +321,12 @@ public class AnvilMenu extends ItemCombinerMenu {
org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(this.getBukkitView(), itemstack1); // CraftBukkit
sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client
this.broadcastChanges();
@@ -105,6 +118,20 @@ index 506d758efbf16da9467f120321d2359a8832e477..c1ed57bae737fca803c2dd8666207dbf
}
}
diff --git a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java
index 35575434f3c90f1bd23df6584ee8a5a991f93f9f..297f829275a0cdfdd8e9214dfa78a91a7471cc9f 100644
--- a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java
@@ -140,7 +140,9 @@ public abstract class ItemCombinerMenu extends AbstractContainerMenu {
return ItemStack.EMPTY;
}
+ this.activeQuickItem = itemstack; // Purpur
slot.onTake(player, itemstack1);
+ this.activeQuickItem = null; // Purpur
}
return itemstack;
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
index 88d3ca586ff6905f18a8ab9f0e229f440ed44088..27dd4eb4781a3c75772860c11db886e1038cecd2 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java