--- a/net/minecraft/world/inventory/ContainerMerchant.java +++ b/net/minecraft/world/inventory/ContainerMerchant.java @@ -12,6 +12,8 @@ import net.minecraft.world.item.trading.MerchantRecipe; import net.minecraft.world.item.trading.MerchantRecipeList; +import org.bukkit.craftbukkit.inventory.CraftInventoryView; // CraftBukkit + public class ContainerMerchant extends Container { protected static final int PAYMENT1_SLOT = 0; @@ -31,6 +33,19 @@ private boolean showProgressBar; private boolean canRestock; + // CraftBukkit start + private CraftInventoryView bukkitEntity = null; + private PlayerInventory player; + + @Override + public CraftInventoryView getBukkitView() { + if (bukkitEntity == null) { + bukkitEntity = new CraftInventoryView(this.player.player.getBukkitEntity(), new org.bukkit.craftbukkit.inventory.CraftInventoryMerchant(trader, tradeContainer), this); + } + return bukkitEntity; + } + // CraftBukkit end + public ContainerMerchant(int i, PlayerInventory playerinventory) { this(i, playerinventory, new MerchantWrapper(playerinventory.player)); } @@ -42,6 +57,7 @@ this.a(new Slot(this.tradeContainer, 0, 136, 37)); this.a(new Slot(this.tradeContainer, 1, 162, 37)); this.a((Slot) (new SlotMerchantResult(playerinventory.player, imerchant, this.tradeContainer, 2, 220, 37))); + this.player = playerinventory; // CraftBukkit - save player int j; @@ -154,7 +170,7 @@ } private void r() { - if (!this.trader.getWorld().isClientSide) { + if (!this.trader.getWorld().isClientSide && this.trader instanceof Entity) { // CraftBukkit - SPIGOT-5035 Entity entity = (Entity) this.trader; this.trader.getWorld().a(entity.locX(), entity.locY(), entity.locZ(), this.trader.getTradeSound(), SoundCategory.NEUTRAL, 1.0F, 1.0F, false);