From a4ca690c0799effefd87a36601a58c5fec20de50 Mon Sep 17 00:00:00 2001 From: umutcagand <237324081+c8dhjp4tyv-bit@users.noreply.github.com> Date: Thu, 3 Sep 2026 07:31:20 +0300 Subject: [PATCH 1/2] Stopped Nuker overwriting the range setting every tick Uniform cube rounded the range by calling range.set() from the tick handler, so a fractional range the user typed was silently rewritten in their config and the setting was mutated 20 times a second for as long as the module was on. Round into the local r that the shape already uses and compare the chebyshev distance against it instead. --- .../meteorclient/systems/modules/world/Nuker.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java index ff7dff87929..514fa0840d4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java @@ -351,10 +351,9 @@ private void onTickPre(TickEvent.Pre event) { double rangeSq = Math.pow(range.get(), 2); BlockPos playerBlockPos = mc.player.blockPosition(); - if (shape.get() == Shape.UniformCube) range.set((double) Math.round(range.get())); - double pX_ = pX; double pZ_ = pZ; + // Uniform cube works on whole blocks, so round the range locally instead of writing it back to the setting int r = (int) Math.round(range.get()); if (shape.get() == Shape.UniformCube) { @@ -410,7 +409,7 @@ private void onTickPre(TickEvent.Pre event) { return; } case UniformCube -> { - if (chebyshevDist(playerBlockPos.getX(), playerBlockPos.getY(), playerBlockPos.getZ(), blockPos.getX(), blockPos.getY(), blockPos.getZ()) >= range.get()) + if (chebyshevDist(playerBlockPos.getX(), playerBlockPos.getY(), playerBlockPos.getZ(), blockPos.getX(), blockPos.getY(), blockPos.getZ()) >= r) return; } case Cube -> { From 4e8c0fabc2ce7bcda4e446eb30e0d543ad94e94d Mon Sep 17 00:00:00 2001 From: umutcagand <237324081+c8dhjp4tyv-bit@users.noreply.github.com> Date: Thu, 3 Sep 2026 08:13:55 +0300 Subject: [PATCH 2/2] Kept the uniform cube iterator radius on the rounded range Leaving the register() extents on the raw range made a fractional range iterate a larger volume than the chebyshev filter accepts, so the extra blocks were only fetched to be discarded. --- .../meteorclient/systems/modules/world/Nuker.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java index 514fa0840d4..3dd49d55700 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java @@ -356,12 +356,19 @@ private void onTickPre(TickEvent.Pre event) { // Uniform cube works on whole blocks, so round the range locally instead of writing it back to the setting int r = (int) Math.round(range.get()); + // How far the block iterator has to reach to cover the shape + int horizontalRange, verticalRange; + if (shape.get() == Shape.UniformCube) { pX_ += 1; // weird position stuff pos1.set(pX_ - r, pY - r + 1, pZ - r + 1); // down pos2.set(pX_ + r - 1, pY + r, pZ + r); // up maxh = 0; maxv = 0; + + // The chebyshev check below uses the rounded radius, so anything past it would only be thrown away + horizontalRange = r + 1; + verticalRange = r; } else { // Only change me if you want to mess with 3D rotations: // I messed with it @@ -393,6 +400,9 @@ private void onTickPre(TickEvent.Pre event) { // get largest horizontal maxh = 1 + Math.max(Math.max(Math.max(range_back.get(), range_right.get()), range_forward.get()), range_left.get()); maxv = 1 + Math.max(range_up.get(), range_down.get()); + + horizontalRange = (int) Math.ceil(range.get() + 1); + verticalRange = (int) Math.ceil(range.get()); } // Flatten @@ -401,7 +411,7 @@ private void onTickPre(TickEvent.Pre event) { AABB box = new AABB(Vec3.atCenterOf(pos1), Vec3.atCenterOf(pos2)); // Find blocks to break - BlockIterator.register(Math.max((int) Math.ceil(range.get() + 1), maxh), Math.max((int) Math.ceil(range.get()), maxv), (blockPos, blockState) -> { + BlockIterator.register(Math.max(horizontalRange, maxh), Math.max(verticalRange, maxv), (blockPos, blockState) -> { Vec3 center = Vec3.atCenterOf(blockPos); switch (shape.get()) { case Sphere -> {