protected void dig() { powerProvider.configure(20, 30, 200, 50, MAX_ENERGY); if (powerProvider.useEnergy(30, 30, true) != 30) { return; } if (!findTarget(true)) { // I believe the issue is box going null becuase of bad chunkloader positioning if (arm != null && box != null) arm.setTarget( (double) box.xMin + (box.xMax - box.xMin) / 2D, yCoord + 2D, (double) box.zMin + (box.zMax - box.zMin) / 2D); isDigging = false; } inProcess = true; }
public boolean findTarget(boolean doSet) { if (worldObj.isRemote) return false; boolean[][] blockedColumns = new boolean[bluePrintBuilder.bluePrint.sizeX - 2][bluePrintBuilder.bluePrint.sizeZ - 2]; // for (int searchX = 0; searchX < bluePrintBuilder.bluePrint.sizeX - 2; ++searchX) { // for (int searchZ = 0; searchZ < bluePrintBuilder.bluePrint.sizeZ - 2; ++searchZ) { // blockedColumns[searchX][searchZ] = false; // } // } // for (int searchY = yCoord + 3; searchY >= 0; --searchY) { int startX, endX, incX; if (searchY % 2 == 0) { startX = 0; endX = bluePrintBuilder.bluePrint.sizeX - 2; incX = 1; } else { startX = bluePrintBuilder.bluePrint.sizeX - 3; endX = -1; incX = -1; } for (int searchX = startX; searchX != endX; searchX += incX) { int startZ, endZ, incZ; if (searchX % 2 == searchY % 2) { startZ = 0; endZ = bluePrintBuilder.bluePrint.sizeZ - 2; incZ = 1; } else { startZ = bluePrintBuilder.bluePrint.sizeZ - 3; endZ = -1; incZ = -1; } for (int searchZ = startZ; searchZ != endZ; searchZ += incZ) { if (!blockedColumns[searchX][searchZ]) { int bx = box.xMin + searchX + 1, by = searchY, bz = box.zMin + searchZ + 1; int blockId = worldObj.getBlockId(bx, by, bz); if (isUnquarriableBlock(blockId, bx, by, bz)) { blockedColumns[searchX][searchZ] = true; } else if (isQuarriableBlock(blockId, bx, by + 1, bz)) { if (doSet && arm != null) { arm.setTarget(bx, by + 1, bz); } return true; } } } } } return false; }