From ab1586c2fb5fa7a381e6191e1137acc69aeebbf2 Mon Sep 17 00:00:00 2001 From: FreeSoccerHDX Date: Tue, 13 Dec 2022 19:28:47 +1100 Subject: [PATCH] #1123: Add PrepareGrindstoneEvent --- .../world/inventory/ContainerGrindstone.patch | 43 +++++++++++++++++++ .../craftbukkit/event/CraftEventFactory.java | 8 ++++ 2 files changed, 51 insertions(+) diff --git a/nms-patches/net/minecraft/world/inventory/ContainerGrindstone.patch b/nms-patches/net/minecraft/world/inventory/ContainerGrindstone.patch index fb8544b76..fb2494128 100644 --- a/nms-patches/net/minecraft/world/inventory/ContainerGrindstone.patch +++ b/nms-patches/net/minecraft/world/inventory/ContainerGrindstone.patch @@ -53,6 +53,49 @@ } @Override +@@ -145,7 +175,7 @@ + boolean flag2 = !itemstack.isEmpty() && !itemstack.is(Items.ENCHANTED_BOOK) && !itemstack.isEnchanted() || !itemstack1.isEmpty() && !itemstack1.is(Items.ENCHANTED_BOOK) && !itemstack1.isEnchanted(); + + if (itemstack.getCount() > 1 || itemstack1.getCount() > 1 || !flag1 && flag2) { +- this.resultSlots.setItem(0, ItemStack.EMPTY); ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit + this.broadcastChanges(); + return; + } +@@ -156,7 +186,7 @@ + + if (flag1) { + if (!itemstack.is(itemstack1.getItem())) { +- this.resultSlots.setItem(0, ItemStack.EMPTY); ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit + this.broadcastChanges(); + return; + } +@@ -170,7 +200,7 @@ + itemstack2 = this.mergeEnchants(itemstack, itemstack1); + if (!itemstack2.isDamageableItem()) { + if (!ItemStack.matches(itemstack, itemstack1)) { +- this.resultSlots.setItem(0, ItemStack.EMPTY); ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit + this.broadcastChanges(); + return; + } +@@ -183,12 +213,12 @@ + i = flag3 ? itemstack.getDamageValue() : itemstack1.getDamageValue(); + itemstack2 = flag3 ? itemstack : itemstack1; + } +- +- this.resultSlots.setItem(0, this.removeNonCurses(itemstack2, i, b0)); ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), this.removeNonCurses(itemstack2, i, b0)); // CraftBukkit + } else { +- this.resultSlots.setItem(0, ItemStack.EMPTY); ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit + } + ++ sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client + this.broadcastChanges(); + } + @@ -251,6 +281,7 @@ @Override diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 87b2a368f..1b64ab4e0 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -197,6 +197,7 @@ import org.bukkit.event.entity.VillagerCareerChangeEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.PrepareAnvilEvent; +import org.bukkit.event.inventory.PrepareGrindstoneEvent; import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.inventory.PrepareSmithingEvent; import org.bukkit.event.inventory.TradeSelectEvent; @@ -1473,6 +1474,13 @@ public class CraftEventFactory { return event; } + public static PrepareGrindstoneEvent callPrepareGrindstoneEvent(InventoryView view, ItemStack item) { + PrepareGrindstoneEvent event = new PrepareGrindstoneEvent(view, CraftItemStack.asCraftMirror(item).clone()); + event.getView().getPlayer().getServer().getPluginManager().callEvent(event); + event.getInventory().setItem(2, event.getResult()); + return event; + } + public static PrepareSmithingEvent callPrepareSmithingEvent(InventoryView view, ItemStack item) { PrepareSmithingEvent event = new PrepareSmithingEvent(view, CraftItemStack.asCraftMirror(item).clone()); event.getView().getPlayer().getServer().getPluginManager().callEvent(event);