Jump to content

Help With International Key Codes


MrNerdy42

Recommended Posts

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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. 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

×
×
  • Create New...

Important Information

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