@Override
  protected boolean activateMachine() {
    BlockPosition targetCoords = getNextTree();

    if (targetCoords == null) {
      setIdleTicks(getIdleTicksMax());
      return false;
    }

    Block harvestedBlock = worldObj.getBlock(targetCoords.x, targetCoords.y, targetCoords.z);
    int harvestedBlockMetadata =
        worldObj.getBlockMetadata(targetCoords.x, targetCoords.y, targetCoords.z);

    IFactoryFruit harvestable = MFRRegistry.getFruits().get(harvestedBlock);

    List<ItemStack> drops =
        harvestable.getDrops(worldObj, _rand, targetCoords.x, targetCoords.y, targetCoords.z);

    ReplacementBlock replacement =
        harvestable.getReplacementBlock(worldObj, targetCoords.x, targetCoords.y, targetCoords.z);

    harvestable.prePick(worldObj, targetCoords.x, targetCoords.y, targetCoords.z);

    if (replacement == null) {
      if (!worldObj.setBlockToAir(targetCoords.x, targetCoords.y, targetCoords.z)) return false;
      if (MFRConfig.playSounds.getBoolean(true)) {
        worldObj.playAuxSFXAtEntity(
            null,
            2001,
            targetCoords.x,
            targetCoords.y,
            targetCoords.z,
            Block.getIdFromBlock(harvestedBlock) + (harvestedBlockMetadata << 12));
      }
    } else {
      if (!replacement.replaceBlock(worldObj, targetCoords.x, targetCoords.y, targetCoords.z, null))
        return false;
    }

    doDrop(drops);

    // TODO: sludge?

    harvestable.postPick(worldObj, targetCoords.x, targetCoords.y, targetCoords.z);

    return true;
  }