Jump to content

Recommended Posts

Posted

I want to make a simple mod that enables movement while in an inventory or other ui element. However, I'm completely lost on how to go about doing it.

 

I was digging around a decompiled version of Minecraft and I can't even find how they handle their ui.

 

Thanks for any help to get me started on this.

Posted

So firstly there are two types of GUI in Minecraft. There are those that directly extend the Gui class and then there are those that extend the GuiScreen class. As far as I know all the ones that allow movement (such as the main HUD, or the debug info gui) extend the Gui class not the GuiScreen class. Things like the GuiContainer used by inventories extend GuiScreen. 

 

The main idea with the GuiScreen class is that it intercepts the mouse and keyboard input and does Gui actions (like running code when a button is clicked).

 

I think it might be very hard to do what you're wanting to do. In particular there is the following code in the Minecraft#runTick() method which would be a problem:

        if (this.currentScreen == null || this.currentScreen.allowUserInput)
        {
            this.profiler.endStartSection("mouse");
            this.runTickMouse();

            if (this.leftClickCounter > 0)
            {
                --this.leftClickCounter;
            }

            this.profiler.endStartSection("keyboard");
            this.runTickKeyboard();
        }

 

Now, a regular Gui (like main HUD) is not a screen so it would return currentScreen as null (and therefore update the input). But a GuiScreen like an inventory is going to intercept the input.

 

It might still be possible though. I think there are two approaches:

1) Create a Gui that tries to recreate what an inventory should look like. So for example, if you just want to show something that looks like an inventory while still moving you would just need to draw the inventory stuff but do it in a Gui, not the regular GuiScreen.

2) Create a Gui screen that tries to send the mouse and keyboard info it is getting back to the main game. There is a handleInput() method that calls handleMouse() and handleKeyboard(). You'd have to look at those methods to see if you can push the information back to the main game.

 

Anyway, the point is that the inventory type GUIs are intended to intercept the user input and it might be tricky to work around that.

 

What exactly are you trying to do?

 

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted

Ok, thanks a bunch. I ended up creating a GUI that doesn't use GuiScreen (like the scoreboard kind of), it works! However it's JANKY.

 

I need to find a way to stop the regular built in GuiScreen inventory from rendering when I use the standard inventory bind. I can't think of an elegant way of doing this. Currently I just have my own GUI bound to a different key.

 

It's not exactly like my original idea, it still doesn't allow movement in other GUIs that use GuiScreen. However, it's progress and for that I thank you. If it gets to a releasable state I will have your name in the mcmod.info.

Posted
1 hour ago, TheDoomBringer said:

Ok, thanks a bunch. I ended up creating a GUI that doesn't use GuiScreen (like the scoreboard kind of), it works! However it's JANKY.

 

I need to find a way to stop the regular built in GuiScreen inventory from rendering when I use the standard inventory bind. I can't think of an elegant way of doing this. Currently I just have my own GUI bound to a different key.

 

It's not exactly like my original idea, it still doesn't allow movement in other GUIs that use GuiScreen. However, it's progress and for that I thank you. If it gets to a releasable state I will have your name in the mcmod.info.

You can intercept any Gui opening by handling the GuiOpenEvent. You can check if the one that is opening in the event is the inventory and you can prevent it from opening, or replace it with your own. 

 

Even it isn't your original idea, it is great when modders adapt their ideas to make them easier to implement. 

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

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.