rewrite prone

This commit is contained in:
C10udburst
2022-03-17 17:33:48 +01:00
parent b75cd8a2e2
commit 2b35a3e6ec

View File

@@ -4,54 +4,105 @@ import anticope.rejects.MeteorRejectsAddon;
import meteordevelopment.meteorclient.events.world.CollisionShapeEvent; import meteordevelopment.meteorclient.events.world.CollisionShapeEvent;
import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.settings.BlockListSetting; import meteordevelopment.meteorclient.settings.BlockListSetting;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.EnumSetting; import meteordevelopment.meteorclient.settings.EnumSetting;
import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup; import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.player.FindItemResult;
import meteordevelopment.meteorclient.utils.player.InvUtils; import meteordevelopment.meteorclient.utils.player.InvUtils;
import meteordevelopment.meteorclient.utils.player.Rotations;
import meteordevelopment.meteorclient.utils.world.BlockUtils; import meteordevelopment.meteorclient.utils.world.BlockUtils;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import java.util.Arrays;
import java.util.List; import java.util.List;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.shape.VoxelShapes; import net.minecraft.util.shape.VoxelShapes;
public class Prone extends Module { public class Prone extends Module {
public enum Mode { public enum Mode {
Maintain, WaterBucket,
JustMaintain,
Collision Collision
} }
private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgGeneral = settings.getDefaultGroup();
private final Setting<Mode> mode = sgGeneral.add(new EnumSetting.Builder<Mode>() private final Setting<Mode> mode = sgGeneral.add(new EnumSetting.Builder<Mode>()
.name("mode") .name("mode")
.description("The mode used.") .description("The mode used.")
.defaultValue(Mode.Maintain) .defaultValue(Mode.WaterBucket)
.build() .build()
);
private Setting<Boolean> autoMaintain = sgGeneral.add(new BoolSetting.Builder()
.name("auto-maintain")
.description("Switch to maintain mode when prone.")
.defaultValue(true)
.build()
); );
private final Setting<List<Block>> blocks = sgGeneral.add(new BlockListSetting.Builder() private final Setting<List<Block>> blocks = sgGeneral.add(new BlockListSetting.Builder()
.name("blocks") .name("blocks")
.description("Selected blocks.") .description("Selected blocks.")
.visible(() -> (mode.get() == Mode.Maintain))
.build() .build()
); );
private int waterModeStage = 0;
private List<BlockPos> waterModeTargets = Arrays.asList(
new BlockPos(0, 0, 1),
new BlockPos(0, 0, -1),
new BlockPos(1, 0, 0),
new BlockPos(-1, 0, 0)
);
public Prone() { public Prone() {
super(MeteorRejectsAddon.CATEGORY, "prone", "Become prone on demand."); super(MeteorRejectsAddon.CATEGORY, "prone", "Become prone on demand.");
} }
@Override
public void onDeactivate() {
waterModeStage = 0;
}
@EventHandler @EventHandler
private void onTick(TickEvent.Post event) { private void onTick(TickEvent.Post event) {
if (mode.get() == Mode.Maintain && mc.player.isInSwimmingPose() && !mc.player.isSubmergedInWater()) { if (autoMaintain.get() && mc.player.isInSwimmingPose() && !mc.player.isSubmergedInWater()) {
BlockUtils.place(mc.player.getBlockPos().up(), InvUtils.find((itemstack) -> {return (itemstack.getItem() instanceof BlockItem blockitem && blocks.get().contains(blockitem.getBlock()));}), true, 1); BlockUtils.place(mc.player.getBlockPos().up(), InvUtils.find((itemstack) -> {return (itemstack.getItem() instanceof BlockItem blockitem && blocks.get().contains(blockitem.getBlock()));}), true, 1);
} }
if (mode.get() == Mode.WaterBucket && mc.player.isInSwimmingPose() && waterModeStage > 0) {
mc.options.forwardKey.setPressed(false);
waterModeStage = 0;
}
if (mode.get() == Mode.WaterBucket && !mc.player.isInSwimmingPose()) {
if (mc.player.isSubmergedInWater()) {
mc.options.sprintKey.setPressed(true);
waterModeStage += 1;
if (waterModeStage > 2) {
mc.options.forwardKey.setPressed(true);
}
} else {
FindItemResult result = InvUtils.findInHotbar(Items.WATER_BUCKET);
if (!result.found()) {
waterModeStage = 0;
}
for (BlockPos offset : waterModeTargets) {
BlockPos target = mc.player.getBlockPos().add(offset);
if (mc.world.getBlockState(target).isFullCube(mc.world, target) && mc.world.getBlockState(target.up()).isAir()) {
useBucket(result, target);
break;
}
}
}
}
} }
@EventHandler @EventHandler
@@ -64,4 +115,19 @@ public class Prone extends Module {
event.shape = VoxelShapes.fullCube(); event.shape = VoxelShapes.fullCube();
} }
private void useBucket(FindItemResult bucket, BlockPos target) {
if (!bucket.found()) return;
Rotations.rotate(Rotations.getYaw(target), Rotations.getPitch(target), 10, true, () -> {
if (bucket.isOffhand()) {
mc.interactionManager.interactItem(mc.player, mc.world, Hand.OFF_HAND);
} else {
InvUtils.swap(bucket.slot(), true);
mc.interactionManager.interactItem(mc.player, mc.world, Hand.MAIN_HAND);
InvUtils.swapBack();
}
});
}
} }