Minecraft verarbeitet Benutzereingaben von Peripheriegeräten wie Tastatur und Maus mithilfe von Tastenbelegungen. Viele dieser Tastenbelegungen können über das Einstellungsmenü konfiguriert werden.
Mit Hilfe der Fabric-API kannst du deine eigenen benutzerdefinierten Tastenbelegungen erstellen und in deinem Mod darauf reagieren.
Tastenbelegungen existieren nur auf der Client-Seite. Das bedeutet, dass die Registrierung und die Reaktion auf Tastenbelegungen auf der Client-Seite erfolgen sollten. Hierfür kannst du den Client-Initialisierer verwenden.
Erstellen einer Tastenbelegung
Eine Tastenbelegung besteht aus zwei Teilen: der Belegung einer Taste und der Kategorie, zu der sie gehört.
Lasst uns mit der Erstellung einer Kategorie beginnen. Eine Kategorie definiert eine Gruppe von Tastenbelegungen, die zusammen im Einstellungsmenü angezeigt werden.
java
KeyMapping.Category CATEGORY = new KeyMapping.Category(
Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "custom_category")
);1
2
3
2
3
Als Nächstes können wir eine Tastenbelegung erstellen. Wir werden Fabric APIs KeyBindingHelper verwenden, um gleichzeitig unsere Tastenbelegung zu registrieren.
java
KeyMapping sendToChatKey = KeyBindingHelper.registerKeyBinding(
new KeyMapping(
"key.example-mod.send_to_chat", // The translation key for the key mapping.
InputConstants.Type.KEYSYM, // // The type of the keybinding; KEYSYM for keyboard, MOUSE for mouse.
GLFW.GLFW_KEY_J, // The GLFW keycode of the key.
CATEGORY // The category of the mapping.
));1
2
3
4
5
6
7
2
3
4
5
6
7
INFO
Beachte, dass die Namen der Tastentoken (GLFW.GLFW_KEY_*) von einem Standard-US-Layout ausgehen.
Das bedeutet, dass bei Verwendung eines AZERTY-Layouts das Drücken von A zu GLFW.GLFW_KEY_Q führt.
Klebrige Tasten können auch mit dem KeyBindingHelper erstellt werden, indem anstelle einer KeyMapping-Instanz eine ToggleKeyMapping-Instanz übergeben wird.
Sobald registriert, findest du Tastenbelegungen unter Optionen > Steuerung > Tastenbelegung.

Übersetzungen
Du musst sowohl für die Tastenbelegung als auch für die Kategorie Übersetzungen bereitstellen.
Der Übersetzungscode für den Kategorienamen hat die Form key.category.<namespace>.<path>. Der Schlüssel für die Schlüsselzuordnung ist derjenige, den du beim Erstellen der Schlüsselzuordnung angegeben hast.
Übersetzungen können manuell oder mithilfe der Datengenerierung hinzugefügt werden.
json
{
"key.category.example-mod.custom_category": "Example Mod Custom Category",
"key.example-mod.send_to_chat": "Send to Chat"
}1
2
3
4
2
3
4

Reagieren auf Tastenbelegungen
Jetzt, da wir eine Tastenbelegung haben, können wir mit einem Client-Tick-Ereignis darauf reagieren.
java
ClientTickEvents.END_CLIENT_TICK.register(client -> {
while (sendToChatKey.consumeClick()) {
if (client.player != null) {
client.player.displayClientMessage(Component.literal("Key Pressed!"), false);
}
}
});1
2
3
4
5
6
7
2
3
4
5
6
7
Dadurch wird jedes Mal, wenn die zugewiesene Taste gedrückt wird, "Key Pressed!" im Chat des Spiels angezeigt. Beachte, dass durch Gedrückthalten der Taste die Nachricht wiederholt im Chat angezeigt wird. Daher solltest du möglicherweise Schutzmaßnahmen implementieren, wenn diese Logik nur einmal ausgelöst werden soll.


