From e8e0e525bd41ae82510c0e1edd2ade1a97096082 Mon Sep 17 00:00:00 2001 From: wyattfr Date: Mon, 19 Jan 2026 21:41:04 -0500 Subject: [PATCH 1/2] fix: update toolchain configuration and enhance PathExecutor movement logic to not trigger Anti Cheat --- build.gradle.kts | 5 ++- settings.gradle.kts | 4 ++ .../feature/impl/PathExecutor.java | 45 ++++++++++++------- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e2cd6a8e..1cedb6a2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,10 @@ val modName: String by project // Toolchains: java { - toolchain.languageVersion.set(JavaLanguageVersion.of(8)) + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + vendor.set(JvmVendorSpec.ADOPTIUM) + } } blossom { diff --git a/settings.gradle.kts b/settings.gradle.kts index c7caf6a6..d8ad6701 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -9,4 +9,8 @@ pluginManagement { } } +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" +} + rootProject.name = "MightyMinerV2" \ No newline at end of file diff --git a/src/main/java/com/jelly/mightyminerv2/feature/impl/PathExecutor.java b/src/main/java/com/jelly/mightyminerv2/feature/impl/PathExecutor.java index 30b39b9c..f166dc5f 100644 --- a/src/main/java/com/jelly/mightyminerv2/feature/impl/PathExecutor.java +++ b/src/main/java/com/jelly/mightyminerv2/feature/impl/PathExecutor.java @@ -11,6 +11,7 @@ import lombok.Getter; import lombok.Setter; import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.KeyBinding; import net.minecraft.util.BlockPos; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; @@ -230,6 +231,10 @@ public boolean onTick() { this.interpolYawDiff = yaw - AngleUtil.get360RotationYaw(); } + // Disable StrafeUtil for realistic client-side movement + StrafeUtil.enabled = false; + + // Rotate player to face target direction if (yawDiff > 3 && !RotationHandler.getInstance().isEnabled()) { float rotYaw = yaw; @@ -258,29 +263,35 @@ public boolean onTick() { ); } - float ipYaw = yaw; - if (onGround && horizontalDistToTarget >= 8 && this.allowInterpolation && !this.interpolated) { - float time = 200f; - long timePassed = Math.min((long) time, System.currentTimeMillis() - this.nodeChangeTime); - ipYaw -= this.interpolYawDiff * (1 - (timePassed / time)); - if (timePassed == time) { - this.interpolated = true; - } + // Calculate which WASD keys to press based on current player rotation (not target direction) + // This makes movement purely client-side and realistic + Vec3 targetVec = new Vec3(targetX + 0.5, mc.thePlayer.posY, targetZ + 0.5); + List neededKeys = KeyBindUtil.getNeededKeyPresses(mc.thePlayer.getPositionVector(), targetVec); + List keyBindings = new ArrayList<>(neededKeys); + + // Preserve attack/use item state + if (mc.gameSettings.keyBindUseItem.isKeyDown()) { + keyBindings.add(mc.gameSettings.keyBindUseItem); } - - StrafeUtil.enabled = yawDiff > 3; - StrafeUtil.yaw = ipYaw; - + if (mc.gameSettings.keyBindAttack.isKeyDown()) { + keyBindings.add(mc.gameSettings.keyBindAttack); + } + + // Check if we need to jump based on path analysis Vec3 pos = new Vec3(mc.thePlayer.posX, playerPos.getY() + 0.5, mc.thePlayer.posZ); - Vec3 vec4Rot = AngleUtil.getVectorForRotation(yaw); + Vec3 vec4Rot = AngleUtil.getVectorForRotation(mc.thePlayer.rotationYaw); boolean shouldJump = BlockUtil.canWalkBetween(this.curr.getCtx(), pos, pos.addVector(vec4Rot.xCoord, 1, vec4Rot.zCoord)); - KeyBindUtil.setKeyBindState(mc.gameSettings.keyBindForward, true); - KeyBindUtil.setKeyBindState(mc.gameSettings.keyBindSprint, this.allowSprint && yawDiff < 40 && !shouldJump); + if (shouldJump && onGround) { - mc.thePlayer.jump(); + keyBindings.add(mc.gameSettings.keyBindJump); this.state = State.JUMPING; } - KeyBindUtil.setKeyBindState(mc.gameSettings.keyBindJump, shouldJump); + + // Apply all the calculated key presses + KeyBindUtil.holdThese(keyBindings.toArray(new KeyBinding[0])); + + // Handle sprinting - only sprint when moving relatively straight + KeyBindUtil.setKeyBindState(mc.gameSettings.keyBindSprint, this.allowSprint && yawDiff < 40 && !shouldJump); return playerPos.distanceSqToCenter(target.getX(), target.getY(), target.getZ()) < 100; } From 3e9727ce5994a20dbbd7a48205b01536b8683fad Mon Sep 17 00:00:00 2001 From: wyattfr Date: Mon, 19 Jan 2026 21:41:43 -0500 Subject: [PATCH 2/2] fix: extend pathfinding timer to prevent timeouts during navigation --- .../mightyminerv2/feature/impl/RouteNavigator.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/com/jelly/mightyminerv2/feature/impl/RouteNavigator.java b/src/main/java/com/jelly/mightyminerv2/feature/impl/RouteNavigator.java index 672c5f54..208d1792 100644 --- a/src/main/java/com/jelly/mightyminerv2/feature/impl/RouteNavigator.java +++ b/src/main/java/com/jelly/mightyminerv2/feature/impl/RouteNavigator.java @@ -313,6 +313,18 @@ protected void onTick(ClientTickEvent event) { this.stop(NavError.PATHFIND_FAILED); return; } + + // Check for timeout - if pathfinding is taking too long, increase the timer + if (this.timer.isScheduled() && this.timer.passed()) { + if (Pathfinder.getInstance().isRunning()) { + log("Pathfinding still in progress, extending timer"); + this.timer.schedule(5000); // Extend by 5 more seconds + } else { + logError("Pathfinding timeout - pathfinder stopped without completion"); + this.stop(NavError.TIME_FAIL); + return; + } + } break; case END_VERIFY: {