Posted March 7, 20178 yr Hi, I'm having a problem with displaying a GUI Screen when I right click a block. Whenever I right click the block the game crashes and I get a null pointer exception: Quote Description: Unexpected error java.lang.NullPointerException: Unexpected error at net.minecraftforge.fml.common.network.NetworkRegistry.getLocalGuiContainer(NetworkRegistry.java:273) at net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:110) at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2729) at net.tekkcraft.factions.blocks.BlockCore.onBlockActivated(BlockCore.java:64) at net.minecraft.client.multiplayer.PlayerControllerMP.processRightClickBlock(PlayerControllerMP.java:442) at net.minecraft.client.Minecraft.rightClickMouse(Minecraft.java:1603) at net.minecraft.client.Minecraft.processKeyBinds(Minecraft.java:2281) at net.minecraft.client.Minecraft.runTickKeyboard(Minecraft.java:2058) at net.minecraft.client.Minecraft.runTick(Minecraft.java:1846) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1118) at net.minecraft.client.Minecraft.run(Minecraft.java:406) at net.minecraft.client.main.Main.main(Main.java:118) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) at GradleStart.main(GradleStart.java:26) I've had a good look at my code and I can't see what's wrong. Can anyone help? The event in the BlockCore.java: @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, @Nullable ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { System.out.println("Block Right Clicked"); playerIn.openGui(Factions.instance, GuiHandler.MOD_TILE_ENTITY_GUI, worldIn, pos.getX(), pos.getY(), pos.getZ()); return true; } The GUI Handler: public class GuiHandler implements IGuiHandler { public static final int MOD_TILE_ENTITY_GUI = 0; @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if (ID == MOD_TILE_ENTITY_GUI) return new FactionCoreGuiScreen(); return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if (ID == MOD_TILE_ENTITY_GUI) return new FactionCoreGuiScreen(); return null; } } FactionCoreGuiScreen: public class FactionCoreGuiScreen extends GuiScreen { @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { this.drawDefaultBackground(); super.drawScreen(mouseX, mouseY, partialTicks); } @Override public boolean doesGuiPauseGame() { return false; } @Override public void initGui() { } @Override protected void actionPerformed(GuiButton button) throws IOException { }
March 7, 20178 yr 9 minutes ago, jamiemac262 said: @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if (ID == MOD_TILE_ENTITY_GUI) return new FactionCoreGuiScreen(); return null; } You can only return a Container fromIGuiHandler#getServerGuiElement, and you are returning a GuiScreen. A few other things to check: did you register your IGuiHandler? Is your @Mod.Instance set up correctly? Edited March 7, 20178 yr by larsgerrits Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
March 7, 20178 yr A NullPointerException means that something is null where it shouldn't be. Use printlns or the debugger to check the values of all the variables you pass to EntityPlayer#openGui, and see which is null. Edit: scratch that, I read wrong. The null value happens further on, probably as a result of the problem larsgerrits pointed out. Edited March 7, 20178 yr by Jay Avery
March 7, 20178 yr Author 43 minutes ago, larsgerrits said: You can only return a Container fromIGuiHandler#getServerGuiElement, and you are returning a GuiScreen. A few other things to check: did you register your IGuiHandler? Is your @Mod.Instance set up correctly? I changed getServerGuiElement to just return null..... tested the mod and got the same problem. I have no idea what I'm meant to do here IGuiHandler is registered in the common proxy: public void init(FMLInitializationEvent e){ NetworkRegistry.INSTANCE.registerGuiHandler(Factions.instance, new GuiHandler()); } is that correct? also my @Mod.Instance should be find as I've used it in other parts of the mod @Mod.Instance(MODID) public static Factions instance; It looks like the problem might be what you suggested, I just don't know how to fix it thanks Jamie
March 7, 20178 yr No in your gui handler serverside you need to return your mod CONTAINER. Apparently I'm addicted to these forums and can't help but read all the posts. So if I somehow help you, please click the "Like This" button, it helps.
March 7, 20178 yr Author 55 minutes ago, Jay Avery said: A NullPointerException means that something is null where it shouldn't be. Use printlns or the debugger to check the values of all the variables you pass to EntityPlayer#openGui, and see which is null. Edit: scratch that, I read wrong. The null value happens further on, probably as a result of the problem larsgerrits pointed out. I added println's to the 2 GuiHandler functions and it turns out the game is crashing before it calls either of the functions so it's not the getServerGUIElement
March 7, 20178 yr Author Quote No in your gui handler serverside you need to return your mod CONTAINER. wait... do I NEED a container to open a GUI? It's just going to be text and buttons, not storing any items...... (or have I misunderstood "container")? Edited March 7, 20178 yr by jamiemac262 wrong quote
March 7, 20178 yr Yes you do need a container. Go look at tutorial for that. Apparently I'm addicted to these forums and can't help but read all the posts. So if I somehow help you, please click the "Like This" button, it helps.
March 7, 20178 yr If you only want to have a gui, only call EntityPlayer#openGui on the client side (world.isRemote). Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
March 7, 20178 yr Author 3 minutes ago, larsgerrits said: If you only want to have a gui, only call EntityPlayer#openGui on the client side (world.isRemote). my god it was actually in the damn tutorial! I must have overlooked that at least a dozen times! https://bedrockminer.jimdo.com/modding-tutorials/advanced-modding/gui-screen/
March 7, 20178 yr Just now, jamiemac262 said: https://bedrockminer.jimdo.com/modding-tutorials/advanced-modding/gui-screen/ Eyy! I use those too! Even tho their outdated, they are a great help. Wish he could continue them though Apparently I'm addicted to these forums and can't help but read all the posts. So if I somehow help you, please click the "Like This" button, it helps.
March 7, 20178 yr Author Just now, Leomelonseeds said: Eyy! I use those too! Even tho their outdated, they are a great help. Wish he could continue them though indeed.... I'll bet my problem is something that's changed since this was written
March 7, 20178 yr Just now, jamiemac262 said: nope, ignore me, that didn't fix it Post your code -.- Apparently I'm addicted to these forums and can't help but read all the posts. So if I somehow help you, please click the "Like This" button, it helps.
March 7, 20178 yr Author 2 minutes ago, Leomelonseeds said: Post your code -.- here's what I've changed so far I can only see "Block Right Clicked" in the logs, that's where it crashes The right click event: public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, @Nullable ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { System.out.println("Block Right Clicked"); if(worldIn.isRemote) { playerIn.openGui(Factions.instance, GuiHandler.MOD_TILE_ENTITY_GUI, worldIn, pos.getX(), pos.getY(), pos.getZ()); } return true; } The GuiHandler: @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { System.out.println("GetServerGUI Will return null"); return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { System.out.println("clientGUI"); if (ID == MOD_TILE_ENTITY_GUI) return new FactionCoreGuiScreen(); else System.out.println("clientGUI null"); return null; }
March 8, 20178 yr Things that could be null down the line: the player variable, which is highly unlikely if you are the one opening the GUI, or the IGuiHandler on the client side. If you override CommonProxy#init in the ClientProxy, be sure to call the super method so it actually registers on the client side. Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
March 8, 20178 yr Author hold up... I think the tutorial I followed when setting up proxies missed a step 0.o override commonProxy.init? CommonProxy doesn't extend anything lol (I looked at bedrockminer's tutorial and noticed he has a "serverProxy" that extends Common proxy... I'll follow his proxy tutorial now and make changes)
March 8, 20178 yr Author I fixed it! thanks guys, The problem was the way I had set up my proxies Not only did I not have all the classes and methods I needed, but I also wasn't calling them in the main class -.- The client no longer crashes!
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.