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