Jump to content

[1.6.2] Overriding a GUI (pause menu, to be specific)


Recommended Posts

Posted

Hello,

 

Like the subject says, I'm working on a mod and it consists in modifying a GUI, the pause menu one, rearranging it, adding more buttons as well as some other features like a clock, for example. I used to modify the base class for it as jar modification was still a thing. Now to install a mod that requires jar modification (e.g. optifine currently) is a lot of work and I would like to use Forge to make things easier.

 

I have everything set except for the fact that I can't figure out how to override the GUI. The call to it is inside Minecraft.java and is somewhat hardcoded seeing that the 'Esc' key isn't really a keybind, the check if the Esc key is pressed is made there and, if so, display the screen.

 

I wanted to know if there is a way to override that call, for example, instead of instantiating GuiIngameMenu, instantiate Gui<nameOfMenu> or through events. Maybe catching the event for opening the GUI and when it occurs, close and open the one to override the original with. Or even pulling a key event and if the player was ingame and pressed the esc key, open the GUI.

 

I've been fiddling with this for a while and I can't seem to figure out a solution, could someone please help?

 

Thanks for your time,

 

~RGCV

Posted

Make a new class with a tickhandler

do something like this

@Override
    public void tickStart(EnumSet<TickType> type, Object... tickData) {
        Minecraft mc = Minecraft.getMinecraft();
        if (mc.currentScreen instanceof GuiIngameMenu) {
            mc.displayGuiScreen(/* Whatever GUI you want */);
        }
    }

Posted

Make a new class with a tickhandler

do something like this

@Override
    public void tickStart(EnumSet<TickType> type, Object... tickData) {
        Minecraft mc = Minecraft.getMinecraft();
        if (mc.currentScreen instanceof GuiIngameMenu) {
            mc.displayGuiScreen(/* Whatever GUI you want */);
        }
    }

 

I actually was expecting that to work but it doesn't. I've created a TickHandler class that implements the ITickHandler interface, took care of the overriding in there and registered in my Mod's class. As soon as I open the GUI, nothing happens, or should I say, the same GUI is still opening, not being overriden :\

 

I don't know why it doesn't work when I guess it should.

 

Thank you anyways!

Posted

Oh, nevermind, it worked, I took a better look in ITickHandler and actually noticed the ticks() method. Currently returning the tick types for client, world and server. If I'm doing something wrong, please don't hesitate on posting... Or killing me for being stupid.

 

Thanks for the help,

 

~RGCV

Posted

Considering your latest piece of code, you are on client side, so use only client ticks.

 

I figured as much but I was unsure, thank you for clarifying :)

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.