@Override
  protected void checkStateServer() {
    super.checkStateServer();
    if (scanning.getValue()) {
      int rf = StorageScannerConfiguration.rfPerOperation;
      rf = (int) (rf * (2.0f - getInfusedFactor()) / 2.0f);

      if (getEnergyStored(ForgeDirection.DOWN) < rf) {
        return;
      }
      consumeEnergy(rf);

      int scans = StorageScannerConfiguration.scansPerOperation;

      scans = scans * (int) (getInfusedFactor() + 1.01f);

      for (int i = 0; i < scans; i++) {
        Coordinate c = cur.getCoordinate();
        checkInventoryStatus(c.getX(), c.getY(), c.getZ());
        if (!advanceCurrent()) {
          return;
        }
      }
    }
  }
 @Override
 public void writeToNBT(NBTTagCompound tagCompound) {
   super.writeToNBT(tagCompound);
   tagCompound.setBoolean("scanning", scanning.getValue());
   c1.writeToNBT(tagCompound, "c1");
   c2.writeToNBT(tagCompound, "c2");
   cur.writeToNBT(tagCompound, "cur");
   inventories.writeToNBT(tagCompound, "inv");
 }
 @Override
 public void readFromNBT(NBTTagCompound tagCompound) {
   super.readFromNBT(tagCompound);
   scanning.setValue(tagCompound.getBoolean("scanning"));
   c1.readFromNBT(tagCompound, "c1");
   c2.readFromNBT(tagCompound, "c2");
   cur.readFromNBT(tagCompound, "cur");
   inventories.readFromNBT(tagCompound, "inv");
 }
 @Override
 public void writeRestorableToNBT(NBTTagCompound tagCompound) {
   super.writeRestorableToNBT(tagCompound);
   tagCompound.setInteger("radius", radius.getValue());
 }
 @Override
 public void readRestorableFromNBT(NBTTagCompound tagCompound) {
   super.readRestorableFromNBT(tagCompound);
   radius.setValue(tagCompound.getInteger("radius"));
 }