@Override
  protected boolean activateMachine() {
    if (_tank.getLiquid() != null && _tank.getLiquid().amount >= 20) {
      setWorkDone(getWorkDone() + 1);

      if (getWorkDone() >= getWorkMax()) {
        doDrop(new ItemStack(MineFactoryReloadedCore.fertilizerItem));
        setWorkDone(0);
      }
      _tank.drain(20, true);
      return true;
    }
    return false;
  }
  @Override
  public void updateEntity() {
    super.updateEntity();

    if (!worldObj.isRemote) {
      for (int i = 0; i < 9; i++) {
        if (_inventory[i] != null
            && MFRRegistry.getPlantables().containsKey(_inventory[i].itemID)) {
          int targetSlot = findMatchingSlot(_inventory[i]);
          if (targetSlot < 0) {
            continue;
          }

          if (_inventory[targetSlot] == null) {
            _inventory[targetSlot] = _inventory[i];
            _inventory[i] = null;
          } else {
            UtilInventory.mergeStacks(_inventory[targetSlot], _inventory[i]);
            if (_inventory[i].stackSize <= 0) {
              _inventory[i] = null;
            }
          }
        }
      }

      if (Util.isRedstonePowered(this)) {
        return;
      }

      int newBurn = getOutputValue();
      if (_burnTimeMax - _burnTime >= newBurn) {
        _burnTime += newBurn;
        for (int i = 9; i < 18; i++) {
          if (_inventory[i] != null) {
            decrStackSize(i, 1);
          }
        }
      }

      if (_burnTime > 0
          && (_tank.getLiquid() == null
              || _tank.getLiquid().amount <= _tank.getCapacity() - _bioFuelPerTick)) {
        _burnTime -= _burnTimeDecreasePerTick;
        _tank.fill(LiquidDictionary.getLiquid("biofuel", _bioFuelPerTick), true);
      }
    }
  }
 @Override
 public int fill(ForgeDirection from, LiquidStack resource, boolean doFill) {
   if (resource == null
       || (resource.itemID != LiquidDictionary.getCanonicalLiquid("sewage").itemID)) {
     return 0;
   } else {
     return _tank.fill(resource, doFill);
   }
 }
  @Override
  public boolean activateMachine() {
    _grindingWorld.cleanReferences();
    List<?> entities =
        worldObj.getEntitiesWithinAABB(
            EntityLiving.class, _areaManager.getHarvestArea().toAxisAlignedBB());

    entityList:
    for (Object o : entities) {
      EntityLiving e = (EntityLiving) o;
      if (e instanceof EntityAgeable && ((EntityAgeable) e).getGrowingAge() < 0
          || e.isEntityInvulnerable()
          || e.getHealth() <= 0) {
        continue;
      }
      boolean processMob = false;
      processEntity:
      {
        if (MFRRegistry.getGrindables27().containsKey(e.getClass())) {
          IFactoryGrindable2 r = MFRRegistry.getGrindables27().get(e.getClass());
          List<MobDrop> drops = r.grind(e.worldObj, e, getRandom());
          if (drops != null && drops.size() > 0 && WeightedRandom.getTotalWeight(drops) > 0) {
            ItemStack drop = ((MobDrop) WeightedRandom.getRandomItem(_rand, drops)).getStack();
            doDrop(drop);
          }
          if (r instanceof IFactoryGrindable2) {
            if (((IFactoryGrindable2) r).processEntity(e)) {
              processMob = true;
              if (e.getHealth() <= 0) {
                continue entityList;
              }
              break processEntity;
            }
          } else {
            processMob = true;
            break processEntity;
          }
        }
        for (Class<?> t : MFRRegistry.getGrinderBlacklist()) {
          if (t.isInstance(e)) {
            continue entityList;
          }
        }
        if (!_grindingWorld.addEntityForGrinding(e)) {
          continue entityList;
        }
      }
      if (processMob && e.worldObj.getGameRules().getGameRuleBooleanValue("doMobLoot")) {
        try {
          e.worldObj.getGameRules().setOrCreateGameRule("doMobLoot", "false");
          damageEntity(e);
          if (e.getHealth() <= 0) {
            _tank.fill(LiquidDictionary.getLiquid("mobEssence", 100), true);
          }
        } finally {
          e.worldObj.getGameRules().setOrCreateGameRule("doMobLoot", "true");
          setIdleTicks(20);
        }
        return true;
      }
      damageEntity(e);
      if (e.getHealth() <= 0) {
        _tank.fill(LiquidDictionary.getLiquid("mobEssence", 100), true);
        setIdleTicks(20);
      } else {
        setIdleTicks(10);
      }
      return true;
    }
    setIdleTicks(getIdleTicksMax());
    return false;
  }