Jump to content

Recommended Posts

Posted (edited)

I am currently working on a mod that requires me to know the LWGJL codes for keys on the keyboard. Luckily the Keyboard class has static fields that correspond to the keys of a QWERTY keyboard.  However, I am now trying to add international support and I cannot find an easy way to get codes for keys such as umlauts. I am currently doing it by printing the output of the getKeyCode() method in net.minecraft.client.settings.KeyBinding when a binding is changed in the controls gui, but this is impractical for anything more than a few codes. 

 

Does anyone know of an easier way to get these codes?

Edited by MrNerdy42
Posted

What are you trying to do?

Not "How do you intend to solve the problem" but  what is your goal?

 

From the end-user stand point what are you expecting? No code.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

Well, it works doesnt it? I always say "If it aint broke dont fix it" unless there is a more efficient way of doing it. Code can sometimes be tedious but every time you think you are having a rough time, think of the people who had to map out google maps. That took ages.

Posted

Well your code is broken isn't it?

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

Your solution is actually probably better than using hardcoded keycodes. Keys on different keyboard layouts can share keycodes despite actually being different characters (MC-7255). If you use the user input to tell you which keycode is what character, you will probably avoid some cross-layout problems.

Posted
16 hours ago, Draco18s said:

What are you trying to do?

Not "How do you intend to solve the problem" but  what is your goal?

 

From the end-user stand point what are you expecting? No code.

I am drawing a keyboard on  the screen to help visualize and fix key conflicts. When you hover over the keys on the screen, text pops up to show you what they key is bound to. To accomplish this, I just iterate through a list of keybindings  and search for ones that match the key code.

 

14 hours ago, Draco18s said:

Well your code is broken isn't it?

No, it's not broken. 

Posted
1 hour ago, MrNerdy42 said:

No, it's not broken. 

Well it's clearly not working in the desired manner. Ergo, something's wrong.

 

Now that your use-case is clear, an approach can be made.  Unfortunately I'm not savvy enough with the aspects involved to offer any insight or alternatives.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
3 minutes ago, Draco18s said:

Well it's clearly not working in the desired manner. Ergo, something's wrong.

 

Now that your use-case is clear, an approach can be made.  Unfortunately I'm not savvy enough with the aspects involved to offer any insight or alternatives.

Thanks for the effort anyway.

Posted (edited)
On 3/27/2017 at 11:38 AM, diesieben07 said:

Does Keyboard.getEventCharacter not do what you want?

If I understand correctly getEventCharacter returns the character that was pressed such as 'a' if i pressed the A key. I am looking for  an easy way to find the numerical codes for international keys other then pressing each one by one and printing the result of KeyBinding .getKeyCode(). Right now, however, it looks like this in the only way.

Edited by MrNerdy42
Posted
3 minutes ago, diesieben07 said:

Well... why? What do you need the key codes for?

I probably should have added this to my original post, but here's the link to the mod I'm on the Minecraft Forums: http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/2802980-1-10-2-keyboard-wizard-key-conflict-helper I use the codes to draw the keys on the screen, as well as change the current binding when the key is pressed.

Posted

I draw each key with a for loop that counts through the lwgjl ids:

for (int i=2; i<14; i++) {
		button = new GuiButton(this.currentId, (startX+rowPos*30), startY, 25, 20, translateKey(i));
		this.buttonList.add(button);
  		currentId++;
}

I use translateKey(int id), which is just a modified version of Keyboard.getKeyName(int id), to get the name of the key. The id is also used to with setKeyModifierAndCode

 

Posted

Plus, LWJGL doesn't support accented keys (had problems with the caron myself), so users shouldn't be able to assign those keys to keybinds in the first place. That key will either have a different keycode in LWJGL, ie. it will be mapped to something it supports, or it will fall back to the 0 - "dunno-what-this-is" keycode. If I remember correctly, minecraft keeps a keybind unchanged when one attempts to assign a 0 key to it.

Getting the layout of the current keyboard layout is very probably system-dependent and would require per-OS code along with either JNI or JNA.

Posted

I was able to  set a keybind to the umlauts on a QWERTZ keyboard, however this may be Minecraft's trickery not lwgjl. I guess I'll just have to dig deeper into the source to see what's going on there. 

Posted

Why would you need to iterate over hardware keys?

The best you can do, I think, is make a Map<Key, List<Keybind>> (Key being the identifier you use, int or whatever), initialize it for standard English keys on the keyboard (those that you are rendering in the current version, with empty lists), then add all KeyBinds you get from minecraft to this map, organized by the Key.

Afterwards, you iterate over the map's entries, and if you know where a key is (ie. it's a standard English one, like those that you are rendering already), you render it in the keyboard; and if you don't ie. it's a non-standard key, whatever it may be, you render it in an extra separated row below or above the keyboard, with its text being the one that you get from Minecraft in the way you are doing already, or you display the keycode as a raw value.

Not that I am stupid and there are probably better storage structures to use, but the general concept is fine I think.

Posted
26 minutes ago, HashtagShell said:

Why would you need to iterate over hardware keys?

The best you can do, I think, is make a Map<Key, List<Keybind>> (Key being the identifier you use, int or whatever), initialize it for standard English keys on the keyboard (those that you are rendering in the current version, with empty lists), then add all KeyBinds you get from minecraft to this map, organized by the Key.

Afterwards, you iterate over the map's entries, and if you know where a key is (ie. it's a standard English one, like those that you are rendering already), you render it in the keyboard; and if you don't ie. it's a non-standard key, whatever it may be, you render it in an extra separated row below or above the keyboard, with its text being the one that you get from Minecraft in the way you are doing already, or you display the keycode as a raw value.

Not that I am stupid and there are probably better storage structures to use, but the general concept is fine I think.

That's actually a great idea. This could also be a useful concept for sorting the unwieldy list of bindings on the left. The only flaw I can see is that the keys will not appear unless there is something already bound to it, which would require a trip to vanilla controls gui, but this is small. I think I will try to implement this as a sorting function first. Thanks a ton!

Posted

You can render the default english layout the way you are doing right now, iteratively, hardcoded-ly. they just won't have any actual keybinds attached to them. You could also use this further, rendering them a slightly darker shade of grey, making the important keys (assigned and/or conflicting) pop out.

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.