public void startScan(boolean start) { if (!worldObj.isRemote) { if (!start) { scanning.setValue(false); notifyBlockUpdate(); return; } int r = radius.getValue(); // Only on server int y1 = yCoord - r; if (y1 < 0) { y1 = 0; } c1.setCoordinate(new Coordinate(xCoord - r, y1, zCoord - r)); int y2 = yCoord + r; if (y2 >= worldObj.getHeight()) { y2 = worldObj.getHeight() - 1; } c2.setCoordinate(new Coordinate(xCoord + r, y2, zCoord + r)); scanning.setValue(true); cur.setCoordinate(c1.getCoordinate()); inventories.clear(); notifyBlockUpdate(); } }
// Advance the 'cur' index to the next block. Return false when done. // When done 'scanning' will be set to false as well. private boolean advanceCurrent() { Coordinate c = cur.getCoordinate(); int cx = c.getX(); int cy = c.getY(); int cz = c.getZ(); cx++; Coordinate lo = c1.getCoordinate(); Coordinate up = c2.getCoordinate(); if (cx > up.getX()) { cx = lo.getX(); cy++; if (cy > up.getY()) { cy = lo.getY(); cz++; if (cz > up.getZ()) { scanning.setValue(false); notifyBlockUpdate(); return false; } } } cur.setCoordinate(new Coordinate(cx, cy, cz)); notifyBlockUpdate(); return true; }
@Override public void readFromNBT(NBTTagCompound tagCompound) { super.readFromNBT(tagCompound); scanning.setValue(tagCompound.getBoolean("scanning")); c1.readFromNBT(tagCompound, "c1"); c2.readFromNBT(tagCompound, "c2"); cur.readFromNBT(tagCompound, "cur"); inventories.readFromNBT(tagCompound, "inv"); }
@Override public void readRestorableFromNBT(NBTTagCompound tagCompound) { super.readRestorableFromNBT(tagCompound); radius.setValue(tagCompound.getInteger("radius")); }
public void setRadius(int v) { radius.setValue(v); notifyBlockUpdate(); }