From fdf8e4d0cd56150cded46ffb0a8ad3b378d0396e Mon Sep 17 00:00:00 2001
From: Cloudburst
Date: Fri, 20 Aug 2021 09:31:19 +0200
Subject: [PATCH] improve autobedtrap closes #34
---
README.md | 6 +-
.../rejects/modules/AutoBedTrap.java | 108 ++++++++++++------
2 files changed, 74 insertions(+), 40 deletions(-)
diff --git a/README.md b/README.md
index c18965f..ef01951 100644
--- a/README.md
+++ b/README.md
@@ -6,8 +6,10 @@
An addon to Meteor Client that adds modules and commands that were too useless to be added to Meteor directly.
# How to use
diff --git a/src/main/java/cloudburst/rejects/modules/AutoBedTrap.java b/src/main/java/cloudburst/rejects/modules/AutoBedTrap.java
index 145e9fb..f96cf79 100644
--- a/src/main/java/cloudburst/rejects/modules/AutoBedTrap.java
+++ b/src/main/java/cloudburst/rejects/modules/AutoBedTrap.java
@@ -3,20 +3,32 @@ package cloudburst.rejects.modules;
import cloudburst.rejects.MeteorRejectsAddon;
import meteordevelopment.orbit.EventHandler;
import meteordevelopment.meteorclient.events.world.TickEvent;
+import meteordevelopment.meteorclient.settings.BlockListSetting;
import meteordevelopment.meteorclient.settings.BoolSetting;
+import meteordevelopment.meteorclient.settings.DoubleSetting;
import meteordevelopment.meteorclient.settings.IntSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module;
+import meteordevelopment.meteorclient.utils.misc.Pool;
import meteordevelopment.meteorclient.utils.player.FindItemResult;
import meteordevelopment.meteorclient.utils.player.InvUtils;
+import meteordevelopment.meteorclient.utils.world.BlockIterator;
import meteordevelopment.meteorclient.utils.world.BlockUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.lwjgl.system.CallbackI.B;
+import org.lwjgl.system.CallbackI.P;
+
import net.minecraft.block.BedBlock;
+import net.minecraft.block.Block;
+import net.minecraft.block.Blocks;
+import net.minecraft.item.BlockItem;
import net.minecraft.item.Items;
-import net.minecraft.util.hit.BlockHitResult;
-import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
public class AutoBedTrap extends Module {
@@ -37,50 +49,63 @@ public class AutoBedTrap extends Module {
.defaultValue(true)
.build()
);
-
- BlockPos bed1;
- Direction bed2direction;
- BlockPos bed2;
+
+ private final Setting range = sgGeneral.add(new DoubleSetting.Builder()
+ .name("range")
+ .description("The break range.")
+ .defaultValue(4)
+ .min(0)
+ .build()
+ );
+
+ private final Setting> blockTypes = sgGeneral.add(new BlockListSetting.Builder()
+ .name("blocks")
+ .description("The blocks you bedtrap with.")
+ .defaultValue(Arrays.asList(Blocks.OBSIDIAN))
+ .build()
+ );
+
+ private final Pool blockPosPool = new Pool<>(BlockPos.Mutable::new);
+ private final List blocks = new ArrayList<>();
+
int cap = 0;
- boolean bed;
public AutoBedTrap() {
- super(MeteorRejectsAddon.CATEGORY, "auto-bed-trap", "Automatically places obsidian around bed");
+ super(MeteorRejectsAddon.CATEGORY, "auto-bed-trap", "Automatically places obsidian around beds");
}
@Override
- public void onActivate() {
- cap = 0;
- bed1 = null;
- if (mc.crosshairTarget == null) {
- error("Not looking at a bed. Disabling.");
- toggle();
- }
- bed1 = mc.crosshairTarget.getType() == HitResult.Type.BLOCK ? ((BlockHitResult) mc.crosshairTarget).getBlockPos() : null;
- if (bed1 == null || !(mc.world.getBlockState(bed1).getBlock() instanceof BedBlock)) {
- error("Not looking at a bed. Disabling.");
- toggle();
- }
+ public void onDeactivate() {
+ for (BlockPos.Mutable blockPos : blocks) blockPosPool.free(blockPos);
+ blocks.clear();
}
@EventHandler
private void onTick(TickEvent.Pre event) {
- bed2direction = BedBlock.getOppositePartDirection(mc.world.getBlockState(bed1));
- if (bed2direction == Direction.EAST) {
- bed2 = bed1.east(1);
- } else if (bed2direction == Direction.NORTH) {
- bed2 = bed1.north(1);
- } else if (bed2direction == Direction.SOUTH) {
- bed2 = bed1.south(1);
- } else if (bed2direction == Direction.WEST) {
- bed2 = bed1.west(1);
- }
- placeTickAround(bed1);
- placeTickAround(bed2);
+ BlockIterator.register((int) Math.ceil(range.get()), (int) Math.ceil(range.get()), (blockPos, blockState) -> {
+ if (!BlockUtils.canBreak(blockPos, blockState)) return;
+
+ if (!(blockState.getBlock() instanceof BedBlock)) return;
+
+ blocks.add(blockPosPool.get().set(blockPos));
+ });
+
}
- public void placeTickAround(BlockPos block) {
+ @EventHandler
+ private void onTickPost(TickEvent.Post event) {
+ boolean noBlocks = false;
+ for (BlockPos blockPos : blocks) {
+ if (!placeTickAround(blockPos)) {
+ noBlocks = true;
+ break;
+ }
+ }
+ if (noBlocks && isActive()) toggle();
+ }
+
+ public boolean placeTickAround(BlockPos block) {
for (BlockPos b : new BlockPos[]{
block.up(), block.west(),
block.north(), block.south(),
@@ -88,23 +113,30 @@ public class AutoBedTrap extends Module {
if (cap >= bpt.get()) {
cap = 0;
- return;
+ return true;
}
- FindItemResult findBlock = InvUtils.findInHotbar(Items.OBSIDIAN);
+ if (blockTypes.get().contains(mc.world.getBlockState(b).getBlock())) return true;
+
+ FindItemResult findBlock = InvUtils.findInHotbar((item) -> {
+ if (!(item.getItem() instanceof BlockItem)) return false;
+ BlockItem bitem = (BlockItem)item.getItem();
+ return blockTypes.get().contains(bitem.getBlock());
+ });
if (!findBlock.found()) {
error("No specified blocks found. Disabling.");
- toggle();
+ return false;
}
if (BlockUtils.place(b, findBlock, rotate.get(), 10, false)) {
cap++;
if (cap >= bpt.get()) {
- return;
+ return true;
}
};
}
cap = 0;
+ return true;
}
}