private void stageScanForTree() { theFolk.action = FolkAction.ATWORK; theFolk.isWorking = false; V3 searchXYZ = null; lumbermill = Building.getBuilding(theFolk.employedAt); V3 ts = null; try { if (lumbermill.lumbermillMarker != null) { searchXYZ = lumbermill.lumbermillMarker; // use a marker if there is one } else if (theFolk.employedAt != null) { searchXYZ = theFolk.employedAt.clone(); } else { searchXYZ = theFolk.location.clone(); } ts = searchXYZ.clone(); } catch (Exception e) { e.printStackTrace(); } V3 searchpos; if (ts != null) { searchpos = ts.clone(); } else { searchpos = theFolk.location.clone(); } try { foundWoodAt = findClosestBlockType( searchpos, Blocks.log, SimukraftReloadedConfig.configLumberArea, false); foundWoodAt.theDimension = jobWorld.provider.dimensionId; if (foundWoodAt.getDistanceTo(Building.getNearestBuilding(foundWoodAt).primaryXYZ) <= 5) {} } catch (Exception e) { e.printStackTrace(); } theStage = Stage.GOTOTREE; onRoute = false; if (foundWoodAt == null) { SimukraftReloaded.sendChat(theFolk.name + " could not find any wood in the area."); theFolk.selfFire(); return; } }
@Override public void onBlockPlacedBy( World world, int i, int j, int k, EntityLivingBase player, ItemStack is) { hasPlaced = true; Marker ma; if (world.isRemote) { markers.add(ma = new Marker(i, j, k, world.provider.dimensionId)); String markerCaption = ""; String helpText = ""; if (markers.size() == 1) { markerCaption = "Front-Left"; helpText = "You can place two more markers to mark out an area for a farm or mine etc. If you wish to do this, place another marker at the front-right position now"; System.out.println(markers.size()); } else if (markers.size() == 2) { markerCaption = "Front-Right"; helpText = "Finally, place a marker at the Rear-Left position"; System.out.println(markers.size()); } else if (markers.size() == 3) { markerCaption = "Rear-Left"; helpText = "You're done, now you can place down a mining box, farming box or right-click the front-left marker to copy a structure!"; System.out.println(markers.size()); } else { System.out.println(markers.size()); markerCaption = "Too many Markers!"; } if (markers.size() < 4) { V3 pos = new V3((double) i, (double) j, (double) k, world.provider.dimensionId); pos.y += 0.01d; if (SimukraftReloadedConfig.configEnableMarkerAlignmentBeams) { EntityAlignBeam beam = new EntityAlignBeam(world); ma.caption = markerCaption; beam.setLocationAndAngles(pos.x, pos.y, pos.z, 0f, 0f); beam.yaw = 0f; if (!world.isRemote) { world.spawnEntityInWorld(beam); } ma.beams.add(beam); EntityAlignBeam beam2 = new EntityAlignBeam(world); beam2.setLocationAndAngles(pos.x, pos.y, pos.z, 90f, 0f); beam2.yaw = 90f; if (!world.isRemote) { world.spawnEntityInWorld(beam2); } ma.beams.add(beam2); EntityAlignBeam beam3 = new EntityAlignBeam(world); beam3.setLocationAndAngles(pos.x, pos.y, pos.z, 180f, 0f); beam3.yaw = 180f; if (!world.isRemote) { world.spawnEntityInWorld(beam3); } ma.beams.add(beam3); EntityAlignBeam beam4 = new EntityAlignBeam(world); beam4.setLocationAndAngles(pos.x, pos.y, pos.z, 270f, 0f); beam4.yaw = 270f; if (!world.isRemote) { world.spawnEntityInWorld(beam4); } ma.beams.add(beam4); } } if (!helpText.contentEquals("")) { SimukraftReloaded.sendChat(helpText); } super.onBlockPlacedBy(world, i, j, k, player, is); } }
private void stageChoppingTree() { int count; Block theWood = theFolk.theEntity.worldObj.getBlock( foundWoodAt.x.intValue(), foundWoodAt.y.intValue(), foundWoodAt.z.intValue()); if (step == 1) { theFolk.statusText = "Choppy Choppy tree!"; theFolk.isWorking = true; /// find the bottom of the trunk for (int down = 0; down < 20; down++) { int x = foundWoodAt.x.intValue(); int y = foundWoodAt.y.intValue() - 0; int z = foundWoodAt.z.intValue(); if (jobWorld == null) { theFolk.selfFire(); return; } if (jobWorld.getBlock(x, y, z) != Blocks.log || jobWorld.getBlock(x, y, z) != Blocks.log2) { break; } else { foundWoodAt.y = (double) y; } } step = 2; } else if (step == 2) { if (jobWorld.getBlock( foundWoodAt.x.intValue(), foundWoodAt.y.intValue(), foundWoodAt.z.intValue()) == Blocks.log || jobWorld.getBlock( foundWoodAt.x.intValue(), foundWoodAt.y.intValue(), foundWoodAt.z.intValue()) == Blocks.log2) { Thread t = new Thread( new Runnable() { public void run() { isChopping = true; for (int d = 0; d < 12; d++) { try { mc.theWorld.playSound( theFolk.location.x, theFolk.location.y, theFolk.location.z, "step.wood", 1f, 1f, false); } catch (Exception e) { } if (theFolk.theEntity != null) { theFolk.theEntity.swingProgress = 0.3f; try { Thread.sleep(100); } catch (Exception e) { } theFolk.theEntity.swingProgress = 0.7f; try { Thread.sleep(100); } catch (Exception e) { } } } isChopping = false; } }); t.start(); step = 3; } else { // no more tree left step = 4; } } else if (step == 3) { if (isChopping) { return; } ArrayList<ItemStack> log = this.translateBlockWhenMined(jobWorld, foundWoodAt); jobWorld.setBlock( foundWoodAt.x.intValue(), foundWoodAt.y.intValue(), foundWoodAt.z.intValue(), Blocks.air, 0, 0x03); if (log != null) { for (int l = 0; l < log.size(); l++) { ItemStack isl = log.get(l); theFolk.inventory.add(isl); } } count = getInventoryCount(theFolk, Item.getItemFromBlock(Blocks.log)); theFolk.statusText = "Got " + count + " logs so far"; theFolk.stayPut = false; foundWoodAt.y = foundWoodAt.y + 1; step = 2; } else if (step == 4) { if (theFolk.isSpawned()) { count = getInventoryCount(theFolk, Item.getItemFromBlock(Blocks.sapling)); if (count > 0) { for (int i = 0; i < theFolk.inventory.size(); i++) { ItemStack fis = theFolk.inventory.get(i); if (fis != null && Block.getBlockFromItem(fis.getItem()) == Blocks.sapling) { theFolk.inventory.remove(i); plantSapling(Block.getBlockFromItem(fis.getItem())); break; } } } } else { // they're de-spawned, so are the saplings, so just plant one anyway plantSapling(Blocks.sapling); } count = getInventoryCount(theFolk, Item.getItemFromBlock(Blocks.log)); if (count < 12) { theStage = Stage.SCANFORTREE; } else { theStage = Stage.RETURNWOOD; step = 1; } } }