1
0
forked from Clones/Controlify

use identifiers for controller bindings for better modded support

This commit is contained in:
isXander
2023-02-01 14:22:13 +00:00
parent 0bb2423ecb
commit 4ea05b9dbf
2 changed files with 19 additions and 17 deletions

View File

@ -3,16 +3,17 @@ package dev.isxander.controlify.bindings;
import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.controller.Controller;
import net.minecraft.client.KeyMapping; import net.minecraft.client.KeyMapping;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
public class ControllerBinding { public class ControllerBinding {
private final Controller controller; private final Controller controller;
private Bind bind; private Bind bind;
private final Bind defaultBind; private final Bind defaultBind;
private final String id; private final ResourceLocation id;
private final Component name, description; private final Component name, description;
private final KeyMapping override; private final KeyMapping override;
public ControllerBinding(Controller controller, Bind defaultBind, String id, Component description, KeyMapping override) { public ControllerBinding(Controller controller, Bind defaultBind, ResourceLocation id, Component description, KeyMapping override) {
this.controller = controller; this.controller = controller;
this.bind = this.defaultBind = defaultBind; this.bind = this.defaultBind = defaultBind;
this.id = id; this.id = id;
@ -21,7 +22,7 @@ public class ControllerBinding {
this.override = override; this.override = override;
} }
public ControllerBinding(Controller controller, Bind defaultBind, String id, KeyMapping override) { public ControllerBinding(Controller controller, Bind defaultBind, ResourceLocation id, KeyMapping override) {
this(controller, defaultBind, id, Component.empty(), override); this(controller, defaultBind, id, Component.empty(), override);
} }
@ -49,7 +50,7 @@ public class ControllerBinding {
return defaultBind; return defaultBind;
} }
public String id() { public ResourceLocation id() {
return id; return id;
} }

View File

@ -6,6 +6,7 @@ import dev.isxander.controlify.event.ControlifyEvents;
import dev.isxander.controlify.mixins.KeyMappingAccessor; import dev.isxander.controlify.mixins.KeyMappingAccessor;
import net.minecraft.client.KeyMapping; import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -19,17 +20,17 @@ public class ControllerBindings {
public ControllerBindings(Controller controller) { public ControllerBindings(Controller controller) {
var options = Minecraft.getInstance().options; var options = Minecraft.getInstance().options;
JUMP = register(new ControllerBinding(controller, Bind.A_BUTTON, "jump", options.keyJump)); JUMP = register(new ControllerBinding(controller, Bind.A_BUTTON, new ResourceLocation("controlify", "jump"), options.keyJump));
SNEAK = register(new ControllerBinding(controller, Bind.RIGHT_STICK, "sneak", options.keyShift)); SNEAK = register(new ControllerBinding(controller, Bind.RIGHT_STICK, new ResourceLocation("controlify", "sneak"), options.keyShift));
ATTACK = register(new ControllerBinding(controller, Bind.RIGHT_TRIGGER, "attack", options.keyAttack)); ATTACK = register(new ControllerBinding(controller, Bind.RIGHT_TRIGGER, new ResourceLocation("controlify", "attack"), options.keyAttack));
USE = register(new ControllerBinding(controller, Bind.LEFT_TRIGGER, "use", options.keyUse)); USE = register(new ControllerBinding(controller, Bind.LEFT_TRIGGER, new ResourceLocation("controlify", "use"), options.keyUse));
SPRINT = register(new ControllerBinding(controller, Bind.LEFT_STICK, "sprint", options.keySprint)); SPRINT = register(new ControllerBinding(controller, Bind.LEFT_STICK, new ResourceLocation("controlify", "sprint"), options.keySprint));
NEXT_SLOT = register(new ControllerBinding(controller, Bind.RIGHT_BUMPER, "next_slot", null)); NEXT_SLOT = register(new ControllerBinding(controller, Bind.RIGHT_BUMPER, new ResourceLocation("controlify", "next_slot"), null));
PREV_SLOT = register(new ControllerBinding(controller, Bind.LEFT_BUMPER, "prev_slot", null)); PREV_SLOT = register(new ControllerBinding(controller, Bind.LEFT_BUMPER, new ResourceLocation("controlify", "prev_slot"), null));
PAUSE = register(new ControllerBinding(controller, Bind.START, "pause", null)); PAUSE = register(new ControllerBinding(controller, Bind.START, new ResourceLocation("controlify", "pause"), null));
INVENTORY = register(new ControllerBinding(controller, Bind.Y_BUTTON, "inventory", options.keyInventory)); INVENTORY = register(new ControllerBinding(controller, Bind.Y_BUTTON, new ResourceLocation("controlify", "inventory"), options.keyInventory));
CHANGE_PERSPECTIVE = register(new ControllerBinding(controller, Bind.BACK, "change_perspective", options.keyTogglePerspective)); CHANGE_PERSPECTIVE = register(new ControllerBinding(controller, Bind.BACK, new ResourceLocation("controlify", "change_perspective"), options.keyTogglePerspective));
OPEN_CHAT = register(new ControllerBinding(controller, Bind.DPAD_UP, "open_chat", options.keyChat)); OPEN_CHAT = register(new ControllerBinding(controller, Bind.DPAD_UP, new ResourceLocation("controlify", "open_chat"), options.keyChat));
ControlifyEvents.CONTROLLER_BIND_REGISTRY.invoker().onRegisterControllerBinds(this); ControlifyEvents.CONTROLLER_BIND_REGISTRY.invoker().onRegisterControllerBinds(this);
@ -48,14 +49,14 @@ public class ControllerBindings {
public JsonObject toJson() { public JsonObject toJson() {
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
for (var binding : registry()) { for (var binding : registry()) {
json.addProperty(binding.id(), binding.currentBind().identifier()); json.addProperty(binding.id().toString(), binding.currentBind().identifier());
} }
return json; return json;
} }
public void fromJson(JsonObject json) { public void fromJson(JsonObject json) {
for (var binding : registry()) { for (var binding : registry()) {
var bind = json.get(binding.id()); var bind = json.get(binding.id().toString());
if (bind == null) continue; if (bind == null) continue;
binding.setCurrentBind(Bind.fromIdentifier(bind.getAsString())); binding.setCurrentBind(Bind.fromIdentifier(bind.getAsString()));
} }