Posted January 28, 20169 yr I am trying to make a modular Block that changes it's GUI based on the installed modules. The creation and saving and of the tileentity works it's just the GUI/Container that's not syncing. To change the active container I just create a new instance in the GUI and assign playerInventory.player.openContainer and GuiContainer.inventorySlots to it. I think that is where my problem lies I just don't know any other way to change containers. GuiContainer public class GuiMachine extends GuiContainer { private IModule currentModule; private TileEntityMachine machine; private InventoryPlayer playerInventory; public GuiMachine(TileEntityMachine machine, InventoryPlayer playerInventory) { super(machine.getCore().getContainer(machine, playerInventory)); this.currentModule = machine.getCore(); this.machine = machine; this.playerInventory = playerInventory; } @Override public void initGui() { super.initGui(); int x = (width - xSize) / 2; int y = (height - ySize) / 2; int id = 0; buttonList.add(new TabButton(id, x-24, y + 4 + (16 * id))); id++; for (IModule module : machine.getModules()) if (module.hasGui()) { buttonList.add(id, new TabButton(id, x - 24, y + 4 + (16 * id))); id++; } ((TabButton) buttonList.get(0)).selected = true; } @Override protected void actionPerformed(GuiButton button) { for(int i=0; i<buttonList.size();i++) { if(i == button.id) continue; ((TabButton)buttonList.get(i)).selected = false; } ((TabButton)button).selected = true; if(button.id == 0) { currentModule = machine.getCore(); inventorySlots = currentModule.getContainer(machine, playerInventory); playerInventory.player.openContainer = inventorySlots; } else { currentModule = machine.getModules()[button.id-1]; inventorySlots = currentModule.getContainer(machine, playerInventory); playerInventory.player.openContainer = inventorySlots; } updateScreen(); } @Override protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { currentModule.drawGUI(partialTicks, mouseX, mouseY, this); } } Container public abstract class ContainerBase extends Container { protected IInventory inventory; protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 9; j++) { addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for (int i = 0; i < 9; i++) { addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142)); } } @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot) { ItemStack stack = null; Slot slotObject = (Slot) inventorySlots.get(slot); if (slotObject != null && slotObject.getHasStack()) { ItemStack stackInSlot = slotObject.getStack(); stack = stackInSlot.copy(); if (slot < inventory.getSizeInventory()) { if (!this.mergeItemStack(stackInSlot, inventory.getSizeInventory(), 36+inventory.getSizeInventory(), true)) { return null; } } else if (!this.mergeItemStack(stackInSlot, 0, inventory.getSizeInventory(), false)) { return null; } if (stackInSlot.stackSize == 0) { slotObject.putStack(null); } else { slotObject.onSlotChanged(); } if (stackInSlot.stackSize == stack.stackSize) { return null; } slotObject.onPickupFromSlot(player, stackInSlot); } return stack; } @Override public boolean canInteractWith(EntityPlayer playerIn) { return true; } } Item/Inventory public class ModuleChest extends ItemBase implements IModule { private IInventory inventory; public ModuleChest() { setUnlocalizedName("itemModuleChest"); inventory = new InventoryBasic("Chest Module", true, 9); } @Override public String getDisplayName() { return "Chest"; } @Override public int getComplexity() { return 2; } @Override public String getModuleType() { return "Module"; } @Override public boolean hasGui() { return true; } @Override public IInventory getInventory() { return inventory; } @Override public Container getContainer(TileEntityMachine machine, InventoryPlayer player) { return new ContainerChest((InventoryBasic) inventory, player); } public void drawGUI(float partialTicks, int mouseX, int mouseY, GuiContainer screen) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); screen.mc.renderEngine.bindTexture(new ResourceLocation("minecraft:textures/gui/container/dispenser.png")); int x = (screen.width - 176) / 2; int y = (screen.height - 166) / 2; screen.drawTexturedModalRect(x, y, 0, 0, 176, 166); } } Gif of what is happening http://i.imgur.com/wDycrZr.gifv
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.