Jump to content

Recommended Posts

Posted

I'm going to be making an interactive game in a gui, but I need to be able to use the vanilla keybindings (like 'right', 'left' etc). I've tried detecting when one of those keys is pressed, but it's always false. Here's what I've tried:

 

public class GuiGame extends GuiScreen {

 

public GuiGame() {

 

}

 

@Override

public void updateScreen() {

                //Always false, doesn't print

if (mc.gameSettings.keyBindForward.isPressed()) {

System.out.println("Forward pressed");

}

}

 

@Override

public boolean doesGuiPauseGame() {

return false;

}

 

@Override

public void drawScreen(int arg0, int arg1, float arg2) {

drawDefaultBackground();

}

}

 

Is there something wrong with what I'm doing? Please help me if you know anything, I've been searching for 2 days!

Posted

protected void keyTyped(char chr, int id) {}

 

Look at GuiScreen - A LOT of helper methods there.

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

Posted

Look at GuiScreen - A LOT of helper methods there.

 

Just look... e.g isShiftKeyDown()

  • Thanks 1

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

Posted
Do you mean when someone is holding a key down?

 

Yes! But key input seems to cease to work when a GUI is open. So, say I wanted to move a button while the up key is pressed. How would I do that?

Posted

I think I may have found a solution to my problem. In the handleKeyboardInput method of guiscreen it does a test for when you press the fullscreen button (F11) in the gui. I assume that putting my key input in this method would be the 'proper' way?

Posted

there are other functions you can use too,

 

check the following classes

 

org.lwjgl.input.Keyboard;

org.lwjgl.input.Mouse;

 

they are both available to use

however the GUI uses them to so don't expect the events to work but you probably wont need them

 

Posted

I personally think you shouldn't go further than handleKeyboardInput, even that is really far (it's the top-generic method in mc Gui handling), going straight to lwjgl breaks the idea of using API/ready-code.

 

If handleKeyboardInput will work for you then it's a right way to do it, if not (the "But key input seems to cease to work when a GUI is open"). Other than that you can hook yourself into InputEvent.KeyInputEvent:

Minecraft mc = Minecraft.getMinecraft();
	if (key.isPressed() && FMLClientHandler.instance().getClient().inGameHasFocus)
	{
		if (//check if mc.currentScreen == YourGuiClass)
		{
			// set some static value to true inside YourGuiClass
		}
	}

Now you can use that static boolean inside your gui as a reassurance that key has ben clicked.

 

Obviously to set it back to false you can use KeyBinding to do so (idk,  there is probably method onUnpressed() or similar, idk, not in IDE).

 

This way (with event) you will stay with universal KeyBinding (that are settled inside options menu), not static ones.

 

EDIT: PS: I totally don't remember methods in KeyBinding right now, the ones above are jus tgeneral idea. Doing it is matter of looking there, :P

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

Posted

if you only want to know if a key has been pressed you can use

 

@Override
protected void keyTyped(char p_73869_1_, int p_73869_2_) {
	// TODO Auto-generated method stub
	super.keyTyped(p_73869_1_, p_73869_2_);
}

 

and you can also use

 

@Override
public void handleKeyboardInput() {
	// TODO Auto-generated method stub
	super.handleKeyboardInput();
}

 

but as far as i can see there are no function that test to see if a key is actually held down

 

KeyBinding  can be used to allow the client to set the keys to be used

KeyBinding.getIsKeyPressed() and KeyBinding.isPressed()

however these may not work while a gui is open ,

 

 

 

Posted
but as far as i can see there are no function that test to see if a key is actually held down

 

That would be the second function you posted :)

 

Other than that you can hook yourself into InputEvent.KeyInputEvent

 

Thanks, I will check it out :)

Posted

I think for this particular use case (a minigame in a GUI) it is okay to go up to something like the Keyboard class and use the isKeyDown() method or similar.  Since a minigame is basically intended to take over for a while it seems that it should be okay to intercept early on before processing through the Minecraft key processing.

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.