package com.irtimaled.bbor.client.keyboard; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.util.InputMappings; import org.lwjgl.glfw.GLFW; import java.util.HashSet; import java.util.Set; public class KeyListener { private static final Minecraft minecraft = Minecraft.getInstance(); private static long mainWindowHandle; private static final Set<Key> keys = new HashSet<>(); private static final Set<CustomKeyBinding> keyBindings = new HashSet<>(); public static final String Category = "Bounding Box Outline Reloaded"; public static void init() { mainWindowHandle = minecraft.mainWindow.getHandle(); GLFW.glfwSetKeyCallback(mainWindowHandle, KeyListener::onKeyEvent); } public static Key register(String description, String keyName) { InputMappings.Input input = InputMappings.getInputByName(keyName); CustomKeyBinding keyBinding = new CustomKeyBinding(description, input.getKeyCode()); keyBindings.add(keyBinding); Key key = keyBinding.getKey(); keys.add(key); return key; } private static void onKeyEvent(long windowHandle, int keyCode, int scanCode, int action, int modifiers) { boolean isPressed = action > 0; if (windowHandle == mainWindowHandle && minecraft.currentScreen == null && keyCode != -1 && !InputMappings.isKeyDown(mainWindowHandle, 292) && handleKeyEvent(keyCode, isPressed)) return; minecraft.keyboardListener.onKeyEvent(windowHandle, keyCode, scanCode, action, modifiers); } private static boolean handleKeyEvent(int keyCode, boolean isPressed) { for (Key key : keys) { if (key.handleKeyEvent(keyCode, isPressed)) { return true; } } return false; } public static KeyBinding[] keyBindings() { return keyBindings.toArray(new KeyBinding[0]); } }