mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 15:49:00 +01:00
f44d237de9
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: 5be41fb8 SPIGOT-6720: Fix bed explosion checks 09b99daf SPIGOT-6722: Close entity manager when unloading world 3a9561bf SPIGOT-6686: Changes in MaximumRepairCost for Anvil Rename cause inconsistency
152 lines
8.6 KiB
Diff
152 lines
8.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
Date: Fri, 3 Jul 2020 11:58:56 -0500
|
|
Subject: [PATCH] Add PrepareResultEvent
|
|
|
|
Adds a new event for all crafting stations that generate a result slot item
|
|
|
|
Anvil, Grindstone and Smithing now extend this event
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
|
index 2ed4930648411ccd52fc970b069e57eba9bceef8..593e23c10f2b1616db7256158dfe564b2d289df1 100644
|
|
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
|
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
|
|
@@ -317,6 +317,7 @@ public class AnvilMenu extends ItemCombinerMenu {
|
|
}
|
|
|
|
this.createResult();
|
|
+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper
|
|
}
|
|
|
|
public int getCost() {
|
|
diff --git a/src/main/java/net/minecraft/world/inventory/CartographyTableMenu.java b/src/main/java/net/minecraft/world/inventory/CartographyTableMenu.java
|
|
index 93ebd73b94efac5f671b0459e0075959f5ce8bdf..aaf67ac2a73fa3b4420ec99ee185bceda2cb4c2b 100644
|
|
--- a/src/main/java/net/minecraft/world/inventory/CartographyTableMenu.java
|
|
+++ b/src/main/java/net/minecraft/world/inventory/CartographyTableMenu.java
|
|
@@ -150,6 +150,7 @@ public class CartographyTableMenu extends AbstractContainerMenu {
|
|
this.setupResultSlot(itemstack, itemstack1, itemstack2);
|
|
}
|
|
|
|
+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper
|
|
}
|
|
|
|
private void setupResultSlot(ItemStack map, ItemStack item, ItemStack oldResult) {
|
|
diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
|
|
index b268645827b7a57b906fd925d694f802a75da25d..dda6c4948b903221fa8020c76d109216d2dd82bf 100644
|
|
--- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
|
|
+++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java
|
|
@@ -160,6 +160,7 @@ public class GrindstoneMenu extends AbstractContainerMenu {
|
|
super.slotsChanged(inventory);
|
|
if (inventory == this.repairSlots) {
|
|
this.createResult();
|
|
+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper
|
|
}
|
|
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java
|
|
index 8819347987a8072eede52a57fec763711d9bab92..9cc246f43230e87c6bd2377ef77ab2dcb9509a5c 100644
|
|
--- a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java
|
|
+++ b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java
|
|
@@ -78,6 +78,7 @@ public abstract class ItemCombinerMenu extends AbstractContainerMenu {
|
|
super.slotsChanged(inventory);
|
|
if (inventory == this.inputSlots) {
|
|
this.createResult();
|
|
+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper
|
|
}
|
|
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/inventory/LoomMenu.java b/src/main/java/net/minecraft/world/inventory/LoomMenu.java
|
|
index b490e87d95c3a140323aa9da95b90381392f64f8..9bcab01324612a905b21623a09109d404f8dadf7 100644
|
|
--- a/src/main/java/net/minecraft/world/inventory/LoomMenu.java
|
|
+++ b/src/main/java/net/minecraft/world/inventory/LoomMenu.java
|
|
@@ -196,7 +196,8 @@ public class LoomMenu extends AbstractContainerMenu {
|
|
}
|
|
|
|
this.setupResultSlot();
|
|
- this.broadcastChanges();
|
|
+ //this.c(); // Paper - done below
|
|
+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 3); // Paper
|
|
}
|
|
|
|
public void registerUpdateListener(Runnable inventoryChangeListener) {
|
|
diff --git a/src/main/java/net/minecraft/world/inventory/SmithingMenu.java b/src/main/java/net/minecraft/world/inventory/SmithingMenu.java
|
|
index 92dd2ea23185bba311e184b2ac9744a423c102ea..cb3f522a586b841056c35378a49dd50bfa673f61 100644
|
|
--- a/src/main/java/net/minecraft/world/inventory/SmithingMenu.java
|
|
+++ b/src/main/java/net/minecraft/world/inventory/SmithingMenu.java
|
|
@@ -76,6 +76,7 @@ public class SmithingMenu extends ItemCombinerMenu {
|
|
// CraftBukkit end
|
|
}
|
|
|
|
+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/net/minecraft/world/inventory/StonecutterMenu.java b/src/main/java/net/minecraft/world/inventory/StonecutterMenu.java
|
|
index 3df5031ec2c50dc6eb2533318cf8a98f21b03d2a..c971a534ded962e3be92c71059c75cc1d54970b5 100644
|
|
--- a/src/main/java/net/minecraft/world/inventory/StonecutterMenu.java
|
|
+++ b/src/main/java/net/minecraft/world/inventory/StonecutterMenu.java
|
|
@@ -176,6 +176,7 @@ public class StonecutterMenu extends AbstractContainerMenu {
|
|
this.setupRecipeList(inventory, itemstack);
|
|
}
|
|
|
|
+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 1); // Paper
|
|
}
|
|
|
|
private void setupRecipeList(Container input, ItemStack stack) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index d5588bca58d999b7242041127fac3809aa9e2ddd..c96953ab3f358c7c67297532cd6740ff3ff61aa3 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -1551,19 +1551,44 @@ public class CraftEventFactory {
|
|
return event;
|
|
}
|
|
|
|
- public static PrepareAnvilEvent callPrepareAnvilEvent(InventoryView view, ItemStack item) {
|
|
- PrepareAnvilEvent event = new PrepareAnvilEvent(view, CraftItemStack.asCraftMirror(item).clone());
|
|
- event.getView().getPlayer().getServer().getPluginManager().callEvent(event);
|
|
+ // Paper start - disable this method, handled below
|
|
+ public static void callPrepareAnvilEvent(InventoryView view, ItemStack item) { // Paper - verify nothing uses return - handled below in PrepareResult
|
|
+ PrepareAnvilEvent event = new PrepareAnvilEvent(view, CraftItemStack.asCraftMirror(item)); // Paper - remove clone
|
|
+ //event.getView().getPlayer().getServer().getPluginManager().callEvent(event); // disable event
|
|
event.getInventory().setItem(2, event.getResult());
|
|
- return event;
|
|
+ //return event; // Paper
|
|
}
|
|
+ // Paper end
|
|
|
|
- public static PrepareSmithingEvent callPrepareSmithingEvent(InventoryView view, ItemStack item) {
|
|
- PrepareSmithingEvent event = new PrepareSmithingEvent(view, CraftItemStack.asCraftMirror(item).clone());
|
|
- event.getView().getPlayer().getServer().getPluginManager().callEvent(event);
|
|
+ // Paper start - disable this method, handled in callPrepareResultEvent
|
|
+ public static void callPrepareSmithingEvent(InventoryView view, ItemStack item) { // Paper - verify nothing uses return - handled below in PrepareResult
|
|
+ PrepareSmithingEvent event = new PrepareSmithingEvent(view, CraftItemStack.asCraftMirror(item)); // Paper - remove clone
|
|
+ //event.getView().getPlayer().getServer().getPluginManager().callEvent(event); // Paper - disable event
|
|
event.getInventory().setItem(2, event.getResult());
|
|
- return event;
|
|
+ //return event; // Paper
|
|
}
|
|
+ // Paper end
|
|
+
|
|
+ // Paper start - support specific overrides for prepare result
|
|
+ public static void callPrepareResultEvent(AbstractContainerMenu container, int resultSlot) {
|
|
+ com.destroystokyo.paper.event.inventory.PrepareResultEvent event;
|
|
+ InventoryView view = container.getBukkitView();
|
|
+ org.bukkit.inventory.ItemStack origItem = view.getTopInventory().getItem(resultSlot);
|
|
+ CraftItemStack result = origItem != null ? CraftItemStack.asCraftCopy(origItem) : null;
|
|
+ if (view.getTopInventory() instanceof org.bukkit.inventory.AnvilInventory) {
|
|
+ event = new PrepareAnvilEvent(view, result);
|
|
+ } else if (view.getTopInventory() instanceof org.bukkit.inventory.GrindstoneInventory) {
|
|
+ event = new com.destroystokyo.paper.event.inventory.PrepareGrindstoneEvent(view, result);
|
|
+ } else if (view.getTopInventory() instanceof org.bukkit.inventory.SmithingInventory) {
|
|
+ event = new PrepareSmithingEvent(view, result);
|
|
+ } else {
|
|
+ event = new com.destroystokyo.paper.event.inventory.PrepareResultEvent(view, result);
|
|
+ }
|
|
+ event.callEvent();
|
|
+ event.getInventory().setItem(resultSlot, event.getResult());
|
|
+ container.broadcastChanges();;
|
|
+ }
|
|
+ // Paper end
|
|
|
|
/**
|
|
* Mob spawner event.
|