diff --git a/nms-patches/ContainerAnvil.patch b/nms-patches/ContainerAnvil.patch index 12c342d825..c5787ca814 100644 --- a/nms-patches/ContainerAnvil.patch +++ b/nms-patches/ContainerAnvil.patch @@ -11,11 +11,12 @@ public class ContainerAnvil extends Container { private static final Logger f = LogManager.getLogger(); -@@ -22,8 +26,14 @@ +@@ -22,8 +26,15 @@ private int k; public String renameText; private final EntityHuman m; + // CraftBukkit start ++ public int maximumRepairCost = 40; + private int lastLevelCost; + private CraftInventoryView bukkitEntity; + private PlayerInventory player; @@ -26,7 +27,7 @@ this.j = blockposition; this.i = world; this.m = entityhuman; -@@ -111,7 +121,7 @@ +@@ -111,7 +122,7 @@ byte b1 = 0; if (itemstack.isEmpty()) { @@ -35,7 +36,7 @@ this.levelCost = 0; } else { ItemStack itemstack1 = itemstack.cloneItemStack(); -@@ -129,7 +139,7 @@ +@@ -129,7 +140,7 @@ if (itemstack1.e() && itemstack1.getItem().a(itemstack, itemstack2)) { k = Math.min(itemstack1.getDamage(), itemstack1.h() / 4); if (k <= 0) { @@ -44,7 +45,7 @@ this.levelCost = 0; return; } -@@ -144,7 +154,7 @@ +@@ -144,7 +155,7 @@ this.k = l; } else { if (!flag && (itemstack1.getItem() != itemstack2.getItem() || !itemstack1.e())) { @@ -53,7 +54,7 @@ this.levelCost = 0; return; } -@@ -237,7 +247,7 @@ +@@ -237,7 +248,7 @@ } if (flag2 && !flag1) { @@ -62,7 +63,22 @@ this.levelCost = 0; return; } -@@ -284,7 +294,7 @@ +@@ -261,11 +272,11 @@ + itemstack1 = ItemStack.a; + } + +- if (b1 == i && b1 > 0 && this.levelCost >= 40) { +- this.levelCost = 39; ++ if (b1 == i && b1 > 0 && this.levelCost >= maximumRepairCost) { // CraftBukkit ++ this.levelCost = maximumRepairCost - 1; // CraftBukkit + } + +- if (this.levelCost >= 40 && !this.m.abilities.canInstantlyBuild) { ++ if (this.levelCost >= maximumRepairCost && !this.m.abilities.canInstantlyBuild) { // CraftBukkit + itemstack1 = ItemStack.a; + } + +@@ -284,7 +295,7 @@ EnchantmentManager.a(map, itemstack1); } @@ -71,7 +87,7 @@ this.b(); } } -@@ -302,6 +312,7 @@ +@@ -302,6 +313,7 @@ } public boolean canUse(EntityHuman entityhuman) { @@ -79,7 +95,7 @@ return !this.i.getType(this.j).a(TagsBlock.ANVIL) ? false : entityhuman.d((double) this.j.getX() + 0.5D, (double) this.j.getY() + 0.5D, (double) this.j.getZ() + 0.5D) <= 64.0D; } -@@ -357,4 +368,33 @@ +@@ -357,4 +369,33 @@ this.d(); } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java index f9bbd71125..ca19600da5 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java @@ -1,5 +1,6 @@ package org.bukkit.craftbukkit.inventory; +import com.google.common.base.Preconditions; import net.minecraft.server.ContainerAnvil; import net.minecraft.server.IInventory; import org.bukkit.Location; @@ -71,4 +72,15 @@ public class CraftInventoryAnvil extends CraftInventory implements AnvilInventor public void setRepairCost(int i) { container.levelCost = i; } + + @Override + public int getMaximumRepairCost() { + return container.maximumRepairCost; + } + + @Override + public void setMaximumRepairCost(int levels) { + Preconditions.checkArgument(levels >= 0, "Maximum repair cost must be positive (or 0)"); + container.maximumRepairCost = levels; + } }