@Override
  public void writeToNBT(NBTTagCompound tag) {
    super.writeToNBT(tag);

    if (color != null) tag.setInteger("Color", color);
    tag.setBoolean("IsInverted", isInverted);
    tag.setByte("Type", (byte) collisionData.getType().ordinal());
    collisionData.writeToNBT(tag);
  }
 @Override
 public void readFromNBT(NBTTagCompound tag) {
   super.readFromNBT(tag);
   color = tag.hasKey("Color") ? tag.getInteger("Color") : null;
   isInverted = tag.getBoolean("IsInverted");
   CollisionType type = CollisionType.VALUES[tag.getByte("Type")];
   collisionData = type.createData();
   collisionData.readFromNBT(tag);
 }
 public AxisAlignedBB getBlockBounds() {
   return collisionData.getBlockBounds();
 }
 public AxisAlignedBB getSelectionBox() {
   return collisionData.getBlockBounds().offset(xCoord, yCoord, zCoord);
 }
 public void addCollisions(AxisAlignedBB region, List<AxisAlignedBB> result) {
   collisionData.addCollisions(xCoord, yCoord, zCoord, region, result);
 }