--- a/net/minecraft/world/inventory/ContainerGrindstone.java +++ b/net/minecraft/world/inventory/ContainerGrindstone.java @@ -19,8 +19,30 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.phys.Vec3D; +// CraftBukkit start +import org.bukkit.Location; +import org.bukkit.craftbukkit.inventory.CraftInventoryGrindstone; +import org.bukkit.craftbukkit.inventory.CraftInventoryView; +import org.bukkit.entity.Player; +// CraftBukkit end + public class ContainerGrindstone extends Container { + // CraftBukkit start + private CraftInventoryView bukkitEntity = null; + private Player player; + + @Override + public CraftInventoryView getBukkitView() { + if (bukkitEntity != null) { + return bukkitEntity; + } + + CraftInventoryGrindstone inventory = new CraftInventoryGrindstone(this.repairSlots, this.resultSlots); + bukkitEntity = new CraftInventoryView(this.player, inventory, this); + return bukkitEntity; + } + // CraftBukkit end public static final int MAX_NAME_LENGTH = 35; public static final int INPUT_SLOT = 0; public static final int ADDITIONAL_SLOT = 1; @@ -46,6 +68,13 @@ super.setChanged(); ContainerGrindstone.this.slotsChanged(this); } + + // CraftBukkit start + @Override + public Location getLocation() { + return containeraccess.getLocation(); + } + // CraftBukkit end }; this.access = containeraccess; this.addSlot(new Slot(this.repairSlots, 0, 49, 19) { @@ -124,6 +153,7 @@ this.addSlot(new Slot(playerinventory, j, 8 + j * 18, 142)); } + player = (Player) playerinventory.player.getBukkitEntity(); // CraftBukkit } @Override @@ -145,7 +175,7 @@ boolean flag2 = !itemstack.isEmpty() && !itemstack.is(Items.ENCHANTED_BOOK) && !itemstack.isEnchanted() || !itemstack1.isEmpty() && !itemstack1.is(Items.ENCHANTED_BOOK) && !itemstack1.isEnchanted(); if (itemstack.getCount() > 1 || itemstack1.getCount() > 1 || !flag1 && flag2) { - this.resultSlots.setItem(0, ItemStack.EMPTY); + org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit this.broadcastChanges(); return; } @@ -156,7 +186,7 @@ if (flag1) { if (!itemstack.is(itemstack1.getItem())) { - this.resultSlots.setItem(0, ItemStack.EMPTY); + org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit this.broadcastChanges(); return; } @@ -170,7 +200,7 @@ itemstack2 = this.mergeEnchants(itemstack, itemstack1); if (!itemstack2.isDamageableItem()) { if (!ItemStack.matches(itemstack, itemstack1)) { - this.resultSlots.setItem(0, ItemStack.EMPTY); + org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit this.broadcastChanges(); return; } @@ -183,12 +213,12 @@ i = flag3 ? itemstack.getDamageValue() : itemstack1.getDamageValue(); itemstack2 = flag3 ? itemstack : itemstack1; } - - this.resultSlots.setItem(0, this.removeNonCurses(itemstack2, i, b0)); + org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), this.removeNonCurses(itemstack2, i, b0)); // CraftBukkit } else { - this.resultSlots.setItem(0, ItemStack.EMPTY); + org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareGrindstoneEvent(getBukkitView(), ItemStack.EMPTY); // CraftBukkit } + sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client this.broadcastChanges(); } @@ -250,6 +280,7 @@ @Override public boolean stillValid(EntityHuman entityhuman) { + if (!this.checkReachable) return true; // CraftBukkit return stillValid(this.access, entityhuman, Blocks.GRINDSTONE); }