@Override public void setInventorySlotContents(int slot, ItemStack itemStack) { if (slot < 5) { inventory[slot] = itemStack; if (itemStack != null && itemStack.stackSize > getInventoryStackLimit()) { itemStack.stackSize = getInventoryStackLimit(); } if (slot == 0) { if (itemStack != null && isProgrammableAndValidForDrone(this, itemStack)) { progWidgets = TileEntityProgrammer.getProgWidgets(itemStack); if (!worldObj.isRemote) getAIManager().setWidgets(progWidgets); } else { progWidgets.clear(); targetX = xCoord + 0.5; targetY = yCoord + 0.6; targetZ = zCoord + 0.5; boolean updateNeighbours = false; for (int i = 0; i < redstoneLevels.length; i++) { if (redstoneLevels[i] > 0) { redstoneLevels[i] = 0; updateNeighbours = true; } } if (updateNeighbours) updateNeighbours(); } getAIManager(); } } else { getFakePlayer().inventory.setInventorySlotContents(slot - 5, itemStack); } }
public static boolean isProgrammableAndValidForDrone(IDroneBase drone, ItemStack programmable) { if (programmable != null && programmable.getItem() instanceof IProgrammable && ((IProgrammable) programmable.getItem()).canProgram(programmable) && ((IProgrammable) programmable.getItem()).usesPieces(programmable)) { List<IProgWidget> widgets = TileEntityProgrammer.getProgWidgets(programmable); for (IProgWidget widget : widgets) { if (!drone.isProgramApplicable(widget)) return false; } return true; } return false; }