iLegendx98 Posted August 11, 2014 Share Posted August 11, 2014 Ok, so I have a pickaxe that I want to open an Inventory for when it is right clicked. Now I am fairly new to making GUI/containers and need help as any tutorials are outdated. I have successfully made a machine that functions as a furnace does except with custom recipes. I imagine a tool inventory would be similar, except I don't think a tool is considered a tile entity. This makes it things complicated when it comes to the GUI Handler. GuiHandler.java (Note: The Endite Reactor is my machine that is already working) package gui; import gui_container.ContainerEnditeReactor; import main.RunicScrolls; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import tileentity.TileEntityEnditeReactor; import cpw.mods.fml.common.network.IGuiHandler; public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity entity = world.getTileEntity(x, y, z); if(entity != null) { switch(ID) { case RunicScrolls.guiIDEnditeReactor: if(entity instanceof TileEntityEnditeReactor) { return new ContainerEnditeReactor(player.inventory, (TileEntityEnditeReactor) entity); } return null; } } //ADDED if (ID == RunicScrolls.guiIDAdaptedPick) { return null; } //ADDED return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity entity = world.getTileEntity(x, y, z); if(entity != null) { switch(ID) { case RunicScrolls.guiIDEnditeReactor: if(entity instanceof TileEntityEnditeReactor) { return new GuiEnditeReactor(player.inventory, (TileEntityEnditeReactor) entity); } return null; } } //ADDED// if (ID == RunicScrolls.guiIDAdaptedPick) { return new GuiAdaptedPick(player.inventory); } //ADDED// return null; } } ToolAdaptedPick.java (This is the tool) package tools; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.network.handshake.FMLHandshakeMessage.ModIdData; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import main.RunicScrolls; import net.minecraft.block.Block; import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.event.world.BlockEvent.BreakEvent; public class ToolAdaptedPick extends ItemPickaxe { public ToolAdaptedPick(int id, Item.ToolMaterial mat) { super(mat); } @Override //ADDED// public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { player.openGui(RunicScrolls.instance, RunicScrolls.guiIDAdaptedPick, world, (int) player.posX, (int) player.posY, (int) player.posZ); return stack; } //ADDED// } EDIT: GuiAdaptedPick.java (This is the Gui Class) package gui; import java.io.IOException; import org.lwjgl.opengl.GL11; import gui_container.ContainerAdaptedPick; import gui_container.ContainerEnditeReactor; import tileentity.TileEntityEnditeReactor; import main.RunicScrolls; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.util.ResourceLocation; public class GuiAdaptedPick extends GuiContainer{ public static final ResourceLocation bground = new ResourceLocation(RunicScrolls.modid + ":" + "textures/gui/GuiAdaptedPick.png"); private static Object inventoryPlayer; private Object adaptedPick; public GuiAdaptedPick(InventoryPlayer inventoryPlayer) { super(new ContainerAdaptedPick(inventoryPlayer, null)); this.xSize = 176; this.ySize = 166; } public void drawGuiContainerForegroundLayer(int par1, int par2) { String name = "Modify Adapted Pickaxe"; this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory", new Object[0]), 8, this.ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { GL11.glColor4f(1F, 1F, 1F, 1F); Minecraft.getMinecraft().getTextureManager().bindTexture(bground); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); } } ContainerAdaptedPick.java (This is still a WIP) package gui_container; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.inventory.SlotFurnace; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.tileentity.TileEntityFurnace; import recipes.RecipesEnditeReactor; import tileentity.TileEntityEnditeReactor; import tools.ToolAdaptedPick; public class ContainerAdaptedPick extends Container { private IInventory AdaptedPick; public ContainerAdaptedPick(InventoryPlayer inventory, IInventory upgInv) { this.AdaptedPick = upgInv; this.addSlotToContainer(new Slot(upgInv, 0, 80, 17)); this.addSlotToContainer(new Slot(upgInv, 1, 80, 53)); this.addSlotToContainer(new SlotFurnace(inventory.player, upgInv, 2, 134, 35)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j*18, 84 + i*18)); } } for(int i = 0; i < 9; i++) { this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 142)); } } @Override public boolean canInteractWith(EntityPlayer p_75145_1_) { // TODO Auto-generated method stub return true; } } So to clarify, I am not getting errors with code or anything, I'm just lost on how to start with the tool as it isn't a tile entity. Some guidance would be much appreciated as well as maybe some example code. I already know the basics of java so don't bother just telling me "You need to learn java!!!" That is not helpful. NOTE: This is for minecraft version 1.7.10. If you want anymore of my code, just tell me and I will put it in. Quote Link to comment Share on other sites More sharing options...
Ewe Loon Posted August 12, 2014 Share Posted August 12, 2014 in your item class add @Override public ItemStack onItemRightClick(ItemStack i, World w, EntityPlayer pl) { pl.openGui( fill in your own parameters here ); return i; } during initialization register your gui NetworkRegistry.INSTANCE.registerGuiHandler(yourMod.instance,new GUIHandler()); here is what is in my gui handler public class GUIHandler implements IGuiHandler { @Override public Object getServerGuiElement(int id, EntityPlayer pl, World wld, int x, int y, int z) { MagicEnchant.debug("getServerGuiElement"); if ( id == GuiEnchantTable.GUI_ID ){ return null; } return null; } @Override public Object getClientGuiElement(int id, EntityPlayer pl, World wld, int x, int y, int z) { MagicEnchant.debug("getClientGuiElement"); if ( id == GuiEnchantTable.GUI_ID ){ return new GuiEnchantTable(pl,x,y,z); } return null; } } Quote Link to comment Share on other sites More sharing options...
iLegendx98 Posted August 12, 2014 Author Share Posted August 12, 2014 I applied the changes you said and it did something. It recognizes that I right click on the tool but then crashes! I have no red underlines in the code to signify an error, but I assume the code I made is wrong. I have pasted in my gui and container classes in the main thread. The gui class is probably wrong as I just copied my gui class for my machines (block) but editing a few methods and names. Here is the crash report : ---- Minecraft Crash Report ---- // Why did you do that? Time: 8/12/14 11:18 AM Description: Rendering screen java.lang.NullPointerException: Rendering screen at net.minecraft.inventory.Slot.getStack(Slot.java:88) at net.minecraft.client.gui.inventory.GuiContainer.func_146977_a(GuiContainer.java:223) at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:118) at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1145) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1066) at net.minecraft.client.Minecraft.run(Minecraft.java:961) at net.minecraft.client.main.Main.main(Main.java:164) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Stacktrace: at net.minecraft.inventory.Slot.getStack(Slot.java:88) at net.minecraft.client.gui.inventory.GuiContainer.func_146977_a(GuiContainer.java:223) at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:118) -- Screen render details -- Details: Screen name: gui.GuiAdaptedPick Mouse location: Scaled: (213, 119). Absolute: (427, 240) Screen size: Scaled: (427, 240). Absolute: (854, 480). Scale factor of 2 -- Affected level -- Details: Level name: MpServer All players: 1 total; [EntityClientPlayerMP['ForgeDevName'/4, l='MpServer', x=1083.56, y=57.62, z=677.47]] Chunk stats: MultiplayerChunkCache: 170, 170 Level seed: 0 Level generator: ID 01 - flat, ver 0. Features enabled: false Level generator options: Level spawn location: World: (1072,4,688), Chunk: (at 0,0,0 in 67,43; contains blocks 1072,0,688 to 1087,255,703), Region: (2,1; contains chunks 64,32 to 95,63, blocks 1024,0,512 to 1535,255,1023) Level time: 284725 game time, 68288 day time Level dimension: 0 Level storage version: 0x00000 - Unknown? Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false Forced entities: 5 total; [EntityItemFrame['entity.ItemFrame.name'/0, l='MpServer', x=1050.06, y=56.50, z=688.50], EntityItemFrame['entity.ItemFrame.name'/1, l='MpServer', x=1050.06, y=57.50, z=689.50], EntityItemFrame['entity.ItemFrame.name'/2, l='MpServer', x=1050.06, y=58.50, z=688.50], EntityChicken['Chicken'/3, l='MpServer', x=1152.59, y=56.00, z=679.34], EntityClientPlayerMP['ForgeDevName'/4, l='MpServer', x=1083.56, y=57.62, z=677.47]] Retry entities: 0 total; [] Server brand: fml,forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:417) at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2567) at net.minecraft.client.Minecraft.run(Minecraft.java:983) at net.minecraft.client.main.Main.main(Main.java:164) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) -- System Details -- Details: Minecraft Version: 1.7.10 Operating System: Windows 7 (amd64) version 6.1 Java Version: 1.8.0_05, Oracle Corporation Java VM Version: Java HotSpot 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 769699752 bytes (734 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB) JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP v9.05 FML v7.10.18.1180 Minecraft Forge 10.13.0.1180 4 mods loaded, 4 mods active mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available FML{7.10.18.1180} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.0.1180.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available Forge{10.13.0.1180} [Minecraft Forge] (forgeSrc-1.7.10-10.13.0.1180.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available ilegendsrunicscrolls{v2.2 Stable} [iLegends Runic Scrolls] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available Launched Version: 1.7 LWJGL: 2.9.1 OpenGL: GeForce GTX 550 Ti/PCIe/SSE2 GL version 4.3.0, NVIDIA Corporation GL Caps: Using GL 1.3 multitexturing. Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. Anisotropic filtering is supported and maximum anisotropy is 16. Shaders are available because OpenGL 2.1 is supported. Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: [] Current Language: ~~ERROR~~ NullPointerException: null Profiler Position: N/A (disabled) Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used Anisotropic Filtering: Off (1) I am usually good at reading crash reports but I am lost on this one. My main class is way to large to paste in but I already had my Gui handler registered like you said. public void init(FMLInitializationEvent e) { NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler()); //300 lines of recipes } Quote Link to comment Share on other sites More sharing options...
Eractnod Posted August 12, 2014 Share Posted August 12, 2014 When I made my back pack, I added this to my gui handler for opening a gui that was equiped. public class TEGuiHandler implements IGuiHandler{ @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile_entity = world.getTileEntity(x, y, z); ItemStack equipped; equipped = getEquippedItem(player); if (equipped == null) { return null; } if ((equipped.getItem() instanceof BackPack)) { return new ContainerBackPack(player, player.inventory, new ItemInventory(player.getHeldItem())); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile_entity = world.getTileEntity(x, y, z); ItemStack equipped; //Entity BackPack equipped = getEquippedItem(player); if (equipped == null) { return null; } if ((equipped.getItem() instanceof BackPack)) { return new GuiBackPack((ContainerBackPack) new ContainerBackPack(player, player.inventory, new ItemInventory(player.getHeldItem()))); } return null; } public ItemStack getEquippedItem(EntityPlayer player) { return player.getCurrentEquippedItem(); } } Quote Link to comment Share on other sites More sharing options...
iLegendx98 Posted August 12, 2014 Author Share Posted August 12, 2014 Would you be able to show me the code for your GUI and container class please? I think that there is an issue in the GUI class and I am lost with the container class. This would also be great if anyone else that has made something like this could show me their code too. I am completely lost. Quote Link to comment Share on other sites More sharing options...
AskHow1248 Posted August 12, 2014 Share Posted August 12, 2014 I your gui handeler, your added code needs to be a case statement inside your switch statement. This video might help: Here is my gui handeler: package Technomage3.both.Interfaces; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import Technomage3.both.TechnologicalMagic; import Technomage3.both.Blocks.secureBlocks.ItemBlockPlacer; import Technomage3.both.Blocks.tileentities.TileEntityAncientSpellTable; import Technomage3.both.Blocks.tileentities.TileEntityMageForge; import Technomage3.both.Blocks.tileentities.TileEntityMagicPathway; import Technomage3.both.Blocks.tileentities.TileEntityPowerCharger; import Technomage3.both.Interfaces.containers.ContainerAncientSpellTable; import Technomage3.both.Interfaces.containers.ContainerBlockPlacer; import Technomage3.both.Interfaces.containers.ContainerItemNetworkAccess; import Technomage3.both.Interfaces.containers.ContainerItemPusher; import Technomage3.both.Interfaces.containers.ContainerItemTransferNetworkBase; import Technomage3.both.Interfaces.containers.ContainerKeystone; import Technomage3.both.Interfaces.containers.ContainerMageForge; import Technomage3.both.Interfaces.containers.ContainerMagicPathwayBlocked; import Technomage3.both.Interfaces.containers.ContainerMagicPathwayOpen; import Technomage3.both.Interfaces.containers.ContainerModularArmor; import Technomage3.both.Interfaces.containers.ContainerPowerCharger; import Technomage3.both.Interfaces.containers.ContainerSpellcastingWand; import Technomage3.both.Interfaces.guis.GUIAncientSpellTable; import Technomage3.both.Interfaces.guis.GUIKeystone; import Technomage3.both.Interfaces.guis.GUIMageForge; import Technomage3.both.Interfaces.guis.GUIMagicPathway; import Technomage3.both.Interfaces.guis.GUIModularArmor; import Technomage3.both.Interfaces.guis.GuiItemNetworkAccess; import Technomage3.both.Interfaces.guis.GuiItemPusher; import Technomage3.both.Interfaces.guis.GuiItemTransferNetworkBase; import Technomage3.both.Interfaces.guis.TN3GUIContainer; import Technomage3.both.ItemTransfer.tileentities.TileEntityItemNetworkAccess; import Technomage3.both.ItemTransfer.tileentities.TileEntityItemPusher; import Technomage3.both.ItemTransfer.tileentities.TileEntityItemTransferNetworkBase; import Technomage3.both.Items.ItemKeystone.KeyCode; import Technomage3.both.Items.TMItems; import Technomage3.both.Items.armor.ItemModularArmor; import Technomage3.both.Spell.SpellcastingWand; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.network.NetworkRegistry; public class TMGUIHandeler implements IGuiHandler { public TMGUIHandeler() { NetworkRegistry.instance().registerGuiHandler(TechnologicalMagic.instance, this); } @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile = world.getBlockTileEntity(x, y, z); switch(ID) { case TMGuis.mageForgeGui: // tile entity mage forge if(tile != null && tile instanceof TileEntityMageForge) return new ContainerMageForge(player.inventory, (TileEntityMageForge) tile); break; case TMGuis.modularArmorGui: // modular armor ItemStack stack = player.getHeldItem(); if(stack.getItem() instanceof ItemModularArmor) return new ContainerModularArmor(player.inventory, (ItemModularArmor) stack.getItem()); case TMGuis.powerChargerGui: if(tile != null && tile instanceof TileEntityPowerCharger) return new ContainerPowerCharger(player.inventory, (TileEntityPowerCharger) tile); case TMGuis.spellcastingWandGui: ItemStack stack2 = player.getHeldItem(); if(stack2.getItem() instanceof SpellcastingWand) return new ContainerSpellcastingWand(player.inventory, (SpellcastingWand) stack2.getItem()); case TMGuis.ancientSpellTableGui: if(tile != null && tile instanceof TileEntityAncientSpellTable) return new ContainerAncientSpellTable(player.inventory, (TileEntityAncientSpellTable) tile); case TMGuis.magicPathwayGuiNoKey: System.out.println(KeyCode.getHeldCode(player)); if(tile != null && tile instanceof TileEntityMagicPathway) return new ContainerMagicPathwayBlocked(player.inventory, (TileEntityMagicPathway) tile); case TMGuis.keystoneGui: ItemStack stack1 = player.getHeldItem(); if(stack1.itemID == TMItems.keyStone.itemID) return new ContainerKeystone(stack1, player.inventory); case TMGuis.magicPathwayGuiKey: System.out.println(KeyCode.getHeldCode(player)); if(tile != null && tile instanceof TileEntityMagicPathway) return new ContainerMagicPathwayOpen(player.inventory, (TileEntityMagicPathway) tile); case TMGuis.itemTransferNetworkBaseGui: if(tile != null && tile instanceof TileEntityItemTransferNetworkBase) return new ContainerItemTransferNetworkBase((TileEntityItemTransferNetworkBase) tile, player); case TMGuis.itemTransferNetworkPusherGui: if(tile != null && tile instanceof TileEntityItemPusher) return new ContainerItemPusher((TileEntityItemPusher) tile, player); case TMGuis.itemTransferNetworkAccessGui: if(tile != null && tile instanceof TileEntityItemNetworkAccess) return new ContainerItemNetworkAccess((TileEntityItemNetworkAccess) tile, player); case TMGuis.blockPlacer: ItemStack stack3 = player.getHeldItem(); if(stack3.itemID == TMItems.blockPlacer.itemID) return new ContainerBlockPlacer(player.inventory, (ItemBlockPlacer) stack3.getItem()); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile = world.getBlockTileEntity(x, y, z); switch(ID) { case TMGuis.mageForgeGui: if(tile != null && tile instanceof TileEntityMageForge) return new GUIMageForge(player.inventory, (TileEntityMageForge) tile); break; case TMGuis.modularArmorGui: // modular armor ItemStack stack = player.getHeldItem(); if(stack.getItem() instanceof ItemModularArmor) return new GUIModularArmor(player.inventory, stack); case TMGuis.powerChargerGui: if(tile != null && tile instanceof TileEntityPowerCharger) return new TN3GUIContainer(player.inventory, new ContainerPowerCharger(player.inventory, (TileEntityPowerCharger) tile), "powerCharger", 176, 130 ); case TMGuis.spellcastingWandGui: ItemStack stack2 = player.getHeldItem(); if(stack2.getItem() instanceof SpellcastingWand) return new TN3GUIContainer(player.inventory, new ContainerSpellcastingWand(player.inventory, (SpellcastingWand) stack2.getItem()), "spellTalisman", 176, 189 ); case TMGuis.ancientSpellTableGui: if(tile != null && tile instanceof TileEntityAncientSpellTable) return new GUIAncientSpellTable(player.inventory, (TileEntityAncientSpellTable) tile); case TMGuis.magicPathwayGuiNoKey: if(tile != null && tile instanceof TileEntityMagicPathway) return new GUIMagicPathway(player.inventory, (TileEntityMagicPathway) tile, new ContainerMagicPathwayBlocked(player.inventory, (TileEntityMagicPathway) tile)); case TMGuis.keystoneGui: ItemStack stack1 = player.getHeldItem(); if(stack1.itemID == TMItems.keyStone.itemID) return new GUIKeystone(stack1, player.inventory); case TMGuis.magicPathwayGuiKey: if(tile != null && tile instanceof TileEntityMagicPathway) return new GUIMagicPathway(player.inventory, (TileEntityMagicPathway) tile, new ContainerMagicPathwayOpen(player.inventory, (TileEntityMagicPathway) tile)); case TMGuis.itemTransferNetworkBaseGui: if(tile != null && tile instanceof TileEntityItemTransferNetworkBase) return new GuiItemTransferNetworkBase((TileEntityItemTransferNetworkBase) tile, player); case TMGuis.itemTransferNetworkPusherGui: if(tile != null && tile instanceof TileEntityItemPusher) return new GuiItemPusher((TileEntityItemPusher) tile, player); case TMGuis.itemTransferNetworkAccessGui: if(tile != null && tile instanceof TileEntityItemNetworkAccess) return new GuiItemNetworkAccess((TileEntityItemNetworkAccess) tile, player); case TMGuis.blockPlacer: ItemStack stack3 = player.getHeldItem(); if(stack3.itemID == TMItems.blockPlacer.itemID) return new TN3GUIContainer(player.inventory, new ContainerBlockPlacer(player.inventory, (ItemBlockPlacer) stack3.getItem()), "blockPlacer", 176, 130); } return null; } } Making inventories for Items is a little complicated, here is mine: Item: package Technomage3.both.Spell; import java.util.ArrayList; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import Technomage3.Core.Items.TN3ItemTool; import Technomage3.Core.Utils.StackUtil; import Technomage3.Core.Utils.TN3Utils; import Technomage3.both.TechnologicalMagic; import Technomage3.both.Interfaces.TMGuis; import Technomage3.both.Spell.talismans.SpellTargeter; public class SpellcastingWand extends TN3ItemTool { public SpellcastingWand(String realName, String unlocalizedName, CreativeTabs tab) { super(realName, unlocalizedName, tab); } public int getTargeter(ItemStack stack){ NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); return nbt.getInteger("Targeter"); } public int getSpell(ItemStack stack){ NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); return nbt.getInteger("Spell"); } public void setTargeter(ItemStack stack, int i){ NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); nbt.setInteger("Targeter", i); } public void setSpell(ItemStack stack, int i){ NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); nbt.setInteger("Spell", i); } public ItemStack[] getHeldItems(ItemStack stack){ ItemStack[] inv = new ItemStack[16]; NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); for(int i = 0 ; i < inv.length ; i++){ inv[i] = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("Stack" + i)); } return inv; } public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { ItemStack[] items = getHeldItems(stack); if(player.isSneaking()) { player.openGui(TechnologicalMagic.instance, TMGuis.spellcastingWandGui, world, (int) player.posX, (int) player.posY, (int) player.posZ); } else if(items[getSpell(stack)] != null && items[getTargeter(stack)] != null){ //Spell.cast(player, world, SpellUtils.getSpell(items[getSpell(stack)]), (SpellTargeter) items[getTargeter(stack)].getItem(), 1); TN3Utils.sendChat(player, "Targeter: " + getTargeter(stack) + ", Spell:" + getSpell(stack)); } return stack; } public void onCreated(ItemStack stack, World world, EntityPlayer player) { setSpell(stack, 0); setTargeter(stack, 0); } public void nextTargeter(ItemStack stack) { int target = getTargeter(stack); if(target == 7) target = 0; else target++; setTargeter(stack, target); } public void previousTargeter(ItemStack stack) { int target = getTargeter(stack); if(target == 0) target = 7; else target--; setTargeter(stack, target); } public void nextSpell(ItemStack stack) { int target = getSpell(stack); if(target == 7) target = 0; else target++; setSpell(stack, target); } public void previousSpell(ItemStack stack) { int target = getSpell(stack); if(target == 0) target = 7; else target--; setSpell(stack, target); } } Container: package Technomage3.both.Interfaces.containers; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import Technomage3.Core.Utils.StackUtil; import Technomage3.both.Interfaces.GUIUtils; import Technomage3.both.Interfaces.TN3Container; import Technomage3.both.Interfaces.inventories.InventorySpellcastingWand; import Technomage3.both.Interfaces.slots.SlotSubclassOfItem; import Technomage3.both.Spell.ItemSpell; import Technomage3.both.Spell.SpellcastingWand; import Technomage3.both.Spell.talismans.SpellTargeter; public class ContainerSpellcastingWand extends TN3Container { private World world; public InventorySpellcastingWand input; ItemStack stack = null; EntityPlayer player = null; private int blockSlot; private SpellcastingWand item; public ContainerSpellcastingWand(InventoryPlayer iinventory, SpellcastingWand armor) { this.player = iinventory.player; this.world = player.worldObj; this.stack = iinventory.getCurrentItem(); this.blockSlot = iinventory.currentItem + 28; item = armor; input = new InventorySpellcastingWand(item, this); GUIUtils.addPlayerSlots(this, 8, 107, iinventory); for(int x = 0 ; x < 2 ; x++){ for(int y = 0 ; y < 4 ; y++){ this.addSlotToContainer(new SlotSubclassOfItem(input, 4*x + y, 32 + 18 * x, 16 + 18 * y, SpellTargeter.class)); } } for(int x = 0 ; x < 2 ; x++){ for(int y = 0 ; y < 4 ; y++){ this.addSlotToContainer(new SlotSubclassOfItem(input, 4*x + y + 8, 99 + 18 * x, 16 + 18 * y, ItemSpell.class)); } } if (!world.isRemote) { ItemStack[] stacks = item.getHeldItems(stack); for(int i = 0 ; i < stacks.length ; i++) this.input.setInventorySlotContents(i, stacks[i]); } this.onCraftMatrixChanged(this.input); } @Override public boolean canInteractWith(EntityPlayer entityplayer) { return input.isUseableByPlayer(entityplayer); } public void onContainerClosed(EntityPlayer par1EntityPlayer) { if (!this.world.isRemote) { for(int i = 0 ; i < input.getSizeInventory() ; i++){ ItemStack var3 = this.input.getStackInSlotOnClosing(i); if (var3 != null) { NBTTagCompound var4 = new NBTTagCompound(); var3.writeToNBT(var4); StackUtil.getOrCreateNbtData(stack).setCompoundTag("Stack" + i, var4); } else { StackUtil.getOrCreateNbtData(stack).setCompoundTag("Stack" + i, new NBTTagCompound()); } if (this.player == null) { return; } if (this.player.getHeldItem() != null && this.player.getHeldItem().isItemEqual(this.stack)) { this.player.setCurrentItemOrArmor(0, this.stack); } this.player.inventory.onInventoryChanged(); } } } @Override public ItemStack transferStackInSlot(EntityPlayer player, int i){ return null; } } Inventory: package Technomage3.both.Interfaces.inventories; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import Technomage3.both.Spell.ItemSpell; import Technomage3.both.Spell.SpellcastingWand; import Technomage3.both.Spell.talismans.SpellTargeter; public class InventorySpellcastingWand implements IInventory { public ItemStack[] inv; private Container container; private SpellcastingWand item; public InventorySpellcastingWand(SpellcastingWand item, Container cont){ this.item = item; container = cont; inv = new ItemStack[16]; } @Override public int getSizeInventory() { return 16; } @Override public ItemStack getStackInSlot(int i) { return inv[i]; } @Override public ItemStack decrStackSize(int i, int j) { if (this.inv[i] != null) { ItemStack var3; if (this.inv[i].stackSize <= j) { var3 = this.inv[i]; this.inv[i] = null; this.container.onCraftMatrixChanged(this); return var3; } else { var3 = this.inv[i].splitStack(j); if (this.inv[i].stackSize == 0) { this.inv[i] = null; } this.container.onCraftMatrixChanged(this); return var3; } } else { return null; } } @Override public ItemStack getStackInSlotOnClosing(int i) { ItemStack s = getStackInSlot(i); setInventorySlotContents(i, null); return s; } @Override public void setInventorySlotContents(int i, ItemStack stack) { inv[i] = stack; this.container.onCraftMatrixChanged(this); } @Override public String getInvName() { return "Spell Talisman"; } @Override public boolean isInvNameLocalized() { return false; } @Override public int getInventoryStackLimit() { return 1; } @Override public void onInventoryChanged() { } @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return true; } @Override public void openChest() { // TODO Auto-generated method stub } @Override public void closeChest() { // TODO Auto-generated method stub } @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { if(itemstack == null) return true; return i < 8 ? itemstack.getItem() instanceof SpellTargeter : itemstack.getItem() instanceof ItemSpell; } } Hope it helps. There is a lot of extra stuff. I dont't think you need to creat a seprate inventory, but it's a good idea. Quote Link to comment Share on other sites More sharing options...
clienthax Posted August 13, 2014 Share Posted August 13, 2014 if you just need it to be on the client side you can do Minecraft.getMinecraft().displayGuiScreen(new mygui()); Quote Link to comment Share on other sites More sharing options...
iLegendx98 Posted August 13, 2014 Author Share Posted August 13, 2014 Ok, I was missing a lot of methods in my classes. I re-wrote a lot of the code and I have got it working. Thanks for the help everyone Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.