@Override
 public void writeToNBT(NBTTagCompound nbt) {
   super.writeToNBT(nbt);
   EjectSetting.writeToNBT(nbt, setting);
   RedstoneMode.writeToNBT(nbt, mode);
   nbt.setInteger("Purity", purity);
   nbt.setInteger("Heat", heat);
   nbt.setInteger("Storage", storage);
   nbt.setInteger("Speed", speed);
   nbt.setInteger("RF", rf);
   nbt.setBoolean("CanWork", canWork);
   nbt.setInteger("Processed", processed);
 }
 @Override
 public void readFromNBT(NBTTagCompound nbt) {
   super.readFromNBT(nbt);
   setting = EjectSetting.readFromNBT(nbt);
   mode = RedstoneMode.readFromNBT(nbt);
   purity = nbt.getInteger("Purity");
   heat = nbt.getInteger("Heat");
   storage = nbt.getInteger("Storage");
   speed = nbt.getInteger("Speed");
   rf = nbt.getInteger("RF");
   canWork = nbt.getBoolean("CanWork");
   processed = nbt.getInteger("Processed");
 }
  public void updateEntity() {
    super.updateEntity();

    if (helper == null) helper = new BlockTransferHelper(this);

    machineTick++;
    if (onTick(20)) {
      FluidHelper.process(this, 3, 4);
      updateUpgrades();
    }

    if (onTick(20)) {
      canWork = canWork();
    }

    updateMachine();
  }