Jump to content

Recommended Posts

Posted

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?

Posted

Code for your key binding?

 

Also you could just do:

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

 

You will have to tweak that so that it truly is a toggle.

Kain

Posted

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.

Posted

One way you could make it a toggle is use KeyInputEvent. It's a FML event so register it in FMLCommonHandler.instance().bus()

 

I'm not so sure what's wrong with the saving thing, I'll look into that.

 

Kain

Posted

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

Posted

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?

Posted

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

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.