Jump to content

Recommended Posts

Posted

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

 

Posted (edited)
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/

Posted (edited)

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

 

Posted

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.

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

Posted (edited)
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
Posted

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.

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

Posted
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.

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

 

Posted

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/

Posted

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)

Posted

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! xD 

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.

Announcements



×
×
  • Create New...

Important Information

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