Jump to content

[SOLVED][1.7.2] Saving custom KeyBinding


Endyl

Recommended Posts

I have a KeyBinding registered with ClientRegistry, and it correctly shows up in the Controls menu and I can change it, and I can also use it in-game. The only thing missing is that when I restart the client, the KeyBinding is reset to the original key (other mc defined keys are saved).

 

How can I get my KeyBinding to persist its customized key association across client restarts? Any pointers to documentation or examples are welcome!

 

Thanks!

 

ps.:

A side question:

I use this key during RenderGameOverlayEvent to see whether I should render my custom HUD or not by using something similar:

 

private boolean shouldRender() {
while (KeyBindingHandler.toggleInfoScreenKey.isPressed()) {
	this.shouldShow = !this.shouldShow;
}
return this.shouldShow;
}

 

Is it a right approach to implement a toggle key, or should I do it differently?

Link to comment
Share on other sites

From my ClientProxy I call the following during FMLPreInitializationEvent:

 

toggleInfoScreenKey = new KeyBinding("infosanitymod.key.toggleinfoscreen", 23, "key.categories.misc");
ClientRegistry.registerKeyBinding(toggleInfoScreenKey);

 

This code is in a static method of KeyBindingHandler.

 

if(KeyBindingHandler.toggleInfoScreenKey.isPressed()) {
//Render stuffs
}

This doesn't work, as once it consumes all the keypresses it returns false every time. For this to work I would have to press the key for every RenderGameOverlayEvent.

Link to comment
Share on other sites

Are you sure you have set

KeyBinding.getKeyDescription

properly?

 

It might help debugging to put a breakpoint in GameSettings::saveOptions and ::loadOptions

 

            for (j = 0; j < i; ++j)
            {
                KeyBinding keybinding = akeybinding[j];
                printwriter.println("key_" + keybinding.getKeyDescription() + ":" + keybinding.getKeyCode());
            }

 

Then you should be able to see whether it is being saved and loaded (and if not, why not)

 

-TGG

Link to comment
Share on other sites

By stepping through saveOptions() and loadOptions() I have found the following:

 

In saveOptions() my KeyBinding is present with proper keyDescription and a keyCode different from the default one.

In loadOptions() the String representing my KeyBinding's setting in file is also present with the appropriate keyDescription and the nondefault keyCode value, however, akeybinding[] does not contain my KeyBinding instance, thus fails to load the saved value.

 

I have just double checked that the code creating the KeyBinding instance runs during FMLPreInitializationEvent. And as I have said it works perfectly except for, as it seems not the saving but the loading of the custom value.

 

What am I missing here? Or is it a bug in Forge 1024?

Link to comment
Share on other sites

Hi

 

I think it might be a bug, try raising it in the support forum.

 

It the meantime you might be able to work around it by calling

 

Minecraft.getMinecraft().gameSettings.loadOptions();

 

after your ClientRegistry.registerKeyBinding(...)

 

I haven't tried it, but it looks like it might work.

 

-TGG

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

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