From 28aa2843e9e425e8af41997ad7a3bfecefea8f39 Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Fri, 14 Jul 2017 20:40:15 -0700 Subject: [PATCH 1/3] Fix compile error --- java/squeek/quakemovement/QuakeClientPlayer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/squeek/quakemovement/QuakeClientPlayer.java b/java/squeek/quakemovement/QuakeClientPlayer.java index ff4e661..bfce3a5 100644 --- a/java/squeek/quakemovement/QuakeClientPlayer.java +++ b/java/squeek/quakemovement/QuakeClientPlayer.java @@ -99,7 +99,7 @@ public class QuakeClientPlayer extends ClientPlayerBase @Override public void moveFlying(float sidemove, float forwardmove, float wishspeed) { - if ((this.player.capabilities.isFlying && this.player.ridingEntity == null) || this.player.isInWater() || this.player.isInLava()) + if ((this.player.capabilities.isFlying && this.player.ridingEntity == null) || this.player.isInWater() || this.player.handleLavaMovement()) { super.moveFlying(sidemove, forwardmove, wishspeed); return; From f3dda155fb660f06df08a114e1cd5a16cef838c0 Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Wed, 29 Nov 2017 00:04:46 -0800 Subject: [PATCH 2/3] Fix ladder movement being unintentionally affected by Squake Use Minecraft's default movement whenever on a ladder Partially addresses #11 and #17 --- java/squeek/quakemovement/QuakeClientPlayer.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/java/squeek/quakemovement/QuakeClientPlayer.java b/java/squeek/quakemovement/QuakeClientPlayer.java index bfce3a5..226f47d 100644 --- a/java/squeek/quakemovement/QuakeClientPlayer.java +++ b/java/squeek/quakemovement/QuakeClientPlayer.java @@ -99,7 +99,7 @@ public class QuakeClientPlayer extends ClientPlayerBase @Override public void moveFlying(float sidemove, float forwardmove, float wishspeed) { - if ((this.player.capabilities.isFlying && this.player.ridingEntity == null) || this.player.isInWater() || this.player.handleLavaMovement()) + if ((this.player.capabilities.isFlying && this.player.ridingEntity == null) || this.player.isInWater() || this.player.handleLavaMovement() || this.player.isOnLadder()) { super.moveFlying(sidemove, forwardmove, wishspeed); return; @@ -422,8 +422,14 @@ public class QuakeClientPlayer extends ClientPlayerBase */ public void quake_moveEntityWithHeading(float sidemove, float forwardmove) { + // take care of ladder movement using default code + if (this.player.isOnLadder()) + { + super.moveEntityWithHeading(sidemove, forwardmove); + return; + } // take care of lava movement using default code - if ((this.player.handleLavaMovement() && !this.player.capabilities.isFlying)) + else if ((this.player.handleLavaMovement() && !this.player.capabilities.isFlying)) { super.moveEntityWithHeading(sidemove, forwardmove); return; @@ -490,15 +496,9 @@ public class QuakeClientPlayer extends ClientPlayerBase } } - // make adjustments for ladder interaction - minecraft_ApplyLadderPhysics(); - // apply velocity this.player.moveEntity(this.player.motionX, this.player.motionY, this.player.motionZ); - // climb ladder here for some reason - minecraft_ClimbLadder(); - // HL2 code applies half gravity before acceleration and half after acceleration, but this seems to work fine minecraft_ApplyGravity(); } From bb45d2fc3dec8ece130b1fd60f9df930a8984f1b Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Wed, 29 Nov 2017 00:48:57 -0800 Subject: [PATCH 3/3] Add client-side keybind for toggling the movement system on/off - Unbound by default - The setting will persist between save/quits (saved to the config) Closes #11 and closes #17 --- java/squeek/quakemovement/ModConfig.java | 16 ++++++++ .../quakemovement/ModQuakeMovement.java | 4 ++ .../quakemovement/QuakeClientPlayer.java | 15 ++++++++ .../quakemovement/ToggleKeyHandler.java | 37 +++++++++++++++++++ resources/assets/squake/lang/en_US.lang | 4 ++ 5 files changed, 76 insertions(+) create mode 100644 java/squeek/quakemovement/ToggleKeyHandler.java create mode 100644 resources/assets/squake/lang/en_US.lang diff --git a/java/squeek/quakemovement/ModConfig.java b/java/squeek/quakemovement/ModConfig.java index dd5e760..ea3f7aa 100644 --- a/java/squeek/quakemovement/ModConfig.java +++ b/java/squeek/quakemovement/ModConfig.java @@ -2,6 +2,7 @@ package squeek.quakemovement; import java.io.File; import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; public class ModConfig { @@ -59,6 +60,11 @@ public class ModConfig private static final String MAX_AIR_ACCEL_PER_TICK_NAME = "maxAirAccelerationPerTick"; private static final double MAX_AIR_ACCEL_PER_TICK_DEFAULT = 0.045D; + public static boolean ENABLED; + private static Property ENABLED_PROPERTY; + private static final String ENABLED_NAME = "enabled"; + private static final boolean ENABLED_DEFAULT = true; + private static Configuration config; public static void init(File file) @@ -84,6 +90,16 @@ public class ModConfig INCREASED_FALL_DISTANCE = (float) (config.get(CATEGORY_MOVEMENT, INCREASED_FALL_DISTANCE_NAME, INCREASED_FALL_DISTANCE_DEFAULT, "increases the distance needed to fall in order to take fall damage; this is a server-side setting").getDouble(INCREASED_FALL_DISTANCE_DEFAULT)); + ENABLED_PROPERTY = config.get(CATEGORY_MOVEMENT, ENABLED_NAME, ENABLED_DEFAULT, "turns off/on the quake-style movement for the client (essentially the saved value of the ingame toggle keybind)"); + ENABLED = ENABLED_PROPERTY.getBoolean(ENABLED_DEFAULT); + + save(); + } + + public static void setEnabled(boolean enabled) + { + ModConfig.ENABLED = enabled; + ENABLED_PROPERTY.set(enabled); save(); } diff --git a/java/squeek/quakemovement/ModQuakeMovement.java b/java/squeek/quakemovement/ModQuakeMovement.java index e2b6ff3..d1698ec 100644 --- a/java/squeek/quakemovement/ModQuakeMovement.java +++ b/java/squeek/quakemovement/ModQuakeMovement.java @@ -26,6 +26,10 @@ public class ModQuakeMovement { ModConfig.init(event.getSuggestedConfigurationFile()); MinecraftForge.EVENT_BUS.register(this); + if (event.getSide() == Side.CLIENT) + { + MinecraftForge.EVENT_BUS.register(new ToggleKeyHandler()); + } } @EventHandler diff --git a/java/squeek/quakemovement/QuakeClientPlayer.java b/java/squeek/quakemovement/QuakeClientPlayer.java index 05d5a16..f98baad 100644 --- a/java/squeek/quakemovement/QuakeClientPlayer.java +++ b/java/squeek/quakemovement/QuakeClientPlayer.java @@ -48,6 +48,12 @@ public class QuakeClientPlayer extends ClientPlayerBase @Override public void moveEntityWithHeading(float sidemove, float forwardmove) { + if (!ModConfig.ENABLED) + { + super.moveEntityWithHeading(sidemove, forwardmove); + return; + } + double d0 = this.player.posX; double d1 = this.player.posY; double d2 = this.player.posZ; @@ -103,6 +109,12 @@ public class QuakeClientPlayer extends ClientPlayerBase @Override public void moveFlying(float sidemove, float forwardmove, float wishspeed) { + if (!ModConfig.ENABLED) + { + super.moveFlying(sidemove, forwardmove, wishspeed); + return; + } + if ((this.player.capabilities.isFlying && this.player.getRidingEntity() == null) || this.player.isInWater() || this.player.isInLava() || this.player.isOnLadder()) { super.moveFlying(sidemove, forwardmove, wishspeed); @@ -121,6 +133,9 @@ public class QuakeClientPlayer extends ClientPlayerBase { super.jump(); + if (!ModConfig.ENABLED) + return; + // undo this dumb thing if (this.player.isSprinting()) { diff --git a/java/squeek/quakemovement/ToggleKeyHandler.java b/java/squeek/quakemovement/ToggleKeyHandler.java new file mode 100644 index 0000000..618ef01 --- /dev/null +++ b/java/squeek/quakemovement/ToggleKeyHandler.java @@ -0,0 +1,37 @@ +package squeek.quakemovement; + +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.InputEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class ToggleKeyHandler +{ + private static final KeyBinding TOGGLE_KEY = new KeyBinding("squake.key.toggle", Keyboard.CHAR_NONE, ModInfo.MODID); + + static + { + ClientRegistry.registerKeyBinding(TOGGLE_KEY); + } + + @SubscribeEvent + public void onKeyEvent(InputEvent.KeyInputEvent event) + { + if (TOGGLE_KEY.isPressed()) + { + ModConfig.setEnabled(!ModConfig.ENABLED); + + EntityPlayer player = FMLClientHandler.instance().getClientPlayerEntity(); + String feedback = ModConfig.ENABLED ? I18n.format("squake.key.toggle.enabled") : I18n.format("squake.key.toggle.disabled"); + player.addChatMessage(new TextComponentString("[" + ModInfo.MODID + "] " + feedback)); + } + } +} diff --git a/resources/assets/squake/lang/en_US.lang b/resources/assets/squake/lang/en_US.lang new file mode 100644 index 0000000..231358b --- /dev/null +++ b/resources/assets/squake/lang/en_US.lang @@ -0,0 +1,4 @@ +# Keybinds +squake.key.toggle=Toggle Movement System On/Off +squake.key.toggle.enabled=Movement system enabled +squake.key.toggle.disabled=Movement system disabled \ No newline at end of file