Jump to content

Recommended Posts

Posted

Hi Everyone,

 

I am trying to put a series of buttons in the player hud where they can be clicked on after the player clicks the enable mouse key that I have registered using a keyhandler.

I already know how to add buttons to a regular gui but the hud seems different. Any ideas as to where to start?

 

I know that for a regular gui (lets say for a tile entity gui) you have to do the following to give it buttons

 

 

 

@SideOnly(Side.CLIENT)
public class ExampleGUI extends GuiScreen
{

    private int BUTTON_DONE_ID = 1; // YOU NEED TO GIVE YOUR BUTTON AN ID
   private TileEntityCustom customTE;

    private GuiButton doneBtn; // YOU NEED TO CREATE A VARIABLE FOR YOUR BUTTON
    
   //whether initGui() was called.
    private boolean wasInitialized = false;

    public ExampleGUI(TileEntityCustom custom){
        this.customTE = custom;
    }

    /**
     * Adds the buttons (and other controls) to the screen in question.
     */
    @Override
    public void initGui()
    {
    	this.buttonList.clear(); // YOU NEED TO CLEAR THE BUTTON LIST ON INIT
        this.doneBtn = new GuiButton(BUTTON_DONE_ID, 20, this.height - 40, I18n.format("Apply", new Object[0])); // YOU NEED TO CREATE THE BUTTON
        this.doneBtn.width = 160; // YOU NEED TO GIVE THE BUTTON A WIDTH
        
        
        this.buttonList.add(this.doneBtn); // YOU NEED TO ADD THE BUTTON TO THE BUTTON LIST
      
        
        //it seems like initGui() is called every time this.mc.displayGuiScreen() is used.
    	if(this.wasInitialized)
        	return;
        this.wasInitialized = true;
        
         }

    /**
     * Called when the screen is unloaded. Used to disable keyboard repeat events
     */
    @Override
    public void onGuiClosed(){
    	
    }

    /**
     * Called from the main game loop to update the screen.
     */
    @Override
    public void updateScreen(){
         }

    @Override
    protected void actionPerformed(GuiButton button){
        if (button.enabled){
            if (button.id == BUTTON_DONE_ID){ // YOU NEED TO MAKE THE BUTTON DO STUFF
            	//DO STUFF YOU WANT WHEN BUTTON IS CLICKED
            }
         }
    }
    
    @Override
    protected void mouseClicked(int x, int y, int event){
        if(event != 0){
            super.mouseClicked(x, y, event);
        }
    }
    
    @Override
    protected void mouseMovedOrUp(int mouseX, int mouseY, int event){
        if (event != 0){
            super.mouseMovedOrUp(mouseX, mouseY, event);
        }
    }
    
    @Override
protected void keyTyped(char key, int event){
    	super.keyTyped(key, event);
    	}

    /**
     * Draws the screen and all the components in it.
     */
    @Override
    public void drawScreen(int mouseX, int mouseY, float p_73863_3_){
        //DRAW YOUR GUI
      }
}

 

 

 

But to render anything in the player hud I know you have to render everything using this event.

@SubscribeEvent(priority=EventPriority.NORMAL)
public void RenderBattleGUI(RenderGameOverlayEvent.Post event) {
}

 

I cant seem to figure it out. I want the button to render in the hud the whole time the player is in survival mode and only when my custom key is pressed that enables the mouse can the player "click" on the button to activate it. I understand the mouse stuff i think but the buttons are giving me trouble.

Posted

Should buttons be clickable when e.g looking at inventory? Or when book is opened, or even in-game menu?

 

Or just when you are on main in-game screen (the one with cross-hairs and health and all other stuff)?

1.7.10 is no longer supported by forge, you are on your own.

Posted

Since buttons are per-client you can simply store them in static field, since you are placing them in GuiIngame screen you can do something like this:

 

public class EventsClient
{
private List<GuiButton> screenButtons = new ArrayList<GuiButton>();
private int x = 0;
private int y = 0;

public EventsClient()
{
	this.screenButtons.add(new GuiButton(...));
	...and so on, add them.
}

@SubscribeEvent
public void onRenderOvelay(RenderGameOverlayEvent.Pre event)
{
	for (int k = 0; k < this.screenButtons.size(); ++k)
		((GuiButton)this.screenButtons.get(k)).drawButton(Minecraft.getMinecraft(), x, y);
}

@SubscribeEvent
public void onMouseEvent(MouseEvent event)
{
	this.x = event.x;
	this.y = event.y;
	if (check that you are in screen == null - which mean you are in GuiIngame)
	if (check that mouse has been clicked)
	if (check clicked x/y and test if there is a button in that position - positions you can get from you screenButtons)
	//successfully clicked on button, now perform some action here - yes, literally here in this event.
}

 

Basically you update x/y all the time in every screen possible, and when you enable your mouse (you said you did that, I have no idea how that affects rest of game, isn't it breaking other things?) you can start "clicking" on them. Setting x/y in MouseEvent allows your buttons to receive info that mouse is over them (since RenderGameOverlayEvent doesn't have mouse pos on it's own) to display them highlighted. Then if clicked pos is a button, perform action.

 

EDIT: NOTE:

What you are doing is VERY bad and seems very uncomfortable, cosider using keybindings with some shift-activation (or other button ofc).

 

Disclaimer: This is totally "it SHOULD work", not "it WILL work".

 

Note 2: You can save mouse position of last time when you enabled it (seems useful to me, my guess is you are doing spell-buttons, ay?)

1.7.10 is no longer supported by forge, you are on your own.

Posted

Why yes I am making spell buttons and this seemed like an idea i would try out. Hopefully it doesnt create some weird havock haha thanks for your idea ill try it out. And ya the shift-activation is what I want.

Posted

I have tried out some stuff and turns out my idea probably isnt the best approach I dont think as it is pretty complex and breaks alot of stuff, Has anyone implemented spell buttons before and if so what approach did you take?

Posted

What do you mean by 'it is pretty complex and breaks alot of stuff'? Need some specification for that part.

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

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

    • When I first heard about Bitcoin back in 2018, I was skeptical. The idea of a decentralized, digital currency seemed too good to be true. But I was intrigued as I learned more about the technology behind it and its potential. I started small, investing just a few hundred dollars, dipping my toes into the cryptocurrency waters. At first, it was exhilarating to watch the value of my investment grow exponentially. I felt like I was part of the future, an early adopter of this revolutionary new asset. But that euphoria was short-lived. One day, I logged into my digital wallet only to find it empty - my Bitcoin had vanished without a trace. It turned out that the online exchange I had trusted had been hacked, and my funds were stolen. I was devastated, both financially and emotionally. All the potential I had seen in Bitcoin was tainted by the harsh reality that with decentralization came a lack of regulation and oversight. My hard-earned money was gone, lost to the ether of the digital world. This experience taught me a painful lesson about the price of trust in the uncharted territory of cryptocurrency. While the technology holds incredible promise, the risks can be catastrophic if you don't approach it with extreme caution. My Bitcoin investment gamble had failed, and I was left to pick up the pieces, wiser but poorer for having placed my faith in the wrong hands. My sincere appreciation goes to MUYERN TRUST HACKER. You are my hero in recovering my lost funds. Send a direct m a i l ( muyerntrusted ( @ ) mail-me ( . )c o m ) or message on whats app : + 1 ( 4-4-0 ) ( 3 -3 -5 ) ( 0-2-0-5 )
    • You could try posting a log (if there is no log at all, it may be the launcher you are using, the FAQ may have info on how to enable the log) as described in the FAQ, however this will probably need to be reported to/remedied by the mod author.
    • So me and a couple of friends are playing with a shitpost mod pack and one of the mods in the pack is corail tombstone and for some reason there is a problem with it, where on death to fire the player will get kicked out of the server and the tombstone will not spawn basically deleting an entire inventory, it doesn't matter what type of fire it is, whether it's from vanilla fire/lava, or from modded fire like ice&fire/lycanites and it's common enough to where everyone on the server has experienced at least once or twice and it doesn't give any crash log. a solution to this would be much appreciated thank you!
    • It is 1.12.2 - I have no idea if there is a 1.12 pack
  • Topics

×
×
  • Create New...

Important Information

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