]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/keyboard/KeyListener.java
Update for Forge 1.13.2
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / keyboard / KeyListener.java
1 package com.irtimaled.bbor.client.keyboard;
2
3 import net.minecraft.client.Minecraft;
4 import net.minecraft.client.settings.KeyBinding;
5 import net.minecraft.client.util.InputMappings;
6 import org.lwjgl.glfw.GLFW;
7
8 import java.util.HashSet;
9 import java.util.Set;
10
11 public class KeyListener {
12     private static final Minecraft minecraft = Minecraft.getInstance();
13     private static long mainWindowHandle;
14     private static Set<Key> keys = new HashSet<>();
15     private static Set<CustomKeyBinding> keyBindings = new HashSet<>();
16     public static final String Category = "Bounding Box Outline Reloaded";
17
18     public static void init() {
19         mainWindowHandle = minecraft.mainWindow.getHandle();
20         GLFW.glfwSetKeyCallback(mainWindowHandle, KeyListener::onKeyEvent);
21     }
22
23     public static Key register(String description, String keyName) {
24         InputMappings.Input input = InputMappings.getInputByName(keyName);
25         CustomKeyBinding keyBinding = new CustomKeyBinding(description, input.getKeyCode());
26         keyBindings.add(keyBinding);
27
28         Key key = keyBinding.getCustomKey();
29         keys.add(key);
30         return key;
31     }
32
33     private static void onKeyEvent(long windowHandle, int keyCode, int scanCode, int action, int modifiers) {
34         boolean isPressed = action > 0;
35         if (windowHandle == mainWindowHandle &&
36                 minecraft.currentScreen == null &&
37                 keyCode != -1 &&
38                 !InputMappings.isKeyDown(292) &&
39                 handleKeyEvent(keyCode, isPressed))
40             return;
41         minecraft.keyboardListener.onKeyEvent(windowHandle, keyCode, scanCode, action, modifiers);
42     }
43
44     private static boolean handleKeyEvent(int keyCode, boolean isPressed) {
45         for (Key key : keys) {
46             if (key.handleKeyEvent(keyCode, isPressed)) {
47                 return true;
48             }
49         }
50         return false;
51     }
52
53     public static KeyBinding[] keyBindings() {
54         return keyBindings.toArray(new KeyBinding[0]);
55     }
56 }