void setupJob() {
    ElectricalDrillDescriptor drill =
        (ElectricalDrillDescriptor)
            ElectricalDrillDescriptor.getDescriptor(
                miner.inventory.getStackInSlot(AutoMinerContainer.electricalDrillSlotId));
    OreScanner scanner =
        (OreScanner)
            ElectricalDrillDescriptor.getDescriptor(
                miner.inventory.getStackInSlot(AutoMinerContainer.OreScannerSlotId));
    MiningPipeDescriptor pipe =
        (MiningPipeDescriptor)
            ElectricalDrillDescriptor.getDescriptor(
                miner.inventory.getStackInSlot(AutoMinerContainer.MiningPipeSlotId));

    int scannerRadius = 0;
    double scannerEnergy = 0;
    if (scanner != null) {
      scannerRadius = scanner.radius;
      scannerEnergy = scanner.OperationEnergy;
    }

    World world = miner.node.coordonate.world();
    jobCoord.dimention = miner.node.coordonate.dimention;
    jobCoord.x = miner.node.coordonate.x;
    jobCoord.y = miner.node.coordonate.y - pipeLength;
    jobCoord.z = miner.node.coordonate.z;
    /*for(jobCoord.y = miner.node.coordonate.y - 1; jobCoord.y > 0;jobCoord.y--)
    {
    	GhostElement ghost = Eln.ghostManager.getGhost(jobCoord);
    	if(ghost == null || ghost.getObservatorCoordonate().equals(miner.node.coordonate) != true)
    	{
    		jobCoord.y++;
    		break;
    	}
    }*/
    // JobCoord at last pipe

    boolean jobFind = false;
    if (drill == null) {
      if (jobCoord.y != miner.node.coordonate.y) {
        ItemStack pipeStack = miner.inventory.getStackInSlot(AutoMinerContainer.MiningPipeSlotId);
        if (pipeStack == null
            || (pipeStack.stackSize != pipeStack.getMaxStackSize()
                && pipeStack.stackSize != miner.inventory.getInventoryStackLimit())) {
          jobFind = true;
          setJob(jobType.pipeRemove);
        }
      }
    } else if (pipe != null) {
      if (jobCoord.y < miner.node.coordonate.y - 1) {
        for (jobCoord.z = miner.node.coordonate.z - scannerRadius;
            jobCoord.z <= miner.node.coordonate.z + scannerRadius;
            jobCoord.z++) {
          for (jobCoord.x = miner.node.coordonate.x - scannerRadius;
              jobCoord.x <= miner.node.coordonate.x + scannerRadius;
              jobCoord.x++) {
            if (checkIsOre(jobCoord)) {
              jobFind = true;
              setJob(jobType.ore);
              break;
            }
          }
          if (jobFind == true) break;
        }
      }

      if (jobFind == false && jobCoord.y > 2) {
        jobCoord.x = miner.node.coordonate.x;
        jobCoord.y--;
        jobCoord.z = miner.node.coordonate.z;

        int blockId = jobCoord.world().getBlockId(jobCoord.x, jobCoord.y, jobCoord.z);
        if (blockId != 0
            && blockId != Block.waterMoving.blockID
            && blockId != Block.waterStill.blockID
            && blockId != Block.lavaMoving.blockID
            && blockId != Block.lavaStill.blockID) {
          if (blockId != Block.obsidian.blockID && blockId != Block.bedrock.blockID) {
            jobFind = true;
            setJob(jobType.ore);
          }
        } else {
          jobFind = true;
          setJob(jobType.pipeAdd);
        }
      }
    }
    if (jobFind == false) setJob(jobType.none);

    switch (job) {
      case none:
        energyTarget = 0;
        break;
      case ore:
        energyTarget = drill.OperationEnergy + scannerEnergy;
        break;
      case pipeAdd:
        energyTarget = miner.descriptor.pipeOperationEnergy;
        break;
      case pipeRemove:
        energyTarget = miner.descriptor.pipeOperationEnergy;
        break;
      default:
        break;
    }
  }