BloodMagic/src/main/java/wayoftime/bloodmagic/client/key/BloodMagicKeyHandler.java
2021-01-19 19:26:23 -05:00

83 lines
1.9 KiB
Java

package wayoftime.bloodmagic.client.key;
import java.util.BitSet;
import org.lwjgl.glfw.GLFW;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.client.util.InputMappings;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.common.MinecraftForge;
public class BloodMagicKeyHandler
{
private final BitSet keyDown;
private final BitSet repeatings;
public BloodMagicKeyHandler()
{
this.keyDown = new BitSet();
this.repeatings = new BitSet();
MinecraftForge.EVENT_BUS.addListener(this::keyTick);
}
public static boolean isKeyDown(KeyBinding keyBinding)
{
InputMappings.Input key = keyBinding.getKey();
int keyCode = key.getKeyCode();
if (keyCode != InputMappings.INPUT_INVALID.getKeyCode())
{
long windowHandle = Minecraft.getInstance().getMainWindow().getHandle();
try
{
if (key.getType() == InputMappings.Type.KEYSYM)
{
return InputMappings.isKeyDown(windowHandle, keyCode);
} else if (key.getType() == InputMappings.Type.MOUSE)
{
return GLFW.glfwGetMouseButton(windowHandle, keyCode) == GLFW.GLFW_PRESS;
}
} catch (Exception ignored)
{
}
}
return false;
}
public void keyTick(InputEvent.KeyInputEvent event)
{
// System.out.println("Pressing the key handlers");
for (int i = 0; i < KeyBindings.values().length; i++)
{
KeyBindings keyBindings = KeyBindings.values()[i];
KeyBinding keyBinding = keyBindings.getKey();
boolean state = keyBinding.isKeyDown();
boolean lastState = keyDown.get(i);
if (state != lastState || (state && repeatings.get(i)))
{
if (state)
{
keyDown(keyBindings, lastState);
} else
{
keyUp(keyBindings);
}
keyDown.set(i, state);
}
}
}
public void keyDown(KeyBindings kb, boolean isRepeat)
{
kb.handleKeybind();
}
public void keyUp(KeyBindings kb)
{
}
}