Skip to content

Commit 05fccb0

Browse files
committed
Port fabric-key-mapping-api-v1
1 parent 8d2ba2b commit 05fccb0

6 files changed

Lines changed: 27 additions & 53 deletions

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package net.fabricmc.fabric.impl.client.keymapping;
2+
3+
import net.neoforged.bus.api.IEventBus;
4+
import net.neoforged.fml.ModLoadingContext;
5+
import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;
6+
7+
import net.fabricmc.api.ClientModInitializer;
8+
9+
public class FabricKeyMappingImpl implements ClientModInitializer {
10+
@Override
11+
public void onInitializeClient() {
12+
IEventBus bus = ModLoadingContext.get().getActiveContainer().getEventBus();
13+
bus.addListener(RegisterKeyMappingsEvent.class, KeyMappingRegistryImpl::process);
14+
}
15+
}

fabric-key-mapping-api-v1/src/client/java/net/fabricmc/fabric/impl/client/keymapping/KeyMappingRegistryImpl.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@
1818

1919
import java.util.List;
2020

21-
import com.google.common.collect.Lists;
2221
import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
22+
import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;
2323

2424
import net.minecraft.client.KeyMapping;
25-
import net.minecraft.client.Minecraft;
2625

2726
public final class KeyMappingRegistryImpl {
2827
private static final List<KeyMapping> MODDED_KEY_BINDINGS = new ReferenceArrayList<>(); // ArrayList with identity based comparisons for contains/remove/indexOf etc., required for correctly handling duplicate keybinds
28+
private static boolean processed;
2929

3030
private KeyMappingRegistryImpl() {
3131
}
3232

3333
public static KeyMapping registerKeyMapping(KeyMapping binding) {
34-
if (Minecraft.getInstance().options != null) {
34+
if (processed) {
3535
throw new IllegalStateException("GameOptions has already been initialised");
3636
}
3737

@@ -51,10 +51,8 @@ public static KeyMapping registerKeyMapping(KeyMapping binding) {
5151
* Processes the keymappings array for our modded ones by first removing existing modded keymappings and readding them,
5252
* we can make sure that there are no duplicates this way.
5353
*/
54-
public static KeyMapping[] process(KeyMapping[] keysAll) {
55-
List<KeyMapping> newKeysAll = Lists.newArrayList(keysAll);
56-
newKeysAll.removeAll(MODDED_KEY_BINDINGS);
57-
newKeysAll.addAll(MODDED_KEY_BINDINGS);
58-
return newKeysAll.toArray(new KeyMapping[0]);
54+
public static void process(RegisterKeyMappingsEvent event) {
55+
MODDED_KEY_BINDINGS.forEach(event::register);
56+
processed = true;
5957
}
6058
}

fabric-key-mapping-api-v1/src/client/java/net/fabricmc/fabric/mixin/client/keymapping/OptionsMixin.java

Lines changed: 0 additions & 43 deletions
This file was deleted.

fabric-key-mapping-api-v1/src/client/resources/fabric-key-mapping-api-v1.mixins.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
"package": "net.fabricmc.fabric.mixin.client.keymapping",
44
"compatibilityLevel": "JAVA_25",
55
"client": [
6-
"OptionsMixin",
76
"KeyMappingAccessor",
87
"KeyMappingCategoryMixin"
98
],

fabric-key-mapping-api-v1/src/client/resources/fabric.mod.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,10 @@
2424
],
2525
"custom": {
2626
"fabric-api:module-lifecycle": "stable"
27+
},
28+
"entrypoints": {
29+
"client": [
30+
"net.fabricmc.fabric.impl.client.keymapping.FabricKeyMappingImpl"
31+
]
2732
}
2833
}

settings.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ include("fabric-debug-api-v1")
5454
include("fabric-game-rule-api-v1")
5555
include("fabric-gametest-api-v1")
5656
//include 'fabric-item-api-v1'
57-
//include 'fabric-key-mapping-api-v1'
57+
include("fabric-key-mapping-api-v1")
5858
include("fabric-lifecycle-events-v1")
5959
include("fabric-loot-api-v3")
6060
//include 'fabric-menu-api-v1'

0 commit comments

Comments
 (0)