aboutsummaryrefslogtreecommitdiffhomepage
path: root/patch-remap/og/net/minecraft/world/inventory/ContainerAnvil.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patch-remap/og/net/minecraft/world/inventory/ContainerAnvil.patch')
-rw-r--r--patch-remap/og/net/minecraft/world/inventory/ContainerAnvil.patch131
1 files changed, 131 insertions, 0 deletions
diff --git a/patch-remap/og/net/minecraft/world/inventory/ContainerAnvil.patch b/patch-remap/og/net/minecraft/world/inventory/ContainerAnvil.patch
new file mode 100644
index 0000000000..6565787448
--- /dev/null
+++ b/patch-remap/og/net/minecraft/world/inventory/ContainerAnvil.patch
@@ -0,0 +1,131 @@
+--- a/net/minecraft/world/inventory/ContainerAnvil.java
++++ b/net/minecraft/world/inventory/ContainerAnvil.java
+@@ -19,6 +19,10 @@
+ import net.minecraft.world.level.block.state.IBlockData;
+ import org.slf4j.Logger;
+
++// CraftBukkit start
++import org.bukkit.craftbukkit.inventory.CraftInventoryView;
++// CraftBukkit end
++
+ public class ContainerAnvil extends ContainerAnvilAbstract {
+
+ public static final int INPUT_SLOT = 0;
+@@ -42,6 +46,11 @@
+ private static final int ADDITIONAL_SLOT_X_PLACEMENT = 76;
+ private static final int RESULT_SLOT_X_PLACEMENT = 134;
+ private static final int SLOT_Y_PLACEMENT = 47;
++ // 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);
+@@ -69,7 +78,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
+@@ -92,7 +101,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);
+
+@@ -123,8 +132,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(DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item
+ } else {
+ ItemStack itemstack1 = itemstack.copy();
+ ItemStack itemstack2 = this.inputSlots.getItem(1);
+@@ -141,8 +150,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(DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item
+ return;
+ }
+
+@@ -156,8 +165,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(DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item
+ return;
+ }
+
+@@ -246,8 +255,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(DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item
+ return;
+ }
+ }
+@@ -270,11 +279,11 @@
+ itemstack1 = ItemStack.EMPTY;
+ }
+
+- if (b1 == i && b1 > 0 && this.cost.get() >= 40) {
+- this.cost.set(39);
++ if (b1 == i && b1 > 0 && this.cost.get() >= maximumRepairCost) { // CraftBukkit
++ this.cost.set(maximumRepairCost - 1); // CraftBukkit
+ }
+
+- if (this.cost.get() >= 40 && !this.player.getAbilities().instabuild) {
++ if (this.cost.get() >= maximumRepairCost && !this.player.getAbilities().instabuild) { // CraftBukkit
+ itemstack1 = ItemStack.EMPTY;
+ }
+
+@@ -293,7 +302,8 @@
+ EnchantmentManager.setEnchantments(map, itemstack1);
+ }
+
+- this.resultSlots.setItem(0, itemstack1);
++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(getBukkitView(), itemstack1); // CraftBukkit
++ sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client
+ this.broadcastChanges();
+ }
+ }
+@@ -334,4 +344,18 @@
+ public int getCost() {
+ return this.cost.get();
+ }
++
++ // CraftBukkit start
++ @Override
++ public CraftInventoryView getBukkitView() {
++ if (bukkitEntity != null) {
++ return bukkitEntity;
++ }
++
++ org.bukkit.craftbukkit.inventory.CraftInventory inventory = new org.bukkit.craftbukkit.inventory.CraftInventoryAnvil(
++ access.getLocation(), this.inputSlots, this.resultSlots, this);
++ bukkitEntity = new CraftInventoryView(this.player.getBukkitEntity(), inventory, this);
++ return bukkitEntity;
++ }
++ // CraftBukkit end
+ }