@Override
  public void updateEntity() {

    if (parts.size() == 0 && !worldObj.isRemote) {
      worldObj.setBlock(xCoord, yCoord, zCoord, Blocks.air);
      worldObj.setTileEntity(xCoord, yCoord, zCoord, null);
      return;
    }

    List<BPPart> removed = new ArrayList<BPPart>();
    for (BPPart p : parts) {
      p.setWorld(worldObj);
      p.setX(xCoord);
      p.setY(yCoord);
      p.setZ(zCoord);
      if (p instanceof BPPartFace) if (!((BPPartFace) p).canStay()) removed.add(p);
    }
    for (BPPart p : removed) removePart(p);
    removed.clear();

    for (BPPart p : parts) p.update();

    if (ticks == 5 || ticks % 200 == 0) {
      shouldReRender = true;
    }
    ticks++;
  }