ModifierKeyCode.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package me.shedaniel.clothconfig2.api;
  2. import me.shedaniel.clothconfig2.impl.ModifierKeyCodeImpl;
  3. import me.shedaniel.clothconfig2.mixin.MouseHooks;
  4. import net.minecraft.client.MinecraftClient;
  5. import net.minecraft.client.util.InputUtil;
  6. public interface ModifierKeyCode {
  7. static ModifierKeyCode of(InputUtil.KeyCode keyCode, Modifier modifier) {
  8. return new ModifierKeyCodeImpl().setKeyCodeAndModifier(keyCode, modifier);
  9. }
  10. static ModifierKeyCode copyOf(ModifierKeyCode code) {
  11. return of(code.getKeyCode(), code.getModifier());
  12. }
  13. static ModifierKeyCode unknown() {
  14. return of(InputUtil.UNKNOWN_KEYCODE, Modifier.none());
  15. }
  16. InputUtil.KeyCode getKeyCode();
  17. ModifierKeyCode setKeyCode(InputUtil.KeyCode keyCode);
  18. default InputUtil.Type getType() {
  19. return getKeyCode().getCategory();
  20. }
  21. Modifier getModifier();
  22. ModifierKeyCode setModifier(Modifier modifier);
  23. default boolean matchesMouse(int button) {
  24. return !isUnknown() && getType() == InputUtil.Type.MOUSE && getKeyCode().getKeyCode() == button && getModifier().matchesCurrent();
  25. }
  26. default boolean matchesKey(int keyCode, int scanCode) {
  27. if (isUnknown())
  28. return false;
  29. if (keyCode == InputUtil.UNKNOWN_KEYCODE.getKeyCode()) {
  30. return getType() == InputUtil.Type.SCANCODE && getKeyCode().getKeyCode() == scanCode && getModifier().matchesCurrent();
  31. } else {
  32. return getType() == InputUtil.Type.KEYSYM && getKeyCode().getKeyCode() == keyCode && getModifier().matchesCurrent();
  33. }
  34. }
  35. default boolean matchesCurrentMouse() {
  36. if (!isUnknown() && getType() == InputUtil.Type.MOUSE && getModifier().matchesCurrent()) {
  37. switch (getKeyCode().getKeyCode()) {
  38. case 0:
  39. return MinecraftClient.getInstance().mouse.wasLeftButtonClicked();
  40. case 1:
  41. return MinecraftClient.getInstance().mouse.wasRightButtonClicked();
  42. case 2:
  43. return ((MouseHooks) MinecraftClient.getInstance().mouse).middleButtonClicked();
  44. }
  45. }
  46. return false;
  47. }
  48. default boolean matchesCurrentKey() {
  49. return !isUnknown() && getType() == InputUtil.Type.KEYSYM && getModifier().matchesCurrent() && InputUtil.isKeyPressed(MinecraftClient.getInstance().getWindow().getHandle(), getKeyCode().getKeyCode());
  50. }
  51. default ModifierKeyCode setKeyCodeAndModifier(InputUtil.KeyCode keyCode, Modifier modifier) {
  52. setKeyCode(keyCode);
  53. setModifier(modifier);
  54. return this;
  55. }
  56. default ModifierKeyCode clearModifier() {
  57. return setModifier(Modifier.none());
  58. }
  59. String toString();
  60. default String getLocalizedName() {
  61. return toString();
  62. }
  63. default boolean isUnknown() {
  64. return getKeyCode().equals(InputUtil.UNKNOWN_KEYCODE);
  65. }
  66. }