From d06f38a8ca2d3a8ba9cc1f17fdb548f9c19e2787 Mon Sep 17 00:00:00 2001 From: o0sh4d0w0o Date: Tue, 25 Jul 2023 00:35:22 +0200 Subject: [PATCH 1/2] Added new sneak parameter to the safe walk module --- .../commands/commands/InputCommand.java | 3 +- .../systems/modules/movement/SafeWalk.java | 93 ++++++++++++++++++- 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java index 6e7b0f328b..4b15e4e86e 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java @@ -28,7 +28,8 @@ public class InputCommand extends Command { mc.options.jumpKey, "jump", mc.options.sneakKey, "sneak", mc.options.useKey, "use", - mc.options.attackKey, "attack" + mc.options.attackKey, "attack", + mc.options.sprintKey, "sprint" ); public InputCommand() { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java index 4c0118cf31..6dfc712ac0 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java @@ -6,17 +6,108 @@ package meteordevelopment.meteorclient.systems.modules.movement; import meteordevelopment.meteorclient.events.entity.player.ClipAtLedgeEvent; +import meteordevelopment.meteorclient.events.render.Render3DEvent; +import meteordevelopment.meteorclient.renderer.ShapeMode; +import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.orbit.EventHandler; +import net.minecraft.util.math.Box; public class SafeWalk extends Module { + private final SettingGroup swGeneral = settings.getDefaultGroup(); + + private final Setting sneak = swGeneral.add(new BoolSetting.Builder() + .name("sneak") + .description("Sneak when approaching edge of block.") + .defaultValue(false) + .build()); + + private final Setting safeSneak = swGeneral.add(new BoolSetting.Builder() + .name("safe-sneak") + .description("Prevent you to falling if sneak doesn't trigger correctly.") + .defaultValue(true) + .visible(() -> this.sneak.get()) + .build()); + + private final Setting sneakSprint = swGeneral.add(new BoolSetting.Builder() + .name("sneak-on-sprint") + .description("Keep sneak on sprinting key pressed.") + .defaultValue(true) + .visible(() -> this.sneak.get()) + .build()); + + private final Setting edgeDistance = swGeneral.add(new DoubleSetting.Builder() + .name("edge-distance") + .description("Distance offset before reaching an edge.") + .defaultValue(0.30) + .sliderRange(0.00, 0.30) + .decimalPlaces(2) + .visible(() -> this.sneak.get()) + .build()); + + private final Setting renderEdgeDistance = swGeneral.add(new BoolSetting.Builder() + .name("render") + .description("Render edge distance helper.") + .defaultValue(false) + .visible(() -> this.sneak.get()) + .build()); + + private final Setting renderPlayerBox = swGeneral.add(new BoolSetting.Builder() + .name("render-player-box") + .description("Render player box helper.") + .defaultValue(true) + .visible(() -> this.renderEdgeDistance.get()) + .build()); + public SafeWalk() { super(Categories.Movement, "safe-walk", "Prevents you from walking off blocks."); } @EventHandler private void onClipAtLedge(ClipAtLedgeEvent event) { - if (!mc.player.isSneaking()) event.setClip(true); + if (sneak.get()) { + boolean closeToEdge = false; + boolean isSprinting = this.sneakSprint.get() ? false : mc.options.sprintKey.isPressed(); + + Box playerBox = mc.player.getBoundingBox(); + Box adjustedBox = this.getAdjustedPlayerBox(playerBox); + + if (mc.world.isSpaceEmpty(mc.player, adjustedBox) && mc.player.isOnGround()) + closeToEdge = true; + + if (!isSprinting) { + if (closeToEdge == true) { + mc.player.input.sneaking = true; + } else if (this.safeSneak.get()) { + event.setClip(true); + } + } + } else { + if (!mc.player.isSneaking()) + event.setClip(true); + } + + } + + private Box getAdjustedPlayerBox(Box playerBox) { + return playerBox.stretch(0, -mc.player.getStepHeight(), 0) + .expand(-edgeDistance.get(), 0, -edgeDistance.get()); + } + + @EventHandler + private void onRender(Render3DEvent event) { + if (this.renderEdgeDistance.get()) { + Box playerBox = mc.player.getBoundingBox(); + Box adjustedBox = getAdjustedPlayerBox(playerBox); + + event.renderer.box(adjustedBox, Color.BLUE, Color.RED, ShapeMode.Lines, 0); + + if (this.renderPlayerBox.get()) { + event.renderer.box(playerBox, Color.BLUE, Color.GREEN, ShapeMode.Lines, 0); + } + } + } } From 933d0e9d121faf1d06529cf5870b0ee9f3fce642 Mon Sep 17 00:00:00 2001 From: o0sh4d0w0o Date: Thu, 17 Aug 2023 19:58:31 +0200 Subject: [PATCH 2/2] Added requested changes --- .../meteorclient/systems/modules/movement/SafeWalk.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java index 6dfc712ac0..fdddb35c3d 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java @@ -58,7 +58,7 @@ public class SafeWalk extends Module { .name("render-player-box") .description("Render player box helper.") .defaultValue(true) - .visible(() -> this.renderEdgeDistance.get()) + .visible(() -> this.sneak.get()) .build()); public SafeWalk() { @@ -67,7 +67,7 @@ public SafeWalk() { @EventHandler private void onClipAtLedge(ClipAtLedgeEvent event) { - if (sneak.get()) { + if (this.sneak.get()) { boolean closeToEdge = false; boolean isSprinting = this.sneakSprint.get() ? false : mc.options.sprintKey.isPressed(); @@ -98,7 +98,7 @@ private Box getAdjustedPlayerBox(Box playerBox) { @EventHandler private void onRender(Render3DEvent event) { - if (this.renderEdgeDistance.get()) { + if (this.sneak.get() && this.renderEdgeDistance.get()) { Box playerBox = mc.player.getBoundingBox(); Box adjustedBox = getAdjustedPlayerBox(playerBox);