diff --git a/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/api/client/keybinding/v1/KeyBindingHelper.java b/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/api/client/keybinding/v1/KeyBindingHelper.java index 9569774f2..e87b50ff1 100644 --- a/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/api/client/keybinding/v1/KeyBindingHelper.java +++ b/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/api/client/keybinding/v1/KeyBindingHelper.java @@ -16,6 +16,8 @@ package net.fabricmc.fabric.api.client.keybinding.v1; +import java.util.Objects; + import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; @@ -23,14 +25,15 @@ import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl; import net.fabricmc.fabric.mixin.client.keybinding.KeyBindingAccessor; /** - * Helper for registering key bindings. - * - *

Helper class for {@link KeyBinding} for use by Fabric mods.

+ * Helper for registering {@link KeyBinding}s. * *
{@code
  * KeyBinding left = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.example.left", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_P, "key.category.example"));
  * KeyBinding right = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.example.right", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_U, "key.category.example"));
  * }
+ * + * @see KeyBinding + * @see net.minecraft.client.option.StickyKeyBinding */ public final class KeyBindingHelper { private KeyBindingHelper() { @@ -41,8 +44,10 @@ public final class KeyBindingHelper { * * @param keyBinding the keybinding * @return the keybinding itself + * @throws IllegalArgumentException when a key binding with the same ID is already registered */ public static KeyBinding registerKeyBinding(KeyBinding keyBinding) { + Objects.requireNonNull(keyBinding, "key binding cannot be null"); return KeyBindingRegistryImpl.registerKeyBinding(keyBinding); } diff --git a/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/impl/client/keybinding/KeyBindingRegistryImpl.java b/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/impl/client/keybinding/KeyBindingRegistryImpl.java index 55b37f5c2..0a0c09bc6 100644 --- a/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/impl/client/keybinding/KeyBindingRegistryImpl.java +++ b/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/impl/client/keybinding/KeyBindingRegistryImpl.java @@ -28,7 +28,7 @@ import net.minecraft.client.option.KeyBinding; import net.fabricmc.fabric.mixin.client.keybinding.KeyBindingAccessor; public final class KeyBindingRegistryImpl { - private static final List moddedKeyBindings = new ReferenceArrayList<>(); // ArrayList with identity based comparisons for contains/remove/indexOf etc., required for correctly handling duplicate keybinds + private static final List MODDED_KEY_BINDINGS = new ReferenceArrayList<>(); // ArrayList with identity based comparisons for contains/remove/indexOf etc., required for correctly handling duplicate keybinds private KeyBindingRegistryImpl() { } @@ -37,10 +37,6 @@ public final class KeyBindingRegistryImpl { return KeyBindingAccessor.fabric_getCategoryMap(); } - private static boolean hasCategory(String categoryTranslationKey) { - return getCategoryMap().containsKey(categoryTranslationKey); - } - public static boolean addCategory(String categoryTranslationKey) { Map map = getCategoryMap(); @@ -55,19 +51,18 @@ public final class KeyBindingRegistryImpl { } public static KeyBinding registerKeyBinding(KeyBinding binding) { - for (KeyBinding existingKeyBindings : moddedKeyBindings) { + for (KeyBinding existingKeyBindings : MODDED_KEY_BINDINGS) { if (existingKeyBindings == binding) { - throw null; + throw new IllegalArgumentException("Attempted to register a key binding twice: " + binding.getTranslationKey()); } else if (existingKeyBindings.getTranslationKey().equals(binding.getTranslationKey())) { - throw new RuntimeException("Attempted to register two key bindings with equal ID: " + binding.getTranslationKey() + "!"); + throw new IllegalArgumentException("Attempted to register two key bindings with equal ID: " + binding.getTranslationKey() + "!"); } } - if (!hasCategory(binding.getCategory())) { - addCategory(binding.getCategory()); - } - - return moddedKeyBindings.add(binding) ? binding : null; + // This will do nothing if the category already exists. + addCategory(binding.getCategory()); + MODDED_KEY_BINDINGS.add(binding); + return binding; } /** @@ -76,8 +71,8 @@ public final class KeyBindingRegistryImpl { */ public static KeyBinding[] process(KeyBinding[] keysAll) { List newKeysAll = Lists.newArrayList(keysAll); - newKeysAll.removeAll(moddedKeyBindings); - newKeysAll.addAll(moddedKeyBindings); + newKeysAll.removeAll(MODDED_KEY_BINDINGS); + newKeysAll.addAll(MODDED_KEY_BINDINGS); return newKeysAll.toArray(new KeyBinding[0]); } }