Jump to content

Mine_Stone

Members
  • Posts

    4
  • Joined

  • Last visited

Everything posted by Mine_Stone

  1. Thank you, I didnt know that. It fixed the issue.
  2. Thanks again for the reply. Here is the code from my TileEntity, which contains getContainer public class TileEntityMachine extends TileEntity { private Machine machine; private MachineContainer container; public TileEntityMachine(Machine machine, MachineContainer container) { this.machine = machine; this.container = container; } public TileEntityMachine() { this.container = new MachineContainer(this); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.machine = ModRegistry.getMachine(nbt.getString("machine_name")); } public TileEntityMachine(Machine machine) { this.machine = machine; this.container = new MachineContainer(this); NBTTagCompound nbt = new NBTTagCompound(); readFromNBT(nbt); nbt.setString("machine_name", machine.getName()); this.writeToNBT(nbt); } public Machine getMachine() { return machine; } public MachineContainer getContainer() { return container; } } And here is the code from MachineContainer: (it is very empty at the moment because I haven't yet implemented any behaviour. public class MachineContainer extends Container { private TileEntityMachine machineTE; public MachineContainer(TileEntityMachine machineTE) { this.machineTE = machineTE; } @Override public boolean canInteractWith(EntityPlayer playerIn) { return true; } }
  3. Thank you for the answer. IGuiHandler: public class MachineGUIHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { for (Machine machine : ModRegistry.getMachines()) { if (ModRegistry.getMachineGuiID(machine) == ID) return ((TileEntityMachine) world.getTileEntity(new BlockPos(x,y,z))).getContainer(); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { for (Machine machine : ModRegistry.getMachines()) { if (ModRegistry.getMachineGuiID(machine) == ID) return machine.createGui((TileEntityMachine) world.getTileEntity(new BlockPos(x,y,z)), player.inventory); } return null; } } Container: public class MachineContainer extends Container { private TileEntityMachine machineTE; public MachineContainer(TileEntityMachine machineTE) { this.machineTE = machineTE; } @Override public boolean canInteractWith(EntityPlayer playerIn) { return true; } } GuiContainer: public class GuiMachine extends GuiContainer { private TileEntityMachine machineTE; private Machine machine; private ResourceLocation background; public GuiMachine(TileEntityMachine machineTE, InventoryPlayer playerInventory) { super(new MachineContainer(machineTE)); this.machineTE = machineTE; this.machine = machineTE.getMachine(); } @Override protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { fontRenderer.drawString(machine.getDisplayName(), xSize / 2 - fontRenderer.getStringWidth(machine.getDisplayName()) / 2, ySize / 3, 0x000); } protected void bindTexture(ResourceLocation texture) { Minecraft.getMinecraft().renderEngine.bindTexture(texture); } } Machine: public abstract class Machine { private Block block; private ItemBlock item; private String name; public Machine(String name) { this.name = name; } public Block getBlock() { if (block == null) block = new BlockMachine(this); return block; } public ItemBlock getItem() { if (item == null) { item = new ItemBlock(getBlock()); item.setRegistryName(name); } return item; } public String getName() { return name; } public String getDisplayName() { return name; } public abstract TileEntity createTileEntity(World world, IBlockState state); public abstract GuiMachine createGui(TileEntityMachine te, InventoryPlayer playerInventory); public abstract MachineContainer createContainer(TileEntityMachine te); } MachineFluidCombiner: (The Machine associated to my block) public class MachineFluidCombiner extends Machine { public MachineFluidCombiner() { super("test_machine"); } @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileEntityMachine(this); } @Override public GuiMachine createGui(TileEntityMachine te, InventoryPlayer playerInventory) { return new GuiFluidCombiner(te, playerInventory); // GuiFluidCombiner extends GuiMachine } @Override public MachineContainer createContainer(TileEntityMachine te) { return new MachineContainer(te); } } As you can see im trying to make this modular (with the Machine class). I hope this helps you to understand what I'm doing
  4. Hi everyone! I'm currently implementing a custom TE with a gui in my mod. He is how I open the GUI from my onBlockActivatedMethod. if (!worldIn.isRemote) { playerIn.openGui(MainClass.getInstance(), ModRegistry.getMachineGuiID(machine), worldIn, pos.getX(), pos.getY(), pos.getZ()); } // ModRegistry.getMachineGuiID(machine) returns the correct gui ID, do not worry about that. The code works fine, but I always get the following error when I open the GUI more than once: [14:08:43] [Server thread/FATAL] [minecraft/MinecraftServer]: Error executing task java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Listener already listening at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[?:1.8.0_211] at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[?:1.8.0_211] at net.minecraft.util.Util.runTask(Util.java:54) [Util.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:798) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192) [IntegratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592) [MinecraftServer.class:?] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_211] Caused by: java.lang.IllegalArgumentException: Listener already listening at net.minecraft.inventory.Container.addListener(Container.java:56) ~[Container.class:?] at net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:101) ~[FMLNetworkHandler.class:?] at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2809) ~[EntityPlayer.class:?] at com.minestone.fluxified.blocks.BlockMachine.onBlockActivated(BlockMachine.java:63) ~[BlockMachine.class:?] at net.minecraft.server.management.PlayerInteractionManager.processRightClickBlock(PlayerInteractionManager.java:475) ~[PlayerInteractionManager.class:?] at net.minecraft.network.NetHandlerPlayServer.processTryUseItemOnBlock(NetHandlerPlayServer.java:769) ~[NetHandlerPlayServer.class:?] at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:68) ~[CPacketPlayerTryUseItemOnBlock.class:?] at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:13) ~[CPacketPlayerTryUseItemOnBlock.class:?] at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_211] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_211] at net.minecraft.util.Util.runTask(Util.java:53) ~[Util.class:?] ... 5 more How can I fix this issue? Please let me know if you need any other part of my code. Thank you.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.