diff --git a/README.md b/README.md index ba61f31..0321c84 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ # Features ## Modules - AntiBot (Removed from Meteor in [166fc](https://github.com/MeteorDevelopment/meteor-client/commit/166fccc73e53de6cfdbe41ea58dc593a2f5011f6#diff-05896d5a7f735a14ee8da5d12fbd24585862ca68efdf32b9401b3f4329d17c73)) +- Insta Mine (Removed from Meteor in [62cd0](https://github.com/MeteorDevelopment/meteor-client/commit/62cd0461e48a6c50f040bf48de25be1fa4eba77e)) - AntiSpawnpoint - AntiVanish - AutoBedTrap (Ported from [BleachHack-CupEdition](https://github.com/CUPZYY/BleachHack-CupEdition/blob/master/CupEdition-1.17/src/main/java/bleach/hack/module/mods/AutoBedtrap.java)) diff --git a/src/main/java/anticope/rejects/MeteorRejectsAddon.java b/src/main/java/anticope/rejects/MeteorRejectsAddon.java index 26d471f..48f0ec2 100644 --- a/src/main/java/anticope/rejects/MeteorRejectsAddon.java +++ b/src/main/java/anticope/rejects/MeteorRejectsAddon.java @@ -54,6 +54,7 @@ public class MeteorRejectsAddon extends MeteorAddon { modules.add(new CustomPackets()); modules.add(new GhostMode()); modules.add(new Glide()); + modules.add(new InstaMine()); modules.add(new InteractionMenu()); modules.add(new Lavacast()); modules.add(new NewChunks()); diff --git a/src/main/java/anticope/rejects/modules/InstaMine.java b/src/main/java/anticope/rejects/modules/InstaMine.java new file mode 100644 index 0000000..3fbfd49 --- /dev/null +++ b/src/main/java/anticope/rejects/modules/InstaMine.java @@ -0,0 +1,132 @@ +package anticope.rejects.modules; + +import anticope.rejects.MeteorRejectsAddon; +import meteordevelopment.meteorclient.events.entity.player.StartBreakingBlockEvent; +import meteordevelopment.meteorclient.events.render.Render3DEvent; +import meteordevelopment.meteorclient.events.world.TickEvent; +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.player.Rotations; +import meteordevelopment.meteorclient.utils.render.color.SettingColor; +import meteordevelopment.meteorclient.utils.world.BlockUtils; +import meteordevelopment.orbit.EventHandler; +import net.minecraft.item.Items; +import net.minecraft.network.packet.c2s.play.HandSwingC2SPacket; +import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; + +public class InstaMine extends Module { + + private final SettingGroup sgGeneral = settings.getDefaultGroup(); + private final SettingGroup sgRender = settings.createGroup("Render"); + + private final Setting tickDelay = sgGeneral.add(new IntSetting.Builder() + .name("delay") + .description("The delay between breaks.") + .defaultValue(0) + .min(0) + .sliderMax(20) + .build() + ); + + private final Setting pick = sgGeneral.add(new BoolSetting.Builder() + .name("only-pick") + .description("Only tries to mine the block if you are holding a pickaxe.") + .defaultValue(true) + .build() + ); + + private final Setting rotate = sgGeneral.add(new BoolSetting.Builder() + .name("rotate") + .description("Faces the blocks being mined server side.") + .defaultValue(true) + .build() + ); + + // Render + + private final Setting render = sgRender.add(new BoolSetting.Builder() + .name("render") + .description("Renders a block overlay on the block being broken.") + .defaultValue(true) + .build() + ); + + private final Setting shapeMode = sgRender.add(new EnumSetting.Builder() + .name("shape-mode") + .description("How the shapes are rendered.") + .defaultValue(ShapeMode.Both) + .build() + ); + + private final Setting sideColor = sgRender.add(new ColorSetting.Builder() + .name("side-color") + .description("The color of the sides of the blocks being rendered.") + .defaultValue(new SettingColor(204, 0, 0, 10)) + .build() + ); + + private final Setting lineColor = sgRender.add(new ColorSetting.Builder() + .name("line-color") + .description("The color of the lines of the blocks being rendered.") + .defaultValue(new SettingColor(204, 0, 0, 255)) + .build() + ); + + private int ticks; + + private final BlockPos.Mutable blockPos = new BlockPos.Mutable(0, -1, 0); + private Direction direction; + + public InstaMine() { + super(MeteorRejectsAddon.CATEGORY, "insta-mine", "Attempts to instantly mine blocks."); + } + + @Override + public void onActivate() { + ticks = 0; + blockPos.set(0, -1, 0); + } + + @EventHandler + private void onStartBreakingBlock(StartBreakingBlockEvent event) { + direction = event.direction; + blockPos.set(event.blockPos); + } + + @EventHandler + private void onTick(TickEvent.Pre event) { + if (ticks >= tickDelay.get()) { + ticks = 0; + + if (shouldMine()) { + if (rotate.get()) { + Rotations.rotate(Rotations.getYaw(blockPos), Rotations.getPitch(blockPos), () -> mc.getNetworkHandler().sendPacket(new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK, blockPos, direction))); + } else { + mc.getNetworkHandler().sendPacket(new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.STOP_DESTROY_BLOCK, blockPos, direction)); + } + + mc.getNetworkHandler().sendPacket(new HandSwingC2SPacket(Hand.MAIN_HAND)); + + } + } else { + ticks++; + } + } + + private boolean shouldMine() { + if (blockPos.getY() == -1) return false; + if (!BlockUtils.canBreak(blockPos)) return false; + return !pick.get() || (mc.player.getMainHandStack().getItem() == Items.DIAMOND_PICKAXE || mc.player.getMainHandStack().getItem() == Items.NETHERITE_PICKAXE); + } + + @EventHandler + private void onRender(Render3DEvent event) { + if (!render.get() || !shouldMine()) return; + event.renderer.box(blockPos, sideColor.get(), lineColor.get(), shapeMode.get(), 0); + } +} \ No newline at end of file