Jump to content

Trying to open GUI causes game to crash


jamiemac262

Recommended Posts

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 {
    }

 

Link to comment
Share on other sites

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 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/

Link to comment
Share on other sites

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 by Jay Avery
Link to comment
Share on other sites

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 xD 

 

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

 

Link to comment
Share on other sites

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 :/ 

Link to comment
Share on other sites

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 by jamiemac262
wrong quote
Link to comment
Share on other sites

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/

Link to comment
Share on other sites

Just now, jamiemac262 said:

Eyy! I use those too! Even tho their outdated, they are a great help. Wish he could continue them though :(

  • Like 1

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.

Link to comment
Share on other sites

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;
    }

 

Link to comment
Share on other sites

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/

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

Important Information

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