From e570a638597090088222e4ad722852a26d2491fc Mon Sep 17 00:00:00 2001 From: Gingerbeard Date: Sat, 31 May 2025 07:06:33 -0400 Subject: [PATCH] Added Silent Mine Module --- .../meteorclient/systems/modules/Modules.java | 1 + .../systems/modules/player/SilentMine.java | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/main/java/meteordevelopment/meteorclient/systems/modules/player/SilentMine.java diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java index f9394db09b..cf96e452ba 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java @@ -443,6 +443,7 @@ private void initPlayer() { add(new PotionSaver()); add(new Reach()); add(new Rotation()); + add(new SilentMine()); add(new SpeedMine()); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/SilentMine.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/SilentMine.java new file mode 100644 index 0000000000..016c84d6b1 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/SilentMine.java @@ -0,0 +1,54 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.systems.modules.player; + +import meteordevelopment.meteorclient.events.packets.PacketEvent; +import meteordevelopment.meteorclient.events.world.TickEvent; +import meteordevelopment.meteorclient.systems.modules.Categories; +import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.orbit.EventHandler; +import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; + +public class SilentMine extends Module { + public SilentMine() { + super(Categories.Player, "silent-mine", "Prevents block breaking animations from being visible to other players."); + } + + private boolean mining; + private BlockPos lastBlockPos; + private Direction lastDirection; + + @Override + public void onDeactivate() { + mining = false; + } + + @EventHandler + private void onSendPacket(PacketEvent.Send event) { + if (!(event.packet instanceof PlayerActionC2SPacket)) return; + + PlayerActionC2SPacket packet = (PlayerActionC2SPacket) event.packet; + + if (packet.getAction() == PlayerActionC2SPacket.Action.START_DESTROY_BLOCK) { + mining = true; + lastBlockPos = packet.getPos(); + lastDirection = packet.getDirection(); + } + + if (packet.getAction() == PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK) { + mining = false; + } + } + + @EventHandler + private void onTick(TickEvent.Pre event) { + if (mining) { + mc.getNetworkHandler().sendPacket(new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.ABORT_DESTROY_BLOCK, lastBlockPos, lastDirection)); + } + } +}