From 515a763adcb3b1389a1c5a80c7c4c1390599e6af Mon Sep 17 00:00:00 2001 From: Cloudburst Date: Thu, 25 Mar 2021 19:32:06 +0100 Subject: [PATCH] stuff --- .../rejects/MeteorRejectsAddon.java | 2 + .../rejects/commands/BookDupeCommand.java | 59 ++++ .../cloudburst/rejects/commands/Notebot.java | 2 +- .../cloudburst/rejects/modules/Lavacast.java | 255 ++++++++++++++++++ 4 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 src/main/java/cloudburst/rejects/commands/BookDupeCommand.java create mode 100644 src/main/java/cloudburst/rejects/modules/Lavacast.java diff --git a/src/main/java/cloudburst/rejects/MeteorRejectsAddon.java b/src/main/java/cloudburst/rejects/MeteorRejectsAddon.java index 63b0f75..c560c0f 100644 --- a/src/main/java/cloudburst/rejects/MeteorRejectsAddon.java +++ b/src/main/java/cloudburst/rejects/MeteorRejectsAddon.java @@ -19,8 +19,10 @@ public class MeteorRejectsAddon extends MeteorAddon { Modules.get().add(new AutoMountBypassDupe()); Modules.get().add(new AutoPot()); + Modules.get().add(new Lavacast()); Modules.get().add(new RenderInvisible()); + Commands.get().add(new BookDupeCommand()); Commands.get().add(new GiveCommand()); Commands.get().add(new Notebot()); } diff --git a/src/main/java/cloudburst/rejects/commands/BookDupeCommand.java b/src/main/java/cloudburst/rejects/commands/BookDupeCommand.java new file mode 100644 index 0000000..919e9fd --- /dev/null +++ b/src/main/java/cloudburst/rejects/commands/BookDupeCommand.java @@ -0,0 +1,59 @@ +package cloudburst.rejects.commands; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; +import minegame159.meteorclient.commands.Command; +import minegame159.meteorclient.utils.player.ChatUtils; +import minegame159.meteorclient.utils.player.InvUtils; +import net.minecraft.command.CommandSource; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.StringTag; +import net.minecraft.network.packet.c2s.play.BookUpdateC2SPacket; +import net.minecraft.text.LiteralText; +import net.minecraft.util.Hand; + +import static com.mojang.brigadier.Command.SINGLE_SUCCESS; + +//Credit to the original author (https://github.com/Gaider10/BookDupe) (i think) for some of this code. +public class BookDupeCommand extends Command { + + private final SimpleCommandExceptionType BOOK_NOT_FOUND_EXCEPTION = new SimpleCommandExceptionType(new LiteralText("No writeable book found in inventory.")); + private final ItemStack DUPE_BOOK = new ItemStack(Items.WRITABLE_BOOK, 1); + + public BookDupeCommand() { + super("dupe", "Dupes using a held, writable book."); + + StringBuilder stringBuilder = new StringBuilder(); + + for(int i = 0; i < 21845; i++){ + stringBuilder.append((char) 2048); + } + + String str1 = stringBuilder.toString(); + + + + ListTag listTag = new ListTag(); + listTag.addTag(0, StringTag.of(str1)); + + for(int i = 1; i < 40; i++){ + listTag.addTag(i, StringTag.of("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); + } + + DUPE_BOOK.putSubTag("title", StringTag.of("a")); + DUPE_BOOK.putSubTag("pages", listTag); + } + + @Override + public void build(LiteralArgumentBuilder builder) { + builder.executes(context -> { + if (InvUtils.getHand(Items.WRITABLE_BOOK) != Hand.MAIN_HAND) ChatUtils.prefixError("BOOK DUPE", "No book found, you must be holding a writable book!"); + else mc.player.networkHandler.sendPacket(new BookUpdateC2SPacket(DUPE_BOOK, true, mc.player.inventory.selectedSlot)); + + return SINGLE_SUCCESS; + }); + } + +} \ No newline at end of file diff --git a/src/main/java/cloudburst/rejects/commands/Notebot.java b/src/main/java/cloudburst/rejects/commands/Notebot.java index 66ecce6..1e32bb1 100644 --- a/src/main/java/cloudburst/rejects/commands/Notebot.java +++ b/src/main/java/cloudburst/rejects/commands/Notebot.java @@ -199,7 +199,7 @@ public class Notebot extends Command { currentNote++; return; } - mc.player.playSound(SoundEvents.BLOCK_NOTE_BLOCK_HARP, 2f, note); + mc.player.playSound(SoundEvents.BLOCK_NOTE_BLOCK_HARP, 2f, (float) Math.pow(2.0D, (note - 12) / 12.0D)); currentNote++; } diff --git a/src/main/java/cloudburst/rejects/modules/Lavacast.java b/src/main/java/cloudburst/rejects/modules/Lavacast.java new file mode 100644 index 0000000..2974360 --- /dev/null +++ b/src/main/java/cloudburst/rejects/modules/Lavacast.java @@ -0,0 +1,255 @@ +package cloudburst.rejects.modules; + +import meteordevelopment.orbit.EventHandler; +import minegame159.meteorclient.events.render.RenderEvent; +import minegame159.meteorclient.events.world.TickEvent; +import minegame159.meteorclient.modules.Categories; +import minegame159.meteorclient.modules.Module; +import minegame159.meteorclient.rendering.Renderer; +import minegame159.meteorclient.rendering.ShapeMode; +import minegame159.meteorclient.settings.EnumSetting; +import minegame159.meteorclient.settings.IntSetting; +import minegame159.meteorclient.settings.Setting; +import minegame159.meteorclient.settings.SettingGroup; +import minegame159.meteorclient.utils.player.ChatUtils; +import minegame159.meteorclient.utils.player.InvUtils; +import minegame159.meteorclient.utils.player.Rotations; +import minegame159.meteorclient.utils.render.color.SettingColor; +import net.minecraft.block.Blocks; +import net.minecraft.item.Items; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.RaycastContext; + + +public class Lavacast extends Module { + + private enum Stage { + None, + LavaDown, + LavaUp, + WaterDown, + WaterUp + } + + private int dist; + private BlockPos placeFluidPos; + private int tick; + private Stage stage = Stage.None; + + private final SettingGroup sgGeneral = settings.getDefaultGroup(); + private final SettingGroup sgShape = settings.createGroup("Shape", false); + private final Setting tickInterval = sgGeneral.add(new IntSetting.Builder() + .name("tick-interval") + .description("Interval") + .defaultValue(2) + .min(0) + .sliderMax(20) + .build() + ); + + private final Setting distMin = sgShape.add(new IntSetting.Builder() + .name("minimum-distance") + .description("Top plane cutoff") + .defaultValue(5) + .min(0) + .sliderMax(10) + .build() + ); + private final Setting lavaDownMult = sgShape.add(new IntSetting.Builder() + .name("lava-down-mulipiler") + .description("Controlls the shape of the cast") + .defaultValue(40) + .min(1) + .sliderMax(100) + .build() + ); + private final Setting lavaUpMult = sgShape.add(new IntSetting.Builder() + .name("lava-up-mulipiler") + .description("Controlls the shape of the cast") + .defaultValue(8) + .min(1) + .sliderMax(100) + .build() + ); + private final Setting waterDownMult = sgShape.add(new IntSetting.Builder() + .name("water-down-mulipiler") + .description("Controlls the shape of the cast") + .defaultValue(4) + .min(1) + .sliderMax(100) + .build() + ); + private final Setting waterUpMult = sgShape.add(new IntSetting.Builder() + .name("water-up-mulipiler") + .description("Controlls the shape of the cast") + .defaultValue(1) + .min(1) + .sliderMax(100) + .build() + ); + + public Lavacast() { + super(Categories.World, "lavacast", "Automatically Lavacasts"); + } + + @Override + public void onActivate() { + if (mc.player == null || mc.world == null) toggle(); + tick = 0; + stage = Stage.None; + placeFluidPos = getTargetBlockPos().up(); + if (placeFluidPos == null) { + placeFluidPos = mc.player.getBlockPos().down(); + } + final BlockHitResult result = mc.world.raycast(new RaycastContext( + Vec3d.ofCenter(offsetByPlayerRotation(placeFluidPos.down())), Vec3d.ofCenter(offsetByPlayerRotation(placeFluidPos).down(250)), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.ANY, mc.player + )); + if (result == null || result.getType() != HitResult.Type.BLOCK) { + ChatUtils.moduleError(this,"No floor beneath you"); + toggle(); + return; + } + dist = placeFluidPos.getY() - result.getBlockPos().getY(); + ChatUtils.moduleInfo(this,"Distance: (highlight)%d(default).", dist); + } + + @EventHandler + private void onTick(TickEvent.Pre event) { + if (mc.player == null || mc.world == null) return; + tick++; + if (stage == Stage.LavaDown && tick < dist*lavaDownMult.get()) return; + if (stage == Stage.LavaUp && tick < dist*lavaUpMult.get()) return; + if (stage == Stage.WaterDown && tick < dist*waterDownMult.get()) return; + if (stage == Stage.WaterUp && tick < dist*waterUpMult.get()) return; + if (dist < distMin.get()) toggle(); + if (tick < tickInterval.get()) { + return; + } + tick = 0; + if (stage == Stage.None && mc.world.getBlockState(placeFluidPos).getBlock() != Blocks.AIR) { + Rotations.rotate(Rotations.getYaw(placeFluidPos), Rotations.getPitch(placeFluidPos), 100, this::updateBlockBreakingProgress); + return; + } + switch (stage) { + case None: { + Rotations.rotate(Rotations.getYaw(placeFluidPos),Rotations.getPitch(placeFluidPos),100, this::placeLava); + stage = Stage.LavaDown; + break; + } + case LavaDown: { + Rotations.rotate(Rotations.getYaw(placeFluidPos),Rotations.getPitch(placeFluidPos),100, this::pickupLiquid); + stage = Stage.LavaUp; + break; + } + case LavaUp: { + Rotations.rotate(Rotations.getYaw(placeFluidPos),Rotations.getPitch(placeFluidPos),100, this::placeWater); + stage = Stage.WaterDown; + break; + } + case WaterDown: { + Rotations.rotate(Rotations.getYaw(placeFluidPos),Rotations.getPitch(placeFluidPos),100, this::pickupLiquid); + stage = Stage.WaterUp; + break; + } + case WaterUp: { + dist--; + Rotations.rotate(Rotations.getYaw(placeFluidPos),Rotations.getPitch(placeFluidPos),100, this::placeLava); + stage = Stage.LavaDown; + break; + } + } + } + + @EventHandler + private void onRender(RenderEvent event) { + if (placeFluidPos == null) return; + double x1 = placeFluidPos.getX(); + double y1 = placeFluidPos.getY(); + double z1 = placeFluidPos.getZ(); + double x2 = x1+1; + double y2 = y1+1; + double z2 = z1+1; + + SettingColor color = new SettingColor(128, 128, 128); + if (stage == Stage.LavaDown) color = new SettingColor(255, 180, 10); + if (stage == Stage.LavaUp) color = new SettingColor(255, 180, 128); + if (stage == Stage.WaterDown) color = new SettingColor(10, 10, 255); + if (stage == Stage.WaterUp) color = new SettingColor(128, 128, 255); + SettingColor color1 = color; + color1.a = 75; + + Renderer.boxWithLines(Renderer.NORMAL, Renderer.LINES, x1, y1, z1, x2, y2, z2, color1, color, ShapeMode.Both, 0); + } + + private void placeLava() { + int slot = InvUtils.findItemInHotbar(Items.LAVA_BUCKET); + if (slot == -1) { + ChatUtils.moduleError(this,"No lava bucket found."); + toggle(); + return; + } + int prevSlot = mc.player.inventory.selectedSlot; + InvUtils.swap(slot); + mc.interactionManager.interactItem(mc.player,mc.world,Hand.MAIN_HAND); + InvUtils.swap(prevSlot); + } + + private void placeWater() { + int slot = InvUtils.findItemInHotbar(Items.WATER_BUCKET); + if (slot == -1) { + ChatUtils.moduleError(this,"No water bucket found."); + toggle(); + return; + } + int prevSlot = mc.player.inventory.selectedSlot; + InvUtils.swap(slot); + mc.interactionManager.interactItem(mc.player,mc.world,Hand.MAIN_HAND); + InvUtils.swap(prevSlot); + } + + private void pickupLiquid() { + int slot = InvUtils.findItemInHotbar(Items.BUCKET); + if (slot == -1) { + ChatUtils.moduleError(this,"No bucket found."); + toggle(); + return; + } + int prevSlot = mc.player.inventory.selectedSlot; + InvUtils.swap(slot); + mc.interactionManager.interactItem(mc.player,mc.world,Hand.MAIN_HAND); + InvUtils.swap(prevSlot); + } + + private void updateBlockBreakingProgress() { + mc.interactionManager.updateBlockBreakingProgress(placeFluidPos,Direction.UP); + } + + private BlockPos getTargetBlockPos() { + HitResult blockHit = mc.crosshairTarget; + if (blockHit.getType() != HitResult.Type.BLOCK) { + return null; + } + return ((BlockHitResult) blockHit).getBlockPos(); + } + + private BlockPos offsetByPlayerRotation(BlockPos pos) { + double rotation = (mc.player.yaw - 90) % 360; + if (rotation < 0) rotation += 360.0; + if (0 <= rotation && rotation < 22.5) return pos.south(); + else if (22.5 <= rotation && rotation < 67.5) return pos.south().west(); + else if (67.5 <= rotation && rotation < 112.5) return pos.west(); + else if (112.5 <= rotation && rotation < 157.5) return pos.north().west(); + else if (157.5 <= rotation && rotation < 202.5) return pos.north(); + else if (202.5 <= rotation && rotation < 247.5) return pos.north().east(); + else if (247.5 <= rotation && rotation < 292.5) return pos.east(); + else if (292.5 <= rotation && rotation < 337.5) return pos.south().east(); + else if (337.5 <= rotation && rotation < 360.0) return pos.south(); + return pos; + } + +}