From 9340d95f927afb3ea73ae2eb30c4b2c1dc627b2f Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot Date: Sat, 9 Apr 2022 09:42:11 +1000 Subject: [PATCH] SPIGOT-6990: Fix setRepairCost(0) in Anvil By: Doc --- .../world/inventory/ContainerAnvil.patch | 51 ++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/paper-server/nms-patches/net/minecraft/world/inventory/ContainerAnvil.patch b/paper-server/nms-patches/net/minecraft/world/inventory/ContainerAnvil.patch index 78af7889ed..f241588f88 100644 --- a/paper-server/nms-patches/net/minecraft/world/inventory/ContainerAnvil.patch +++ b/paper-server/nms-patches/net/minecraft/world/inventory/ContainerAnvil.patch @@ -18,54 +18,81 @@ public String itemName; public final ContainerProperty cost; private static final int COST_FAIL = 0; -@@ -32,6 +36,10 @@ +@@ -32,6 +36,11 @@ private static final int COST_REPAIR_SACRIFICE = 2; private static final int COST_INCOMPATIBLE_PENALTY = 1; private static final int COST_RENAME = 1; + // CraftBukkit start ++ public static final int DEFAULT_DENIED_COST = -1; + public int maximumRepairCost = 40; + private CraftInventoryView bukkitEntity; + // CraftBukkit end public ContainerAnvil(int i, PlayerInventory playerinventory) { this(i, playerinventory, ContainerAccess.NULL); -@@ -104,7 +112,7 @@ +@@ -50,7 +59,7 @@ + + @Override + protected boolean mayPickup(EntityHuman entityhuman, boolean flag) { +- return (entityhuman.getAbilities().instabuild || entityhuman.experienceLevel >= this.cost.get()) && this.cost.get() > 0; ++ return (entityhuman.getAbilities().instabuild || entityhuman.experienceLevel >= this.cost.get()) && this.cost.get() > ContainerAnvil.DEFAULT_DENIED_COST && flag; // CraftBukkit - allow cost 0 like a free item + } + + @Override +@@ -73,7 +82,7 @@ + this.inputSlots.setItem(1, ItemStack.EMPTY); + } + +- this.cost.set(0); ++ this.cost.set(DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item + this.access.execute((world, blockposition) -> { + IBlockData iblockdata = world.getBlockState(blockposition); + +@@ -104,8 +113,8 @@ byte b1 = 0; if (itemstack.isEmpty()) { - this.resultSlots.setItem(0, ItemStack.EMPTY); +- this.cost.set(0); + org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit - this.cost.set(0); ++ this.cost.set(DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item } else { ItemStack itemstack1 = itemstack.copy(); -@@ -122,7 +130,7 @@ + ItemStack itemstack2 = this.inputSlots.getItem(1); +@@ -122,8 +131,8 @@ if (itemstack1.isDamageableItem() && itemstack1.getItem().isValidRepairItem(itemstack, itemstack2)) { k = Math.min(itemstack1.getDamageValue(), itemstack1.getMaxDamage() / 4); if (k <= 0) { - this.resultSlots.setItem(0, ItemStack.EMPTY); +- this.cost.set(0); + org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit - this.cost.set(0); ++ this.cost.set(DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item return; } -@@ -137,7 +145,7 @@ + +@@ -137,8 +146,8 @@ this.repairItemCountCost = i1; } else { if (!flag && (!itemstack1.is(itemstack2.getItem()) || !itemstack1.isDamageableItem())) { - this.resultSlots.setItem(0, ItemStack.EMPTY); +- this.cost.set(0); + org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit - this.cost.set(0); ++ this.cost.set(DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item return; } -@@ -227,7 +235,7 @@ + +@@ -227,8 +236,8 @@ } if (flag2 && !flag1) { - this.resultSlots.setItem(0, ItemStack.EMPTY); +- this.cost.set(0); + org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit - this.cost.set(0); ++ this.cost.set(DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item return; } -@@ -251,11 +259,11 @@ + } +@@ -251,11 +260,11 @@ itemstack1 = ItemStack.EMPTY; } @@ -80,7 +107,7 @@ itemstack1 = ItemStack.EMPTY; } -@@ -274,7 +282,8 @@ +@@ -274,7 +283,8 @@ EnchantmentManager.setEnchantments(map, itemstack1); } @@ -90,7 +117,7 @@ this.broadcastChanges(); } } -@@ -301,4 +310,18 @@ +@@ -301,4 +311,18 @@ public int getCost() { return this.cost.get(); }