// This is called client side. public List<ClientScreenModule> getClientScreenModules() { if (clientScreenModules == null) { needsServerData = false; clientScreenModules = new ArrayList<ClientScreenModule>(); for (int i = 0; i < inventoryHelper.getCount(); i++) { ItemStack itemStack = inventoryHelper.getStackInSlot(i); if (itemStack != null && itemStack.getItem() instanceof ModuleProvider) { ModuleProvider moduleProvider = (ModuleProvider) itemStack.getItem(); ClientScreenModule clientScreenModule; try { clientScreenModule = moduleProvider.getClientScreenModule().newInstance(); } catch (InstantiationException e) { e.printStackTrace(); continue; } catch (IllegalAccessException e) { e.printStackTrace(); continue; } clientScreenModule.setupFromNBT( itemStack.getTagCompound(), worldObj.provider.dimensionId, xCoord, yCoord, zCoord); clientScreenModules.add(clientScreenModule); if (clientScreenModule.needsServerData()) { needsServerData = true; } } else { clientScreenModules.add( null); // To keep the indexing correct so that the modules correspond with there slot // number. } } } return clientScreenModules; }
public void hitScreenClient(double hitX, double hitY, double hitZ, int side) { float factor = large ? 2.0f : 1.0f; float dx = 0; float dy = (float) ((-hitY + 1.0) / factor); switch (side) { case 2: dx = (float) ((1.0 - hitX) / factor); break; case 3: dx = (float) (hitX / factor); break; case 4: dx = (float) (hitZ / factor); break; case 5: dx = (float) ((1.0 - hitZ) / factor); break; } int x = (int) (dx * 128); int y = (int) (dy * 128); int currenty = 7; int moduleIndex = 0; List<ClientScreenModule> clientScreenModules = getClientScreenModules(); for (ClientScreenModule module : clientScreenModules) { if (module != null) { int height = module.getHeight(); // Check if this module has enough room if (currenty + height <= 124) { if (currenty <= y && y < (currenty + height)) { break; } currenty += height; } } moduleIndex++; } if (moduleIndex >= clientScreenModules.size()) { return; } clientScreenModules.get(moduleIndex).mouseClick(worldObj, x, y - currenty, true); clickedModules.add(new ActivatedModule(moduleIndex, 5, x, y)); PacketHandler.INSTANCE.sendToServer( new PacketServerCommand( xCoord, yCoord, zCoord, CMD_CLICK, new Argument("x", x), new Argument("y", y - currenty), new Argument("module", moduleIndex))); }