--- ../src-base/minecraft/net/minecraft/tileentity/TileEntityChest.java +++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityChest.java @@ -15,6 +15,12 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.AxisAlignedBB; +// CraftBukkit start +import net.minecraft.init.Blocks; +import org.bukkit.craftbukkit.entity.CraftHumanEntity; +import org.bukkit.entity.HumanEntity; +// CraftBukkit end + public class TileEntityChest extends TileEntity implements IInventory { private ItemStack[] chestContents = new ItemStack[36]; @@ -31,6 +37,36 @@ private String customName; private static final String __OBFID = "CL_00000346"; + // CraftBukkit start + public List transaction = new java.util.ArrayList(); + private int maxStack = MAX_STACK; + + public ItemStack[] getContents() + { + return this.chestContents; + } + + public void onOpen(CraftHumanEntity who) + { + transaction.add(who); + } + + public void onClose(CraftHumanEntity who) + { + transaction.remove(who); + } + + public List getViewers() + { + return transaction; + } + + public void setMaxStackSize(int size) + { + maxStack = size; + } + // CraftBukkit end + public TileEntityChest() { this.cachedChestType = -1; @@ -296,6 +332,12 @@ public void updateEntity() { super.updateEntity(); + + if (this.worldObj == null) + { + return; // CraftBukkit + } + this.checkForAdjacentChests(); ++this.ticksSinceSync; float f; @@ -410,8 +452,28 @@ this.numPlayersUsing = 0; } + int oldPower = Math.max(0, Math.min(15, this.numPlayersUsing)); // CraftBukkit - Get power before new viewer is added ++this.numPlayersUsing; + + if (this.worldObj == null) + { + return; // CraftBukkit + } + this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType(), 1, this.numPlayersUsing); + + // CraftBukkit start - Call redstone event + if (this.getBlockType() == Blocks.trapped_chest) + { + int newPower = Math.max(0, Math.min(15, this.numPlayersUsing)); + + if (oldPower != newPower) + { + org.bukkit.craftbukkit.event.CraftEventFactory.callRedstoneChange(worldObj, this.xCoord, this.yCoord, this.zCoord, oldPower, newPower); + } + } + + // CraftBukkit end this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType()); this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord - 1, this.zCoord, this.getBlockType()); } @@ -420,8 +482,28 @@ { if (this.getBlockType() instanceof BlockChest) { + int oldPower = Math.max(0, Math.min(15, this.numPlayersUsing)); // CraftBukkit - Get power before new viewer is added --this.numPlayersUsing; + + if (this.worldObj == null) + { + return; // CraftBukkit + } + this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType(), 1, this.numPlayersUsing); + + // CraftBukkit start - Call redstone event + if (this.getBlockType() == Blocks.trapped_chest) + { + int newPower = Math.max(0, Math.min(15, this.numPlayersUsing)); + + if (oldPower != newPower) + { + org.bukkit.craftbukkit.event.CraftEventFactory.callRedstoneChange(worldObj, this.xCoord, this.yCoord, this.zCoord, oldPower, newPower); + } + } + + // CraftBukkit end this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType()); this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord - 1, this.zCoord, this.getBlockType()); }