diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/Main.java b/common/src/main/java/io/github/kurrycat/mpkmod/Main.java index cf275aba..c5405ed9 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/Main.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/Main.java @@ -3,8 +3,8 @@ import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.*; import io.github.kurrycat.mpkmod.discord.DiscordRPC; -import io.github.kurrycat.mpkmod.events.Event; import io.github.kurrycat.mpkmod.events.*; +import io.github.kurrycat.mpkmod.events.Event; import io.github.kurrycat.mpkmod.gui.TickThread; import io.github.kurrycat.mpkmod.gui.components.Component; import io.github.kurrycat.mpkmod.gui.components.InputHistory; @@ -19,7 +19,10 @@ import io.github.kurrycat.mpkmod.modules.MPKModule; import io.github.kurrycat.mpkmod.modules.ModuleManager; import io.github.kurrycat.mpkmod.ticks.TimingStorage; -import io.github.kurrycat.mpkmod.util.*; +import io.github.kurrycat.mpkmod.util.BoundingBox3D; +import io.github.kurrycat.mpkmod.util.ItrUtil; +import io.github.kurrycat.mpkmod.util.MathUtil; +import io.github.kurrycat.mpkmod.util.Vector2D; import java.awt.*; import java.util.ArrayList; @@ -70,6 +73,8 @@ public void init() { ); API.registerGUIScreen("options_gui", new OptionsGuiScreen()); + + API.registerKeyBinding("togglesprint", Minecraft::toggleSprint); } @Override diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Minecraft.java b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Minecraft.java index eefbc348..a6393869 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Minecraft.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Minecraft.java @@ -17,6 +17,7 @@ public class Minecraft { public static String version; public static WorldState worldState = WorldState.MENU; public static PlayState playState = PlayState.ACTIVE; + public static boolean sprintToggled = false; @InfoString.Getter public static String getIp() { @@ -109,13 +110,22 @@ public static boolean isF3Enabled() { return Interface.get().map(Interface::isF3Enabled).orElse(false); } + @InfoString.Getter + public static boolean isSprintToggled() { + return sprintToggled; + } + + public static void toggleSprint() { + sprintToggled = !sprintToggled; + } + + public enum WorldState { MENU, SINGLE_PLAYER, MULTI_PLAYER; } - public enum PlayState { ACTIVE, AFK; diff --git a/common/src/main/resources/assets/mpkmod/lang/en_US.lang b/common/src/main/resources/assets/mpkmod/lang/en_US.lang deleted file mode 100644 index 6bb9fb6f..00000000 --- a/common/src/main/resources/assets/mpkmod/lang/en_US.lang +++ /dev/null @@ -1,6 +0,0 @@ -mpkmod.key.main_gui.desc=Open MPK Mod GUI -mpkmod.key.lb_gui.desc=Open Landing Block GUI -mpkmod.key.lb_set.desc=Set Landing Block -mpkmod.key.options_gui.desc=Open Options GUI -mpkmod.main_gui.title=MPK Mod GUI -mpkmod.lb_gui.title=Landing Block GUI \ No newline at end of file diff --git a/common/src/main/resources/assets/mpkmod/lang/en_us.json b/common/src/main/resources/assets/mpkmod/lang/en_us.json deleted file mode 100644 index 167f27be..00000000 --- a/common/src/main/resources/assets/mpkmod/lang/en_us.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "mpkmod.key.main_gui.desc": "Open MPK Mod GUI", - "mpkmod.key.lb_gui.desc": "Open Landing Block GUI", - "mpkmod.key.lb_set.desc": "Set Landing Block", - "mpkmod.key.options_gui.desc": "Open Options GUI", - "mpkmod.main_gui.title": "MPK Mod GUI", - "mpkmod.lb_gui.title": "Landing Block GUI" -} \ No newline at end of file diff --git a/common/src/main/resources/assets/mpkmod/lang/pl_pl.json b/common/src/main/resources/assets/mpkmod/lang/pl_pl.json deleted file mode 100644 index 0516617b..00000000 --- a/common/src/main/resources/assets/mpkmod/lang/pl_pl.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "mpkmod.key.main_gui.desc": "Otwórz menu Moda MPK", - "mpkmod.key.lb_gui.desc": "Otwórz menu bloku lądowania", - "mpkmod.main_gui.title": "Menu Moda MPK", - "mpkmod.lb_gui.title": "Menu bloku lądowania" -} \ No newline at end of file diff --git a/common/src/main/resources/assets/mpkmod/lang/pl_pl.lang b/common/src/main/resources/assets/mpkmod/lang/pl_pl.lang deleted file mode 100644 index 0e18b0c1..00000000 --- a/common/src/main/resources/assets/mpkmod/lang/pl_pl.lang +++ /dev/null @@ -1,4 +0,0 @@ -mpkmod.key.main_gui.desc=Otwórz menu Moda MPK -mpkmod.key.lb_gui.desc=Otwórz menu bloku lądowania -mpkmod.main_gui.title=Menu Moda MPK -mpkmod.lb_gui.title=Menu bloku lądowania \ No newline at end of file diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/EventHandler.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/EventHandler.java index 7fbc949e..0ceefa5c 100644 --- a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/EventHandler.java +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/EventHandler.java @@ -11,28 +11,32 @@ import io.github.kurrycat.mpkmod.util.Vector3D; import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.minecraft.client.DeltaTracker; +import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.Options; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.input.MouseButtonInfo; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.LocalPlayer; import net.minecraft.util.Util; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import java.util.Map; + public class EventHandler { private static final ButtonMSList timeQueue = new ButtonMSList(); /** - * @param keyInput The Minecraft {@link KeyEvent} object. + * @param input The Minecraft {@link KeyEvent} object. * @param action The action, where 0 = unpressed, 1 = pressed, 2 = held. */ - public void onKey(KeyEvent keyInput, int action) { + public void onKey(KeyEvent input, int action) { Options options = Minecraft.getInstance().options; long eventNanos = Util.getNanos(); - InputConstants.Key inputKey = InputConstants.getKey(new KeyEvent(keyInput.key(), keyInput.scancode(), keyInput.modifiers())); + InputConstants.Key inputKey = InputConstants.getKey(new KeyEvent(input.key(), input.scancode(), input.modifiers())); int[] keys = { ((KeyMappingAccessor) options.keyUp).getKey().getValue(), @@ -45,7 +49,7 @@ public void onKey(KeyEvent keyInput, int action) { }; for (int i = 0; i < keys.length; i++) { - if (keyInput.key() == keys[i]) { + if (input.key() == keys[i]) { timeQueue.add(ButtonMS.of(ButtonMS.Button.values()[i], eventNanos, action == 1)); } } @@ -56,13 +60,56 @@ public void onKey(KeyEvent keyInput, int action) { FunctionCompatibility.pressedButtons.remove(inputKey.getValue()); } - API.Events.onKeyInput(keyInput.key(), inputKey.getDisplayName().getString(), action == 1); + API.Events.onKeyInput(input.key(), inputKey.getDisplayName().getString(), action == 1); + + if (action != 0) { + checkKeyBinding(input.key()); + } + } - MPKMod.keyBindingMap.forEach((id, keyBinding) -> { - if (keyBinding.isDown()) { - API.Events.onKeybind(id); + public void onMouseMove(double x, double y, double dx, double dy) { + API.Events.onMouseInput( + io.github.kurrycat.mpkmod.util.Mouse.Button.NONE, + io.github.kurrycat.mpkmod.util.Mouse.State.NONE, + (int) x, (int) y, (int) dx, (int) dy, + 0, System.nanoTime() + ); + } + + public void onMouseScroll(double vertical, double x, double y) { + API.Events.onMouseInput( + io.github.kurrycat.mpkmod.util.Mouse.Button.NONE, + io.github.kurrycat.mpkmod.util.Mouse.State.NONE, + (int) x, (int) y, 0, 0, + (int) vertical, System.nanoTime() + ); + } + + public void onMouseButton(MouseButtonInfo input, int action, double x, double y) { + API.Events.onMouseInput( + io.github.kurrycat.mpkmod.util.Mouse.Button.fromInt(input.button()), + input.button() == -1 ? io.github.kurrycat.mpkmod.util.Mouse.State.NONE : + (action == 1 ? io.github.kurrycat.mpkmod.util.Mouse.State.DOWN : io.github.kurrycat.mpkmod.util.Mouse.State.UP), + (int) x, (int) y, 0, 0, + 0, System.nanoTime() + ); + + if (action == 1) + checkKeyBinding(input.button()); + } + + private void checkKeyBinding(int keyCode) { + if (Minecraft.getInstance().screen != null) return; + + for (Map.Entry keyBindingEntry : MPKMod.keyBindingMap.entrySet()) { + InputConstants.Key boundKey = ((KeyMappingAccessor) keyBindingEntry.getValue()).getKey(); + String keyBindId = keyBindingEntry.getKey(); + + if (boundKey.getValue() == keyCode) { + API.Events.onKeybind(keyBindId); + return; } - }); + } } public void onInGameOverlayRender(GuiGraphics drawContext, DeltaTracker renderTickCounter) { diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/FunctionCompatibility.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/FunctionCompatibility.java index 4b596a79..46d041d2 100644 --- a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/FunctionCompatibility.java +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/FunctionCompatibility.java @@ -24,7 +24,6 @@ import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.renderer.ShapeRenderer; import net.minecraft.client.renderer.rendertype.RenderTypes; import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.core.BlockPos; diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyboardHandlerMixin.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyboardHandlerMixin.java index 018a692d..e7c6c6e3 100644 --- a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyboardHandlerMixin.java +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/KeyboardHandlerMixin.java @@ -11,9 +11,9 @@ @Mixin(KeyboardHandler.class) public class KeyboardHandlerMixin { @Inject(method = "keyPress", at = @At(value = "RETURN")) - private void onKey(long window, int action, KeyEvent keyInput, CallbackInfo ci) { - if (keyInput.key() != -1) { - MPKMod.INSTANCE.eventHandler.onKey(keyInput, action); + private void onKey(long window, int action, KeyEvent input, CallbackInfo ci) { + if (input.key() != -1) { + MPKMod.INSTANCE.eventHandler.onKey(input, action); } } } diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MouseHandlerMixin.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MouseHandlerMixin.java index 58d30f22..f965b8b7 100644 --- a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MouseHandlerMixin.java +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/MouseHandlerMixin.java @@ -1,6 +1,7 @@ package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin; import io.github.kurrycat.mpkmod.compatibility.API; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.MPKMod; import net.minecraft.client.Minecraft; import net.minecraft.client.MouseHandler; import net.minecraft.client.input.MouseButtonInfo; @@ -24,33 +25,19 @@ public class MouseHandlerMixin { @Inject(method = "onMove", at = @At(value = "TAIL")) private void onCursorPos(long window, double x, double y, CallbackInfo ci) { if (window == Minecraft.getInstance().getWindow().handle()) { - API.Events.onMouseInput( - io.github.kurrycat.mpkmod.util.Mouse.Button.NONE, - io.github.kurrycat.mpkmod.util.Mouse.State.NONE, - (int) x, (int) y, (int) accumulatedDX, (int) -accumulatedDY, - 0, System.nanoTime() - ); + MPKMod.INSTANCE.eventHandler.onMouseMove(x, y, accumulatedDX, -accumulatedDY); } } @Inject(method = "onScroll", at = @At(value = "TAIL")) private void onMouseScroll(long window, double horizontal, double vertical, CallbackInfo ci) { - API.Events.onMouseInput( - io.github.kurrycat.mpkmod.util.Mouse.Button.NONE, - io.github.kurrycat.mpkmod.util.Mouse.State.NONE, - (int) xpos, (int) ypos, 0, 0, - (int) vertical, System.nanoTime() - ); + MPKMod.INSTANCE.eventHandler.onMouseScroll(vertical, xpos, ypos); } @Inject(method = "onButton", at = @At(value = "TAIL")) private void onMouseButton(long window, MouseButtonInfo input, int action, CallbackInfo ci) { - API.Events.onMouseInput( - io.github.kurrycat.mpkmod.util.Mouse.Button.fromInt(input.button()), - input.button() == -1 ? io.github.kurrycat.mpkmod.util.Mouse.State.NONE : - (action == 1 ? io.github.kurrycat.mpkmod.util.Mouse.State.DOWN : io.github.kurrycat.mpkmod.util.Mouse.State.UP), - (int) xpos, (int) ypos, 0, 0, - 0, System.nanoTime() - ); + if (input.button() != -1) { + MPKMod.INSTANCE.eventHandler.onMouseButton(input, action, xpos, ypos); + } } } diff --git a/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/ToggleSprintKeyMixin.java b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/ToggleSprintKeyMixin.java new file mode 100644 index 00000000..df60eca3 --- /dev/null +++ b/fabric-1.21.11/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_11/mixin/ToggleSprintKeyMixin.java @@ -0,0 +1,22 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_11.mixin; + +import io.github.kurrycat.mpkmod.compatibility.MCClasses.Minecraft; +import net.minecraft.client.KeyMapping; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(KeyMapping.class) +public class ToggleSprintKeyMixin { + @Inject(method = "isDown", at = @At("HEAD"), cancellable = true) + private void sprintOverride(CallbackInfoReturnable cir) { + KeyMapping self = (KeyMapping) (Object) this; + KeyMapping sprintKey = net.minecraft.client.Minecraft.getInstance().options.keySprint; + + if (self == sprintKey && Minecraft.isSprintToggled()) + cir.setReturnValue(true); + } +} diff --git a/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/en_us.json b/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/en_us.json index 99c3524a..9f948326 100644 --- a/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/en_us.json +++ b/fabric-1.21.11/src/main/resources/assets/mpkmod/lang/en_us.json @@ -4,6 +4,7 @@ "mpkmod.key.lb_gui.desc": "Open Landing Block GUI", "mpkmod.key.lb_set.desc": "Set Landing Block", "mpkmod.key.options_gui.desc": "Open Options GUI", + "mpkmod.key.togglesprint.desc": "Toggle Sprint", "mpkmod.main_gui.title": "MPK Mod GUI", "mpkmod.lb_gui.title": "Landing Block GUI" } \ No newline at end of file diff --git a/fabric-1.21.11/src/main/resources/mpkmod.mixins.json b/fabric-1.21.11/src/main/resources/mpkmod.mixins.json index 5a973cb1..f9cb2c63 100644 --- a/fabric-1.21.11/src/main/resources/mpkmod.mixins.json +++ b/fabric-1.21.11/src/main/resources/mpkmod.mixins.json @@ -10,7 +10,8 @@ "KeyMappingAccessor", "KeyboardHandlerMixin", "MinecraftMixin", - "MouseHandlerMixin" + "MouseHandlerMixin", + "ToggleSprintKeyMixin" ], "injectors": { "defaultRequire": 1 diff --git a/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/EventListener.java b/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/EventListener.java index 1de562be..ac0a56f7 100644 --- a/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/EventListener.java +++ b/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/EventListener.java @@ -11,6 +11,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.settings.KeyBinding; import net.minecraft.util.math.AxisAlignedBB; import net.minecraftforge.client.event.MouseEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; @@ -24,6 +25,8 @@ import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; +import java.util.Map; + @SuppressWarnings("unused") public class EventListener { private static final ButtonMSList timeQueue = new ButtonMSList(); @@ -35,6 +38,12 @@ public void onEvent(InputEvent.KeyInputEvent event) { String key = Keyboard.getKeyName(keyCode); boolean pressed = Keyboard.getEventKeyState(); + if (keyCode == 0) { + char c = Keyboard.getEventCharacter(); + keyCode = 256 + c; + key = String.valueOf(c); + } + GameSettings gameSettings = Minecraft.getMinecraft().gameSettings; int[] keys = { @@ -54,11 +63,9 @@ public void onEvent(InputEvent.KeyInputEvent event) { API.Events.onKeyInput(InputConstants.convert(keyCode), key, pressed); - MPKMod.keyBindingMap.forEach((id, keyBinding) -> { - if (keyBinding.isPressed()) { - API.Events.onKeybind(id); - } - }); + if (pressed) { + checkKeyBinding(keyCode); + } } @SideOnly(Side.CLIENT) @@ -70,6 +77,23 @@ public void onMouseEvent(MouseEvent event) { event.getX(), event.getY(), event.getDx(), event.getDy(), event.getDwheel(), event.getNanoseconds() ); + + if (event.isButtonstate()) + checkKeyBinding(event.getButton() - 100); + } + + private void checkKeyBinding(int keyCode) { + if (Minecraft.getMinecraft().currentScreen != null) return; + + for (Map.Entry keyBindingEntry : MPKMod.keyBindingMap.entrySet()) { + KeyBinding keyBinding = keyBindingEntry.getValue(); + String keyBindingId = keyBindingEntry.getKey(); + + if (keyBinding.getKeyCode() == keyCode) { + API.Events.onKeybind(keyBindingId); + return; + } + } } diff --git a/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/MPKMod.java b/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/MPKMod.java index 6f89a2ab..4703a317 100644 --- a/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/MPKMod.java +++ b/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/MPKMod.java @@ -2,6 +2,7 @@ import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.forge_1_12_2.network.MPKForgeNetworking; +import io.github.kurrycat.mpkmod.compatibility.forge_1_12_2.overrides.SprintKeyBindingOverride; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; @@ -41,6 +42,8 @@ public void preInit(FMLPreInitializationEvent event) { public void init(FMLInitializationEvent event) { API.preInit(getClass()); + overrideSprintKeyBinding(); + API.guiScreenMap.forEach((id, guiScreen) -> { if (guiScreen.shouldCreateKeyBind()) registerKeyBinding(id); @@ -59,6 +62,20 @@ public void init(FMLInitializationEvent event) { API.init(ForgeVersion.mcVersion); } + private void overrideSprintKeyBinding() { + GameSettings gs = Minecraft.getMinecraft().gameSettings; + KeyBinding oldSprintKey = gs.keyBindSprint; + + gs.keyBindSprint = new SprintKeyBindingOverride(oldSprintKey); + + for (int i = 0; i < gs.keyBindings.length; i++) { + if (gs.keyBindings[i] == oldSprintKey) { + gs.keyBindings[i] = gs.keyBindSprint; + break; + } + } + } + public static void registerKeyBinding(String id) { KeyBinding keyBinding = new KeyBinding( API.MODID + ".key." + id + ".desc", diff --git a/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/overrides/SprintKeyBindingOverride.java b/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/overrides/SprintKeyBindingOverride.java new file mode 100644 index 00000000..18b31bc7 --- /dev/null +++ b/forge-1.12.2/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_12_2/overrides/SprintKeyBindingOverride.java @@ -0,0 +1,15 @@ +package io.github.kurrycat.mpkmod.compatibility.forge_1_12_2.overrides; + +import io.github.kurrycat.mpkmod.compatibility.MCClasses.Minecraft; +import net.minecraft.client.settings.KeyBinding; + +public class SprintKeyBindingOverride extends KeyBinding { + public SprintKeyBindingOverride(KeyBinding k) { + super(k.getKeyDescription(), k.getKeyCodeDefault(), k.getKeyCategory()); + } + + @Override + public boolean isKeyDown() { + return Minecraft.isSprintToggled() || super.isKeyDown(); + } +} diff --git a/forge-1.12.2/src/main/resources/assets/mpkmod/lang/en_US.lang b/forge-1.12.2/src/main/resources/assets/mpkmod/lang/en_US.lang index 7a27aed7..52d01e9e 100644 --- a/forge-1.12.2/src/main/resources/assets/mpkmod/lang/en_US.lang +++ b/forge-1.12.2/src/main/resources/assets/mpkmod/lang/en_US.lang @@ -3,5 +3,6 @@ mpkmod.key.main_gui.desc=Open MPK Mod GUI mpkmod.key.lb_gui.desc=Open Landing Block GUI mpkmod.key.lb_set.desc=Set Landing Block mpkmod.key.options_gui.desc=Open Options GUI +mpkmod.key.togglesprint.desc=Toggle Sprint mpkmod.main_gui.title=MPK Mod GUI mpkmod.lb_gui.title=Landing Block GUI \ No newline at end of file diff --git a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/EventListener.java b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/EventListener.java index 5e7a6684..2c3920af 100644 --- a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/EventListener.java +++ b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/EventListener.java @@ -11,6 +11,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.settings.KeyBinding; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.client.event.MouseEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; @@ -24,6 +25,8 @@ import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; +import java.util.Map; + @SuppressWarnings("unused") public class EventListener { private static final ButtonMSList timeQueue = new ButtonMSList(); @@ -35,6 +38,12 @@ public void onEvent(InputEvent.KeyInputEvent event) { String key = Keyboard.getKeyName(keyCode); boolean pressed = Keyboard.getEventKeyState(); + if (keyCode == 0) { + char c = Keyboard.getEventCharacter(); + keyCode = 256 + c; + key = String.valueOf(c); + } + GameSettings gameSettings = Minecraft.getMinecraft().gameSettings; int[] keys = { @@ -54,11 +63,9 @@ public void onEvent(InputEvent.KeyInputEvent event) { API.Events.onKeyInput(InputConstants.convert(keyCode), key, pressed); - MPKMod.keyBindingMap.forEach((id, keyBinding) -> { - if (keyBinding.isPressed()) { - API.Events.onKeybind(id); - } - }); + if (pressed) { + checkKeyBinding(keyCode); + } } @SideOnly(Side.CLIENT) @@ -70,6 +77,23 @@ public void onMouseEvent(MouseEvent event) { event.x, event.y, event.dx, event.dy, event.dwheel, event.nanoseconds ); + + if (event.buttonstate) + checkKeyBinding(event.button - 100); + } + + private void checkKeyBinding(int keyCode) { + if (Minecraft.getMinecraft().currentScreen != null) return; + + for (Map.Entry keyBindingEntry : MPKMod.keyBindingMap.entrySet()) { + KeyBinding keyBinding = keyBindingEntry.getValue(); + String keyBindingId = keyBindingEntry.getKey(); + + if (keyBinding.getKeyCode() == keyCode) { + API.Events.onKeybind(keyBindingId); + return; + } + } } diff --git a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/MPKMod.java b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/MPKMod.java index feb20229..96e86c47 100644 --- a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/MPKMod.java +++ b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/MPKMod.java @@ -2,6 +2,7 @@ import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.forge_1_8.network.MPKForgeNetworking; +import io.github.kurrycat.mpkmod.compatibility.forge_1_8.overrides.SprintKeyBindingOverride; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; @@ -41,6 +42,8 @@ public void preInit(FMLPreInitializationEvent event) { public void init(FMLInitializationEvent event) { API.preInit(getClass()); + overrideSprintKeyBinding(); + API.guiScreenMap.forEach((id, guiScreen) -> { if (guiScreen.shouldCreateKeyBind()) registerKeyBinding(id); @@ -59,6 +62,20 @@ public void init(FMLInitializationEvent event) { API.init(ForgeVersion.mcVersion); } + private void overrideSprintKeyBinding() { + GameSettings gs = Minecraft.getMinecraft().gameSettings; + KeyBinding oldSprintKey = gs.keyBindSprint; + + gs.keyBindSprint = new SprintKeyBindingOverride(oldSprintKey); + + for (int i = 0; i < gs.keyBindings.length; i++) { + if (gs.keyBindings[i] == oldSprintKey) { + gs.keyBindings[i] = gs.keyBindSprint; + break; + } + } + } + public static void registerKeyBinding(String id) { KeyBinding keyBinding = new KeyBinding( API.MODID + ".key." + id + ".desc", diff --git a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/overrides/SprintKeyBindingOverride.java b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/overrides/SprintKeyBindingOverride.java new file mode 100644 index 00000000..092dfccd --- /dev/null +++ b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/overrides/SprintKeyBindingOverride.java @@ -0,0 +1,15 @@ +package io.github.kurrycat.mpkmod.compatibility.forge_1_8.overrides; + +import io.github.kurrycat.mpkmod.compatibility.MCClasses.Minecraft; +import net.minecraft.client.settings.KeyBinding; + +public class SprintKeyBindingOverride extends KeyBinding { + public SprintKeyBindingOverride(KeyBinding k) { + super(k.getKeyDescription(), k.getKeyCodeDefault(), k.getKeyCategory()); + } + + @Override + public boolean isKeyDown() { + return Minecraft.isSprintToggled() || super.isKeyDown(); + } +} diff --git a/forge-1.8.9/src/main/resources/assets/mpkmod/lang/en_US.lang b/forge-1.8.9/src/main/resources/assets/mpkmod/lang/en_US.lang index 7a27aed7..52d01e9e 100644 --- a/forge-1.8.9/src/main/resources/assets/mpkmod/lang/en_US.lang +++ b/forge-1.8.9/src/main/resources/assets/mpkmod/lang/en_US.lang @@ -3,5 +3,6 @@ mpkmod.key.main_gui.desc=Open MPK Mod GUI mpkmod.key.lb_gui.desc=Open Landing Block GUI mpkmod.key.lb_set.desc=Set Landing Block mpkmod.key.options_gui.desc=Open Options GUI +mpkmod.key.togglesprint.desc=Toggle Sprint mpkmod.main_gui.title=MPK Mod GUI mpkmod.lb_gui.title=Landing Block GUI \ No newline at end of file