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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • @Tsuk1 Also, new note, you can use blockbench to make the custom item model for when it is not on the head.   EDIT: Funny story, I am making a mod similar to yours! Mine is called NorseMC.
    • @Nood_dev Could you send a screenshot of your weapon code? Here is the one I made (for a dagger): The specific UUID does not matter, just that it is the same every time, which is why UUID#randomUUID does not work public class DaggerItem extends TieredItem implements Vanishable { protected static final double REACH_MODIFIER = -1.5D; protected final Multimap<Attribute, AttributeModifier> defaultModifiers; protected final UUID BASE_ATTACK_REACH_UUID = UUID.fromString("6fe75b5c-9d1b-4e83-9eea-a1d5a94e8dd5") public DaggerItem(Tier pTier, int pAttackDamageModifier, float pAttackSpeedModifier, Properties pProperties) { super(pTier, pAttackDamageModifier, pAttackSpeedModifier, pProperties); this.attackDamage = (float) pAttackDamageModifier + pTier.getAttackDamageBonus(); ImmutableMultimap.Builder<Attribute, AttributeModifier> builder = ImmutableMultimap.builder(); builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", this.attackDamage, AttributeModifier.Operation.ADDITION)); builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", pAttackSpeedModifier, AttributeModifier.Operation.ADDITION)); // THE ONE YOU WANT: builder.put(ForgeMod.ENTITY_REACH.get(), new AttributeModifier(BASE_ATTACK_REACH_UUID, "Weapon modifier", REACH_MODIFIER, AttributeModifier.Operation.ADDITION)); this.defaultModifiers = builder.build(); } @Override public Multimap<Attribute, AttributeModifier> getDefaultAttributeModifiers(EquipmentSlot pEquipmentSlot) { return pEquipmentSlot == EquipmentSlot.MAINHAND ? this.defaultModifiers : super.getDefaultAttributeModifiers(pEquipmentSlot); } }
    • https://images.app.goo.gl/1PxFKdxByTgkxvSu6
    • That's what we'll try out. I could never figure out how to recreate the crash, so I'll just have to wait and see.
    • Ok, I updated to the latest version and now the models are visible, the problem now is that the glowing eyes are not rendered nor any texture I render there when using shaders, even using the default Minecraft eyes RenderType, I use entityTranslucent and entityCutout, but it still won't render. Something I noticed when using shaders is that a texture, instead of appearing at the world position, would appear somewhere on the screen, following a curved path, it was strange, I haven't been able to reproduce it again. I thought it could be that since I render the texture in the AFTER ENTITIES stage which is posted after the batches used for entity rendering are finished, maybe that was the reason why the render types were not being drawn correctly, so I tried injecting code before finishing the batches but it still didn't work, plus the model was invisible when using shaders, there was a bug where if I look at the model from above it is visible but if I look at it from below it is invisible. So in summary, models are now visible but glowing eyes and textures are not rendered, that hasn't changed.
  • Topics

×
×
  • Create New...

Important Information

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