@Override
 public void addToWorld() {
   super.addToWorld();
   this.outerProxy.onReady();
   this.hasRedstone = this.getHost().hasRedstone(this.side);
   this.updateInternalState();
 }
 @Override
 public void setColors(boolean hasChan, boolean hasPower) {
   this.hasRedstone = (this.clientFlags & REDSTONE_FLAG) == REDSTONE_FLAG;
   super.setColors(hasChan && this.hasRedstone, hasPower && this.hasRedstone);
 }
 @Override
 public void onPlacement(EntityPlayer player, ItemStack held, ForgeDirection side) {
   super.onPlacement(player, held, side);
   this.outerProxy.setOwner(player);
 }
 @Override
 public void setPartHostInfo(ForgeDirection side, IPartHost host, TileEntity tile) {
   super.setPartHostInfo(side, host, tile);
   this.outerProxy.setValidSides(EnumSet.of(side));
 }
 @Override
 public void removeFromWorld() {
   super.removeFromWorld();
   this.outerProxy.invalidate();
 }
 @Override
 public void writeToNBT(NBTTagCompound extra) {
   super.writeToNBT(extra);
   this.outerProxy.writeToNBT(extra);
 }
 @Override
 public void readFromNBT(NBTTagCompound extra) {
   super.readFromNBT(extra);
   this.outerProxy.readFromNBT(extra);
 }
 @Override
 public void addToWorld() {
   super.addToWorld();
   this.duality.initialize();
 }
 @Override
 public void writeToNBT(NBTTagCompound data) {
   super.writeToNBT(data);
   this.duality.writeToNBT(data);
 }
 @Override
 public void readFromNBT(NBTTagCompound data) {
   super.readFromNBT(data);
   this.duality.readFromNBT(data);
 }