From 1c1f0b224feca9ed43f025b3af8dc5f46ccf3c7f Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 16 Feb 2013 22:02:25 -0500 Subject: [PATCH] Fix chests stuck open bug? Also, should reduce network chatter of chests a significant amount. --- .../mods/ironchest/TileEntityIronChest.java | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java index b769bb8..bdfe86e 100644 --- a/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java +++ b/IronChests2/common/cpw/mods/ironchest/TileEntityIronChest.java @@ -12,14 +12,19 @@ package cpw.mods.ironchest; import java.util.Arrays; import java.util.Comparator; +import java.util.Iterator; +import java.util.List; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ContainerChest; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryLargeChest; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.packet.Packet; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; public class TileEntityIronChest extends TileEntity implements IInventory { private int ticksSinceSync; @@ -267,15 +272,35 @@ public class TileEntityIronChest extends TileEntity implements IInventory { { super.updateEntity(); // Resynchronize clients with the server state - if ((++ticksSinceSync % 20) * 4 == 0) + if (worldObj != null && !this.worldObj.isRemote && this.numUsingPlayers != 0 && (this.ticksSinceSync + this.xCoord + this.yCoord + this.zCoord) % 200 == 0) { - worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock.blockID, 3, ((numUsingPlayers << 3) & 0xF8) | (facing & 0x7)); - if (inventoryTouched) + this.numUsingPlayers = 0; + float var1 = 5.0F; + List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); + Iterator var3 = var2.iterator(); + + while (var3.hasNext()) { - inventoryTouched = false; - sortTopStacks(); + EntityPlayer var4 = (EntityPlayer)var3.next(); + + if (var4.openContainer instanceof ContainerIronChestBase) + { + ++this.numUsingPlayers; + } } } + + if (worldObj != null && !worldObj.isRemote && ticksSinceSync < 0) + { + worldObj.addBlockEvent(xCoord, yCoord, zCoord, IronChest.ironChestBlock.blockID, 3, ((numUsingPlayers << 3) & 0xF8) | (facing & 0x7)); + } + if (!worldObj.isRemote && inventoryTouched) + { + inventoryTouched = false; + sortTopStacks(); + } + + this.ticksSinceSync++; prevLidAngle = lidAngle; float f = 0.1F; if (numUsingPlayers > 0 && lidAngle == 0.0F) @@ -369,6 +394,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { block.dropContent(newSize, this, this.worldObj, this.xCoord, this.yCoord, this.zCoord); newEntity.setFacing(facing); newEntity.sortTopStacks(); + newEntity.ticksSinceSync = -1; return newEntity; }