aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches-Unmapped/0661-Added-PlayerStonecutterRecipeSelectEvent.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches-Unmapped/0661-Added-PlayerStonecutterRecipeSelectEvent.patch')
-rw-r--r--Spigot-Server-Patches-Unmapped/0661-Added-PlayerStonecutterRecipeSelectEvent.patch109
1 files changed, 109 insertions, 0 deletions
diff --git a/Spigot-Server-Patches-Unmapped/0661-Added-PlayerStonecutterRecipeSelectEvent.patch b/Spigot-Server-Patches-Unmapped/0661-Added-PlayerStonecutterRecipeSelectEvent.patch
new file mode 100644
index 0000000000..6444ee5cbe
--- /dev/null
+++ b/Spigot-Server-Patches-Unmapped/0661-Added-PlayerStonecutterRecipeSelectEvent.patch
@@ -0,0 +1,109 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Fri, 27 Nov 2020 17:14:27 -0800
+Subject: [PATCH] Added PlayerStonecutterRecipeSelectEvent
+
+Co-Authored-By: MiniDigger <[email protected]>
+
+diff --git a/src/main/java/net/minecraft/world/inventory/Container.java b/src/main/java/net/minecraft/world/inventory/Container.java
+index bdd00608a72dd81003731ff5fbe774dfdc5220e5..b58ec4abff2840556eb06e08b241a2eaa85c2c7f 100644
+--- a/src/main/java/net/minecraft/world/inventory/Container.java
++++ b/src/main/java/net/minecraft/world/inventory/Container.java
+@@ -118,7 +118,7 @@ public abstract class Container {
+ return slot;
+ }
+
+- protected ContainerProperty a(ContainerProperty containerproperty) {
++ protected ContainerProperty addDataSlot(ContainerProperty containerproperty) { return a(containerproperty); } protected ContainerProperty a(ContainerProperty containerproperty) { // Paper - OBFHELPER
+ this.d.add(containerproperty);
+ return containerproperty;
+ }
+diff --git a/src/main/java/net/minecraft/world/inventory/ContainerProperty.java b/src/main/java/net/minecraft/world/inventory/ContainerProperty.java
+index 67c3b7ddb0b0f10c82577cbea7506c9d80d41368..b9c82e68a811c2ef6bf2d5ce3ae9f858bcb263d5 100644
+--- a/src/main/java/net/minecraft/world/inventory/ContainerProperty.java
++++ b/src/main/java/net/minecraft/world/inventory/ContainerProperty.java
+@@ -20,7 +20,7 @@ public abstract class ContainerProperty {
+ };
+ }
+
+- public static ContainerProperty a(final int[] aint, final int i) {
++ public static ContainerProperty shared(final int[] aint, final int i) { return a(aint, i); } public static ContainerProperty a(final int[] aint, final int i) { // Paper - OBFHELPER
+ return new ContainerProperty() {
+ @Override
+ public int get() {
+@@ -54,7 +54,7 @@ public abstract class ContainerProperty {
+
+ public abstract void set(int i);
+
+- public boolean c() {
++ public boolean checkAndClearUpdateFlag() { return c(); } public boolean c() { // Paper - OBFHELPER
+ int i = this.get();
+ boolean flag = i != this.a;
+
+diff --git a/src/main/java/net/minecraft/world/inventory/ContainerStonecutter.java b/src/main/java/net/minecraft/world/inventory/ContainerStonecutter.java
+index 1589d9ca201d386d11d9fd57fa8ba6848bae215c..dc667dd5d8514ae4c8a2087cb913f44320ebfc48 100644
+--- a/src/main/java/net/minecraft/world/inventory/ContainerStonecutter.java
++++ b/src/main/java/net/minecraft/world/inventory/ContainerStonecutter.java
+@@ -22,13 +22,14 @@ import org.bukkit.craftbukkit.inventory.CraftInventoryStonecutter;
+ import org.bukkit.craftbukkit.inventory.CraftInventoryView;
+ import org.bukkit.entity.Player;
+ // CraftBukkit end
++import io.papermc.paper.event.player.PlayerStonecutterRecipeSelectEvent; // Paper
+
+ public class ContainerStonecutter extends Container {
+
+ private final ContainerAccess containerAccess;
+ private final ContainerProperty containerProperty;
+ private final World world;
+- private List<RecipeStonecutting> i;
++ private List<RecipeStonecutting> i; public final List<RecipeStonecutting> getRecipes() { return this.i; } // Paper - OBFHELPER
+ private ItemStack j;
+ private long k;
+ final Slot c;
+@@ -58,7 +59,7 @@ public class ContainerStonecutter extends Container {
+
+ public ContainerStonecutter(int i, PlayerInventory playerinventory, final ContainerAccess containeraccess) {
+ super(Containers.STONECUTTER, i);
+- this.containerProperty = ContainerProperty.a();
++ this.containerProperty = addDataSlot(ContainerProperty.shared(new int[1], 0)); // Paper - allow replication
+ this.i = Lists.newArrayList();
+ this.j = ItemStack.b;
+ this.l = () -> {
+@@ -136,13 +137,36 @@ public class ContainerStonecutter extends Container {
+ @Override
+ public boolean a(EntityHuman entityhuman, int i) {
+ if (this.d(i)) {
+- this.containerProperty.set(i);
++ // Paper start
++ int recipeIndex = i;
++ this.containerProperty.set(recipeIndex);
++ this.containerProperty.checkAndClearUpdateFlag(); // mark as changed
++ if (this.isValidRecipeIndex(i)) {
++ PlayerStonecutterRecipeSelectEvent event = new PlayerStonecutterRecipeSelectEvent((Player) entityhuman.getBukkitEntity(), (org.bukkit.inventory.StonecutterInventory) getBukkitView().getTopInventory(), (org.bukkit.inventory.StonecuttingRecipe) this.getRecipes().get(i).toBukkitRecipe());
++ if (!event.callEvent()) {
++ ((Player) entityhuman.getBukkitEntity()).updateInventory();
++ return false;
++ }
++ int newRecipeIndex;
++ if (!this.getRecipes().get(recipeIndex).getKey().equals(org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(event.getStonecuttingRecipe().getKey()))) { // If the recipe did NOT stay the same
++ for (newRecipeIndex = 0; newRecipeIndex < this.getRecipes().size(); newRecipeIndex++) {
++ if (this.getRecipes().get(newRecipeIndex).getKey().equals(org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(event.getStonecuttingRecipe().getKey()))) {
++ recipeIndex = newRecipeIndex;
++ break;
++ }
++ }
++ }
++ }
++ ((Player) entityhuman.getBukkitEntity()).updateInventory();
++ this.containerProperty.set(recipeIndex); // set new index, so that listeners can read it
++ // Paper end
+ this.i();
+ }
+
+ return true;
+ }
+
++ private boolean isValidRecipeIndex(int index) { return this.d(index); } // Paper - OBFHELPER
+ private boolean d(int i) {
+ return i >= 0 && i < this.i.size();
+ }