Skip to content

[Keybinds] Fix TASmod keybinds resetting when restarting the game #243

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions src/main/java/com/minecrafttas/mctcommon/KeybindManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,12 @@ public void onRunClientGameLoop(Minecraft mc) {
* Register new keybind
*
* @param keybind Keybind to register
* @param options
*/
public void registerKeybind(Keybind keybind) {
public void registerKeybind(Keybind keybind, GameSettings options) {
this.keybindings.add(keybind);
KeyBinding keyBinding = keybind.vanillaKeyBinding;

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

Expand Down
13 changes: 13 additions & 0 deletions src/main/java/com/minecrafttas/mctcommon/events/EventClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.network.NetHandlerPlayClient;
import net.minecraft.client.settings.GameSettings;

/**
* Contains all events fired on the client side
Expand Down Expand Up @@ -218,4 +219,16 @@ public static interface EventDisconnectClient extends EventBase {
*/
public void onDisconnectClient(Client client);
}

/**
* Fired just before the vanilla options are loaded from the file
*/
@FunctionalInterface
public static interface EventOptionsInit extends EventBase {

/**
* Fired just before the vanilla options are loaded from the file
*/
public void onOptionsInit(GameSettings options);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.minecrafttas.mctcommon.mixin;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import com.minecrafttas.mctcommon.events.EventClient;
import com.minecrafttas.mctcommon.events.EventListenerRegistry;

import net.minecraft.client.settings.GameSettings;

@Mixin(GameSettings.class)
public class MixinGameSettings {

@Inject(method = "loadOptions", at = @At("HEAD"))
public void events_loadOptions(CallbackInfo ci) {
EventListenerRegistry.fireEvent(EventClient.EventOptionsInit.class, (GameSettings) (Object) this);
}
}
10 changes: 6 additions & 4 deletions src/main/java/com/minecrafttas/tasmod/TASmodClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.minecrafttas.mctcommon.LanguageManager;
import com.minecrafttas.mctcommon.events.EventClient.EventClientInit;
import com.minecrafttas.mctcommon.events.EventClient.EventOpenGui;
import com.minecrafttas.mctcommon.events.EventClient.EventOptionsInit;
import com.minecrafttas.mctcommon.events.EventClient.EventPlayerJoinedClientSide;
import com.minecrafttas.mctcommon.events.EventListenerRegistry;
import com.minecrafttas.mctcommon.file.AbstractDataFile;
Expand Down Expand Up @@ -55,9 +56,10 @@
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.server.MinecraftServer;

public class TASmodClient implements ClientModInitializer, EventClientInit, EventPlayerJoinedClientSide, EventOpenGui {
public class TASmodClient implements ClientModInitializer, EventClientInit, EventPlayerJoinedClientSide, EventOpenGui, EventOptionsInit {

public static VirtualInput virtual;

Expand Down Expand Up @@ -200,7 +202,6 @@ private void registerEventListeners() {

@Override
public void onClientInit(Minecraft mc) {
registerKeybindings(mc);
registerPlaybackMetadata(mc);
registerSerialiserFlavors(mc);
registerFileCommands();
Expand Down Expand Up @@ -308,8 +309,9 @@ private void initializeCustomPacketHandler() {
}
}

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

Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/mctcommon.mixin.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"MixinMinecraft",
"MixinNetHandlerPlayClient",
"MixinWorldClient",
"MixinLocale"
"MixinLocale",
"MixinGameSettings"
]
}
Loading