Skip to content

Commit 3f066c2

Browse files
authoredMay 5, 2025
[Keybinds] Fix TASmod keybinds resetting when restarting the game (#243)
- Adds a new event "EventOptionsInit" that fires just before the options load from the file.
2 parents 5a7055a + aa38832 commit 3f066c2

File tree

5 files changed

+43
-8
lines changed

5 files changed

+43
-8
lines changed
 

‎src/main/java/com/minecrafttas/mctcommon/KeybindManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,12 @@ public void onRunClientGameLoop(Minecraft mc) {
9292
* Register new keybind
9393
*
9494
* @param keybind Keybind to register
95+
* @param options
9596
*/
96-
public void registerKeybind(Keybind keybind) {
97+
public void registerKeybind(Keybind keybind, GameSettings options) {
9798
this.keybindings.add(keybind);
9899
KeyBinding keyBinding = keybind.vanillaKeyBinding;
99100

100-
// add category
101-
GameSettings options = Minecraft.getMinecraft().gameSettings;
102101
if (!AccessorKeyBinding.getCategoryOrder().containsKey(keybind.category))
103102
AccessorKeyBinding.getCategoryOrder().put(keybind.category, AccessorKeyBinding.getCategoryOrder().size() + 1);
104103

‎src/main/java/com/minecrafttas/mctcommon/events/EventClient.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.minecraft.client.entity.EntityPlayerSP;
99
import net.minecraft.client.gui.GuiScreen;
1010
import net.minecraft.client.network.NetHandlerPlayClient;
11+
import net.minecraft.client.settings.GameSettings;
1112

1213
/**
1314
* Contains all events fired on the client side
@@ -218,4 +219,16 @@ public static interface EventDisconnectClient extends EventBase {
218219
*/
219220
public void onDisconnectClient(Client client);
220221
}
222+
223+
/**
224+
* Fired just before the vanilla options are loaded from the file
225+
*/
226+
@FunctionalInterface
227+
public static interface EventOptionsInit extends EventBase {
228+
229+
/**
230+
* Fired just before the vanilla options are loaded from the file
231+
*/
232+
public void onOptionsInit(GameSettings options);
233+
}
221234
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.minecrafttas.mctcommon.mixin;
2+
3+
import org.spongepowered.asm.mixin.Mixin;
4+
import org.spongepowered.asm.mixin.injection.At;
5+
import org.spongepowered.asm.mixin.injection.Inject;
6+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
7+
8+
import com.minecrafttas.mctcommon.events.EventClient;
9+
import com.minecrafttas.mctcommon.events.EventListenerRegistry;
10+
11+
import net.minecraft.client.settings.GameSettings;
12+
13+
@Mixin(GameSettings.class)
14+
public class MixinGameSettings {
15+
16+
@Inject(method = "loadOptions", at = @At("HEAD"))
17+
public void events_loadOptions(CallbackInfo ci) {
18+
EventListenerRegistry.fireEvent(EventClient.EventOptionsInit.class, (GameSettings) (Object) this);
19+
}
20+
}

‎src/main/java/com/minecrafttas/tasmod/TASmodClient.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.minecrafttas.mctcommon.LanguageManager;
1717
import com.minecrafttas.mctcommon.events.EventClient.EventClientInit;
1818
import com.minecrafttas.mctcommon.events.EventClient.EventOpenGui;
19+
import com.minecrafttas.mctcommon.events.EventClient.EventOptionsInit;
1920
import com.minecrafttas.mctcommon.events.EventClient.EventPlayerJoinedClientSide;
2021
import com.minecrafttas.mctcommon.events.EventListenerRegistry;
2122
import com.minecrafttas.mctcommon.file.AbstractDataFile;
@@ -55,9 +56,10 @@
5556
import net.minecraft.client.gui.GuiMainMenu;
5657
import net.minecraft.client.gui.GuiScreen;
5758
import net.minecraft.client.multiplayer.ServerData;
59+
import net.minecraft.client.settings.GameSettings;
5860
import net.minecraft.server.MinecraftServer;
5961

60-
public class TASmodClient implements ClientModInitializer, EventClientInit, EventPlayerJoinedClientSide, EventOpenGui {
62+
public class TASmodClient implements ClientModInitializer, EventClientInit, EventPlayerJoinedClientSide, EventOpenGui, EventOptionsInit {
6163

6264
public static VirtualInput virtual;
6365

@@ -200,7 +202,6 @@ private void registerEventListeners() {
200202

201203
@Override
202204
public void onClientInit(Minecraft mc) {
203-
registerKeybindings(mc);
204205
registerPlaybackMetadata(mc);
205206
registerSerialiserFlavors(mc);
206207
registerFileCommands();
@@ -308,8 +309,9 @@ private void initializeCustomPacketHandler() {
308309
}
309310
}
310311

311-
private void registerKeybindings(Minecraft mc) {
312-
Arrays.stream(TASmodKeybinds.valuesKeybind()).forEach(keybindManager::registerKeybind);
312+
@Override
313+
public void onOptionsInit(GameSettings options) {
314+
Arrays.stream(TASmodKeybinds.valuesKeybind()).forEach((keybind) -> keybindManager.registerKeybind(keybind, options));
313315
Arrays.stream(TASmodKeybinds.valuesVanillaKeybind()).forEach(VirtualKeybindings::registerBlockedKeyBinding);
314316
}
315317

‎src/main/resources/mctcommon.mixin.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"MixinMinecraft",
1313
"MixinNetHandlerPlayClient",
1414
"MixinWorldClient",
15-
"MixinLocale"
15+
"MixinLocale",
16+
"MixinGameSettings"
1617
]
1718
}

0 commit comments

Comments
 (0)