public void setColor(int color) {
   if (this.id > 0) {
     myChest = BoundChestWorldData.get(this.worldObj, "id" + this.id, 0);
   }
   if (myChest != null) {
     myChest.setSealColor(color);
   }
 }
 @Override
 public void markDirty() {
   if (myChest != null) {
     myChest.updateChestContents(this.chestContents);
   }
   this.accessTicks = 80;
   this.updateAccessTicks();
   super.markDirty();
 }
  /**
   * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses
   * this to count ticks and creates a new spawn inside its implementation.
   */
  public void updateEntity() {
    super.updateEntity();
    ++this.ticksSinceSync;
    if (this.accessTicks > 0 && !this.worldObj.isRemote) {
      --this.accessTicks;
      this.updateAccessTicks();
    }
    float f;
    if (this.id > 0) {
      myChest = BoundChestWorldData.get(this.worldObj, "id" + this.id, 0);
    }
    if (myChest != null) {
      if (this.chestContents != myChest.getChestContents()) {
        this.accessTicks = 80;
        this.updateAccessTicks();
      }
      this.chestContents = myChest.getChestContents();
    }
    if (!this.worldObj.isRemote
        && this.numUsingPlayers != 0
        && (this.ticksSinceSync + this.xCoord + this.yCoord + this.zCoord) % 200 == 0) {
      this.numUsingPlayers = 0;
      f = 5.0F;
      List list =
          this.worldObj.getEntitiesWithinAABB(
              EntityPlayer.class,
              AxisAlignedBB.getAABBPool()
                  .getAABB(
                      (double) ((float) this.xCoord - f),
                      (double) ((float) this.yCoord - f),
                      (double) ((float) this.zCoord - f),
                      (double) ((float) (this.xCoord + 1) + f),
                      (double) ((float) (this.yCoord + 1) + f),
                      (double) ((float) (this.zCoord + 1) + f)));
      Iterator iterator = list.iterator();

      while (iterator.hasNext()) {
        EntityPlayer entityplayer = (EntityPlayer) iterator.next();

        if (entityplayer.openContainer instanceof ContainerChest) {
          IInventory iinventory =
              ((ContainerChest) entityplayer.openContainer).getLowerChestInventory();

          if (iinventory == this
              || iinventory instanceof InventoryLargeChest
                  && ((InventoryLargeChest) iinventory).isPartOfLargeChest(this)) {
            ++this.numUsingPlayers;
          }
        }
      }
    }

    this.prevLidAngle = this.lidAngle;
    f = 0.1F;
    double d0;

    if (this.numUsingPlayers > 0 && this.lidAngle == 0.0F) {
      double d1 = (double) this.xCoord + 0.5D;
      d0 = (double) this.zCoord + 0.5D;

      this.worldObj.playSoundEffect(
          d1,
          (double) this.yCoord + 0.5D,
          d0,
          "random.chestopen",
          0.5F,
          this.worldObj.rand.nextFloat() * 0.1F + 0.9F);
    }

    if (this.numUsingPlayers == 0 && this.lidAngle > 0.0F
        || this.numUsingPlayers > 0 && this.lidAngle < 1.0F) {
      float f1 = this.lidAngle;

      if (this.numUsingPlayers > 0) {
        this.lidAngle += f;
      } else {
        this.lidAngle -= f;
      }

      if (this.lidAngle > 1.0F) {
        this.lidAngle = 1.0F;
      }

      float f2 = 0.5F;

      if (this.lidAngle < f2 && f1 >= f2) {
        d0 = (double) this.xCoord + 0.5D;
        double d2 = (double) this.zCoord + 0.5D;

        this.worldObj.playSoundEffect(
            d0,
            (double) this.yCoord + 0.5D,
            d2,
            "random.chestclosed",
            0.5F,
            this.worldObj.rand.nextFloat() * 0.1F + 0.9F);
      }

      if (this.lidAngle < 0.0F) {
        this.lidAngle = 0.0F;
      }
    }
  }