Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Часть функционала Spider Spookytime 1.16.5

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Янв 2025
Сообщения
123
Реакции
0
Выберите загрузчик игры
  1. Прочие моды
крч спайдер как и с трезубцем как и без как и с блоками
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.

код-
Код:
Expand Collapse Copy
import dev.kodek.client.api.events.orbit.EventHandler;
import dev.kodek.client.managers.events.player.MotionEvent;
import dev.kodek.client.managers.events.player.UpdateEvent;
import dev.kodek.client.managers.module.Category;
import dev.kodek.client.managers.module.Module;
import dev.kodek.client.managers.module.ModuleInfo;
import dev.kodek.client.managers.module.settings.impl.ModeSetting;
import dev.kodek.client.managers.module.settings.impl.SliderSetting;
import dev.kodek.client.utils.other.Instance;
import dev.kodek.client.utils.player.RotationUtil;
import dev.kodek.client.utils.timer.TimerUtil;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.play.client.CEntityActionPacket;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.mojang.blaze3d.matrix.MatrixStack;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleInfo(name = "Spider", category = Category.MOVEMENT, desc = "Лазание по стенам как паук")
public class Spider extends Module {

    public static Spider getInstance() {
        return Instance.get(Spider.class);
    }

    private final ModeSetting mode = new ModeSetting(this, "Режим", "Blocks", "Matrix", "WaterSpam", "SpookyTime");
    private final SliderSetting spiderSpeed = new SliderSetting(this, "Speed", 2.0f, 1.0f, 10.0f, 0.05f)
            .setVisible(() -> mode.is("Matrix"));
    private final SliderSetting waterSpamDelay = new SliderSetting(this, "Задержка", 100f, 50f, 500f, 10f)
            .setVisible(() -> mode.is("WaterSpam"));

    private final TimerUtil timerUtil = new TimerUtil();
    private final Random random = new Random();
    private Timer timer = new Timer();
    private boolean canUse = true;
    private long lastBucketUse = 0L;
    private int prevSlot = -1;

    @Override
    protected void onEnable() {
        if (mode.is("SpookyTime") || mode.is("WaterSpam")) {
            mc.gameSettings.keyBindSneak.setPressed(false);
            mc.gameSettings.keyBindJump.setPressed(false);
        }
        timer = new Timer();
        canUse = true;
    }

    @Override
    protected void onDisable() {
        if (mode.is("SpookyTime") || mode.is("WaterSpam")) {
            timer.cancel();
            timer = new Timer();
            canUse = true;
            if (mc.gameSettings != null) {
                mc.gameSettings.keyBindSneak.setPressed(false);
                mc.gameSettings.keyBindJump.setPressed(false);
            }
        }
    }

    @EventHandler
    public void onMotion(MotionEvent event) {
        if (mode.is("Matrix")) {
            handleMatrixMode(event);
        }
        if (mode.is("SpookyTime")) {
            handleSpookyTimeMode();
        }
        if (mode.is("WaterSpam")) {
            handleWaterSpamMode();
        }
    }

    @EventHandler
    public void onUpdate(UpdateEvent event) {
        if (mode.is("Blocks")) {
            handleBlocksMode();
        }
    }

    private void handleMatrixMode(MotionEvent event) {
        if (!mc.player.collidedHorizontally) return;

        long speed = MathHelper.clamp(500 - (spiderSpeed.getValue().longValue() / 2 * 100), 0, 500);
        if (timerUtil.hasReached(speed)) {
            event.setOnGround(true);
            mc.player.setOnGround(true);
            mc.player.collidedVertically = true;
            mc.player.collidedHorizontally = true;
            mc.player.isAirBorne = true;
            mc.player.jump();
            timerUtil.reset();
        }
    }

    private void handleSpookyTimeMode() {
        if (mc.player == null || mc.player.isInWater()) return;

        if (!mc.player.collidedHorizontally) {
            if (mc.gameSettings.keyBindSneak.isKeyDown()) {
                mc.gameSettings.keyBindSneak.setPressed(false);
            }
            return;
        }

        int waterSlot = findWaterBucket();
        if (waterSlot == -1) return;

        if (mc.player.isOnGround()) {
            mc.player.jump();
            return;
        }

        if (canUse) {
            useWaterBucket(waterSlot);
            double boost = 0.42 + (random.nextDouble() * 0.03);
            mc.player.motion.y = boost;
            canUse = false;

            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    canUse = true;
                }
            }, 450 + random.nextInt(60) - 30);
        }

        mc.gameSettings.keyBindSneak.setPressed(true);
    }

    private void handleWaterSpamMode() {
        if (mc.player == null) return;

        if (mc.player.isInWater()) {
            double height = getHeightFromGround();
            if (height >= 3.0) {
                mc.player.setMotion(mc.player.getMotion().x, 0.20, mc.player.getMotion().z);
            }
            return;
        }

        if (!mc.player.collidedHorizontally) {
            if (mc.gameSettings.keyBindSneak.isKeyDown()) {
                mc.gameSettings.keyBindSneak.setPressed(false);
            }
            if (mc.gameSettings.keyBindJump.isKeyDown()) {
                mc.gameSettings.keyBindJump.setPressed(false);
            }
            return;
        }

        int waterSlot = findWaterBucket();
        if (waterSlot == -1) return;

        mc.gameSettings.keyBindJump.setPressed(true);
        mc.gameSettings.keyBindSneak.setPressed(true);

        if (canUse) {
            double height = getHeightFromGround();
            if (height >= 3.0) {
                mc.player.rotationPitch = 75.0f;
            }
            useWaterBucket(waterSlot);
            mc.player.motion.y = 0.42;
            canUse = false;

            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    canUse = true;
                }
            }, (long) waterSpamDelay.getValue());
        }
    }

    private void handleBlocksMode() {
        int blockSlot = findBlockInHotbar();
        if (blockSlot == -1) return;

        Hand hand = Hand.MAIN_HAND;
        ItemStack stack = mc.player.inventory.getStackInSlot(blockSlot);

        if (stack.getItem() instanceof BlockItem) {
            BlockPos pos = findPlacePos();
            if (pos != null && canPlaceBlock(stack)) {
                Vector3d hitVec = Vector3d.copyCentered(pos);
                Direction direction = Direction.getFacingFromVector(
                        hitVec.x - mc.player.getPosX(),
                        0,
                        hitVec.z - mc.player.getPosZ()
                );

                float[] rotations = RotationUtil.calculateAngle(hitVec.subtract(new Vector3d(direction.toVector3f()).mul(0.5)));

                if (hand == Hand.MAIN_HAND) {
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(blockSlot));
                    prevSlot = mc.player.inventory.currentItem;
                    mc.player.inventory.currentItem = blockSlot;
                }

                mc.player.rotationYaw = rotations[0];
                mc.player.rotationPitch = rotations[1];

                if (!mc.player.isSneaking()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.PRESS_SHIFT_KEY));
                }

                mc.playerController.rightClickBlock(
                        mc.player,
                        mc.world,
                        hand,
                        new BlockRayTraceResult(hitVec, direction.getOpposite(), pos, false)
                );

                if (!mc.player.isSneaking()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.RELEASE_SHIFT_KEY));
                }

                if (hand == Hand.MAIN_HAND && prevSlot != -1) {
                    new Thread(() -> {
                        try {
                            Thread.sleep(100);
                            mc.player.connection.sendPacket(new CHeldItemChangePacket(prevSlot));
                            mc.player.inventory.currentItem = prevSlot;
                        } catch (InterruptedException ignored) {}
                    }).start();
                }
            }
        }
    }

    private int findWaterBucket() {
        PlayerInventory inv = mc.player.inventory;
        for (int i = 0; i < 9; i++) {
            ItemStack stack = inv.getStackInSlot(i);
            if (stack.getItem() == Items.WATER_BUCKET) return i;
        }
        return -1;
    }

    private int findBlockInHotbar() {
        PlayerInventory inv = mc.player.inventory;
        for (int i = 0; i < 9; i++) {
            ItemStack stack = inv.getStackInSlot(i);
            if (stack.getItem() instanceof BlockItem) return i;
        }
        return -1;
    }

    private void useWaterBucket(int slot) {
        int currentSlot = mc.player.inventory.currentItem;

        if (slot != currentSlot) {
            mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        }

        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));

        if (slot != currentSlot) {
            mc.player.connection.sendPacket(new CHeldItemChangePacket(currentSlot));
        }

        lastBucketUse = System.currentTimeMillis();
    }

    private double getHeightFromGround() {
        if (mc.player == null || mc.world == null) return 0;

        double y = mc.player.getPosY();
        for (double i = y; i > 0; i -= 0.1) {
            BlockPos pos = new BlockPos(mc.player.getPosX(), i, mc.player.getPosZ());
            if (!mc.world.isAirBlock(pos)) {
                return y - (i + 1);
            }
        }
        return 0;
    }

    private boolean canPlaceBlock(ItemStack stack) {
        BlockPos pos = mc.player.getPosition();
        double motionY = mc.player.getMotion().y;
        double playerY = mc.player.getPosY();
        double targetY = pos.getY() + motionY;

        BlockState below = mc.world.getBlockState(pos.down());
        boolean canPlace = targetY < playerY && below.getBlock() != Blocks.AIR;

        return canPlace && stack.getItem() instanceof BlockItem;
    }

    private BlockPos findPlacePos() {
        BlockPos pos = mc.player.getPosition();
        Direction[] dirs = {Direction.WEST, Direction.EAST, Direction.SOUTH, Direction.NORTH};

        for (Direction dir : dirs) {
            BlockPos neighbor = pos.offset(dir);
            if (!mc.world.getBlockState(neighbor).isAir()) {
                return neighbor;
            }
        }
        return null;
    }
}
 
крч спайдер как и с трезубцем как и без как и с блоками
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.

код-
Код:
Expand Collapse Copy
import dev.kodek.client.api.events.orbit.EventHandler;
import dev.kodek.client.managers.events.player.MotionEvent;
import dev.kodek.client.managers.events.player.UpdateEvent;
import dev.kodek.client.managers.module.Category;
import dev.kodek.client.managers.module.Module;
import dev.kodek.client.managers.module.ModuleInfo;
import dev.kodek.client.managers.module.settings.impl.ModeSetting;
import dev.kodek.client.managers.module.settings.impl.SliderSetting;
import dev.kodek.client.utils.other.Instance;
import dev.kodek.client.utils.player.RotationUtil;
import dev.kodek.client.utils.timer.TimerUtil;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.play.client.CEntityActionPacket;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.mojang.blaze3d.matrix.MatrixStack;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleInfo(name = "Spider", category = Category.MOVEMENT, desc = "Лазание по стенам как паук")
public class Spider extends Module {

    public static Spider getInstance() {
        return Instance.get(Spider.class);
    }

    private final ModeSetting mode = new ModeSetting(this, "Режим", "Blocks", "Matrix", "WaterSpam", "SpookyTime");
    private final SliderSetting spiderSpeed = new SliderSetting(this, "Speed", 2.0f, 1.0f, 10.0f, 0.05f)
            .setVisible(() -> mode.is("Matrix"));
    private final SliderSetting waterSpamDelay = new SliderSetting(this, "Задержка", 100f, 50f, 500f, 10f)
            .setVisible(() -> mode.is("WaterSpam"));

    private final TimerUtil timerUtil = new TimerUtil();
    private final Random random = new Random();
    private Timer timer = new Timer();
    private boolean canUse = true;
    private long lastBucketUse = 0L;
    private int prevSlot = -1;

    @Override
    protected void onEnable() {
        if (mode.is("SpookyTime") || mode.is("WaterSpam")) {
            mc.gameSettings.keyBindSneak.setPressed(false);
            mc.gameSettings.keyBindJump.setPressed(false);
        }
        timer = new Timer();
        canUse = true;
    }

    @Override
    protected void onDisable() {
        if (mode.is("SpookyTime") || mode.is("WaterSpam")) {
            timer.cancel();
            timer = new Timer();
            canUse = true;
            if (mc.gameSettings != null) {
                mc.gameSettings.keyBindSneak.setPressed(false);
                mc.gameSettings.keyBindJump.setPressed(false);
            }
        }
    }

    @EventHandler
    public void onMotion(MotionEvent event) {
        if (mode.is("Matrix")) {
            handleMatrixMode(event);
        }
        if (mode.is("SpookyTime")) {
            handleSpookyTimeMode();
        }
        if (mode.is("WaterSpam")) {
            handleWaterSpamMode();
        }
    }

    @EventHandler
    public void onUpdate(UpdateEvent event) {
        if (mode.is("Blocks")) {
            handleBlocksMode();
        }
    }

    private void handleMatrixMode(MotionEvent event) {
        if (!mc.player.collidedHorizontally) return;

        long speed = MathHelper.clamp(500 - (spiderSpeed.getValue().longValue() / 2 * 100), 0, 500);
        if (timerUtil.hasReached(speed)) {
            event.setOnGround(true);
            mc.player.setOnGround(true);
            mc.player.collidedVertically = true;
            mc.player.collidedHorizontally = true;
            mc.player.isAirBorne = true;
            mc.player.jump();
            timerUtil.reset();
        }
    }

    private void handleSpookyTimeMode() {
        if (mc.player == null || mc.player.isInWater()) return;

        if (!mc.player.collidedHorizontally) {
            if (mc.gameSettings.keyBindSneak.isKeyDown()) {
                mc.gameSettings.keyBindSneak.setPressed(false);
            }
            return;
        }

        int waterSlot = findWaterBucket();
        if (waterSlot == -1) return;

        if (mc.player.isOnGround()) {
            mc.player.jump();
            return;
        }

        if (canUse) {
            useWaterBucket(waterSlot);
            double boost = 0.42 + (random.nextDouble() * 0.03);
            mc.player.motion.y = boost;
            canUse = false;

            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    canUse = true;
                }
            }, 450 + random.nextInt(60) - 30);
        }

        mc.gameSettings.keyBindSneak.setPressed(true);
    }

    private void handleWaterSpamMode() {
        if (mc.player == null) return;

        if (mc.player.isInWater()) {
            double height = getHeightFromGround();
            if (height >= 3.0) {
                mc.player.setMotion(mc.player.getMotion().x, 0.20, mc.player.getMotion().z);
            }
            return;
        }

        if (!mc.player.collidedHorizontally) {
            if (mc.gameSettings.keyBindSneak.isKeyDown()) {
                mc.gameSettings.keyBindSneak.setPressed(false);
            }
            if (mc.gameSettings.keyBindJump.isKeyDown()) {
                mc.gameSettings.keyBindJump.setPressed(false);
            }
            return;
        }

        int waterSlot = findWaterBucket();
        if (waterSlot == -1) return;

        mc.gameSettings.keyBindJump.setPressed(true);
        mc.gameSettings.keyBindSneak.setPressed(true);

        if (canUse) {
            double height = getHeightFromGround();
            if (height >= 3.0) {
                mc.player.rotationPitch = 75.0f;
            }
            useWaterBucket(waterSlot);
            mc.player.motion.y = 0.42;
            canUse = false;

            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    canUse = true;
                }
            }, (long) waterSpamDelay.getValue());
        }
    }

    private void handleBlocksMode() {
        int blockSlot = findBlockInHotbar();
        if (blockSlot == -1) return;

        Hand hand = Hand.MAIN_HAND;
        ItemStack stack = mc.player.inventory.getStackInSlot(blockSlot);

        if (stack.getItem() instanceof BlockItem) {
            BlockPos pos = findPlacePos();
            if (pos != null && canPlaceBlock(stack)) {
                Vector3d hitVec = Vector3d.copyCentered(pos);
                Direction direction = Direction.getFacingFromVector(
                        hitVec.x - mc.player.getPosX(),
                        0,
                        hitVec.z - mc.player.getPosZ()
                );

                float[] rotations = RotationUtil.calculateAngle(hitVec.subtract(new Vector3d(direction.toVector3f()).mul(0.5)));

                if (hand == Hand.MAIN_HAND) {
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(blockSlot));
                    prevSlot = mc.player.inventory.currentItem;
                    mc.player.inventory.currentItem = blockSlot;
                }

                mc.player.rotationYaw = rotations[0];
                mc.player.rotationPitch = rotations[1];

                if (!mc.player.isSneaking()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.PRESS_SHIFT_KEY));
                }

                mc.playerController.rightClickBlock(
                        mc.player,
                        mc.world,
                        hand,
                        new BlockRayTraceResult(hitVec, direction.getOpposite(), pos, false)
                );

                if (!mc.player.isSneaking()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.RELEASE_SHIFT_KEY));
                }

                if (hand == Hand.MAIN_HAND && prevSlot != -1) {
                    new Thread(() -> {
                        try {
                            Thread.sleep(100);
                            mc.player.connection.sendPacket(new CHeldItemChangePacket(prevSlot));
                            mc.player.inventory.currentItem = prevSlot;
                        } catch (InterruptedException ignored) {}
                    }).start();
                }
            }
        }
    }

    private int findWaterBucket() {
        PlayerInventory inv = mc.player.inventory;
        for (int i = 0; i < 9; i++) {
            ItemStack stack = inv.getStackInSlot(i);
            if (stack.getItem() == Items.WATER_BUCKET) return i;
        }
        return -1;
    }

    private int findBlockInHotbar() {
        PlayerInventory inv = mc.player.inventory;
        for (int i = 0; i < 9; i++) {
            ItemStack stack = inv.getStackInSlot(i);
            if (stack.getItem() instanceof BlockItem) return i;
        }
        return -1;
    }

    private void useWaterBucket(int slot) {
        int currentSlot = mc.player.inventory.currentItem;

        if (slot != currentSlot) {
            mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        }

        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));

        if (slot != currentSlot) {
            mc.player.connection.sendPacket(new CHeldItemChangePacket(currentSlot));
        }

        lastBucketUse = System.currentTimeMillis();
    }

    private double getHeightFromGround() {
        if (mc.player == null || mc.world == null) return 0;

        double y = mc.player.getPosY();
        for (double i = y; i > 0; i -= 0.1) {
            BlockPos pos = new BlockPos(mc.player.getPosX(), i, mc.player.getPosZ());
            if (!mc.world.isAirBlock(pos)) {
                return y - (i + 1);
            }
        }
        return 0;
    }

    private boolean canPlaceBlock(ItemStack stack) {
        BlockPos pos = mc.player.getPosition();
        double motionY = mc.player.getMotion().y;
        double playerY = mc.player.getPosY();
        double targetY = pos.getY() + motionY;

        BlockState below = mc.world.getBlockState(pos.down());
        boolean canPlace = targetY < playerY && below.getBlock() != Blocks.AIR;

        return canPlace && stack.getItem() instanceof BlockItem;
    }

    private BlockPos findPlacePos() {
        BlockPos pos = mc.player.getPosition();
        Direction[] dirs = {Direction.WEST, Direction.EAST, Direction.SOUTH, Direction.NORTH};

        for (Direction dir : dirs) {
            BlockPos neighbor = pos.offset(dir);
            if (!mc.world.getBlockState(neighbor).isAir()) {
                return neighbor;
            }
        }
        return null;
    }
}
Ну типо этот спайдер 2 мин переписать от обычного а так пастерам сойдет
 
крч спайдер как и с трезубцем как и без как и с блоками
ss -
Пожалуйста, авторизуйтесь для просмотра ссылки.

код-
Код:
Expand Collapse Copy
import dev.kodek.client.api.events.orbit.EventHandler;
import dev.kodek.client.managers.events.player.MotionEvent;
import dev.kodek.client.managers.events.player.UpdateEvent;
import dev.kodek.client.managers.module.Category;
import dev.kodek.client.managers.module.Module;
import dev.kodek.client.managers.module.ModuleInfo;
import dev.kodek.client.managers.module.settings.impl.ModeSetting;
import dev.kodek.client.managers.module.settings.impl.SliderSetting;
import dev.kodek.client.utils.other.Instance;
import dev.kodek.client.utils.player.RotationUtil;
import dev.kodek.client.utils.timer.TimerUtil;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.play.client.CEntityActionPacket;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.mojang.blaze3d.matrix.MatrixStack;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@ModuleInfo(name = "Spider", category = Category.MOVEMENT, desc = "Лазание по стенам как паук")
public class Spider extends Module {

    public static Spider getInstance() {
        return Instance.get(Spider.class);
    }

    private final ModeSetting mode = new ModeSetting(this, "Режим", "Blocks", "Matrix", "WaterSpam", "SpookyTime");
    private final SliderSetting spiderSpeed = new SliderSetting(this, "Speed", 2.0f, 1.0f, 10.0f, 0.05f)
            .setVisible(() -> mode.is("Matrix"));
    private final SliderSetting waterSpamDelay = new SliderSetting(this, "Задержка", 100f, 50f, 500f, 10f)
            .setVisible(() -> mode.is("WaterSpam"));

    private final TimerUtil timerUtil = new TimerUtil();
    private final Random random = new Random();
    private Timer timer = new Timer();
    private boolean canUse = true;
    private long lastBucketUse = 0L;
    private int prevSlot = -1;

    @Override
    protected void onEnable() {
        if (mode.is("SpookyTime") || mode.is("WaterSpam")) {
            mc.gameSettings.keyBindSneak.setPressed(false);
            mc.gameSettings.keyBindJump.setPressed(false);
        }
        timer = new Timer();
        canUse = true;
    }

    @Override
    protected void onDisable() {
        if (mode.is("SpookyTime") || mode.is("WaterSpam")) {
            timer.cancel();
            timer = new Timer();
            canUse = true;
            if (mc.gameSettings != null) {
                mc.gameSettings.keyBindSneak.setPressed(false);
                mc.gameSettings.keyBindJump.setPressed(false);
            }
        }
    }

    @EventHandler
    public void onMotion(MotionEvent event) {
        if (mode.is("Matrix")) {
            handleMatrixMode(event);
        }
        if (mode.is("SpookyTime")) {
            handleSpookyTimeMode();
        }
        if (mode.is("WaterSpam")) {
            handleWaterSpamMode();
        }
    }

    @EventHandler
    public void onUpdate(UpdateEvent event) {
        if (mode.is("Blocks")) {
            handleBlocksMode();
        }
    }

    private void handleMatrixMode(MotionEvent event) {
        if (!mc.player.collidedHorizontally) return;

        long speed = MathHelper.clamp(500 - (spiderSpeed.getValue().longValue() / 2 * 100), 0, 500);
        if (timerUtil.hasReached(speed)) {
            event.setOnGround(true);
            mc.player.setOnGround(true);
            mc.player.collidedVertically = true;
            mc.player.collidedHorizontally = true;
            mc.player.isAirBorne = true;
            mc.player.jump();
            timerUtil.reset();
        }
    }

    private void handleSpookyTimeMode() {
        if (mc.player == null || mc.player.isInWater()) return;

        if (!mc.player.collidedHorizontally) {
            if (mc.gameSettings.keyBindSneak.isKeyDown()) {
                mc.gameSettings.keyBindSneak.setPressed(false);
            }
            return;
        }

        int waterSlot = findWaterBucket();
        if (waterSlot == -1) return;

        if (mc.player.isOnGround()) {
            mc.player.jump();
            return;
        }

        if (canUse) {
            useWaterBucket(waterSlot);
            double boost = 0.42 + (random.nextDouble() * 0.03);
            mc.player.motion.y = boost;
            canUse = false;

            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    canUse = true;
                }
            }, 450 + random.nextInt(60) - 30);
        }

        mc.gameSettings.keyBindSneak.setPressed(true);
    }

    private void handleWaterSpamMode() {
        if (mc.player == null) return;

        if (mc.player.isInWater()) {
            double height = getHeightFromGround();
            if (height >= 3.0) {
                mc.player.setMotion(mc.player.getMotion().x, 0.20, mc.player.getMotion().z);
            }
            return;
        }

        if (!mc.player.collidedHorizontally) {
            if (mc.gameSettings.keyBindSneak.isKeyDown()) {
                mc.gameSettings.keyBindSneak.setPressed(false);
            }
            if (mc.gameSettings.keyBindJump.isKeyDown()) {
                mc.gameSettings.keyBindJump.setPressed(false);
            }
            return;
        }

        int waterSlot = findWaterBucket();
        if (waterSlot == -1) return;

        mc.gameSettings.keyBindJump.setPressed(true);
        mc.gameSettings.keyBindSneak.setPressed(true);

        if (canUse) {
            double height = getHeightFromGround();
            if (height >= 3.0) {
                mc.player.rotationPitch = 75.0f;
            }
            useWaterBucket(waterSlot);
            mc.player.motion.y = 0.42;
            canUse = false;

            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    canUse = true;
                }
            }, (long) waterSpamDelay.getValue());
        }
    }

    private void handleBlocksMode() {
        int blockSlot = findBlockInHotbar();
        if (blockSlot == -1) return;

        Hand hand = Hand.MAIN_HAND;
        ItemStack stack = mc.player.inventory.getStackInSlot(blockSlot);

        if (stack.getItem() instanceof BlockItem) {
            BlockPos pos = findPlacePos();
            if (pos != null && canPlaceBlock(stack)) {
                Vector3d hitVec = Vector3d.copyCentered(pos);
                Direction direction = Direction.getFacingFromVector(
                        hitVec.x - mc.player.getPosX(),
                        0,
                        hitVec.z - mc.player.getPosZ()
                );

                float[] rotations = RotationUtil.calculateAngle(hitVec.subtract(new Vector3d(direction.toVector3f()).mul(0.5)));

                if (hand == Hand.MAIN_HAND) {
                    mc.player.connection.sendPacket(new CHeldItemChangePacket(blockSlot));
                    prevSlot = mc.player.inventory.currentItem;
                    mc.player.inventory.currentItem = blockSlot;
                }

                mc.player.rotationYaw = rotations[0];
                mc.player.rotationPitch = rotations[1];

                if (!mc.player.isSneaking()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.PRESS_SHIFT_KEY));
                }

                mc.playerController.rightClickBlock(
                        mc.player,
                        mc.world,
                        hand,
                        new BlockRayTraceResult(hitVec, direction.getOpposite(), pos, false)
                );

                if (!mc.player.isSneaking()) {
                    mc.player.connection.sendPacket(new CEntityActionPacket(mc.player, CEntityActionPacket.Action.RELEASE_SHIFT_KEY));
                }

                if (hand == Hand.MAIN_HAND && prevSlot != -1) {
                    new Thread(() -> {
                        try {
                            Thread.sleep(100);
                            mc.player.connection.sendPacket(new CHeldItemChangePacket(prevSlot));
                            mc.player.inventory.currentItem = prevSlot;
                        } catch (InterruptedException ignored) {}
                    }).start();
                }
            }
        }
    }

    private int findWaterBucket() {
        PlayerInventory inv = mc.player.inventory;
        for (int i = 0; i < 9; i++) {
            ItemStack stack = inv.getStackInSlot(i);
            if (stack.getItem() == Items.WATER_BUCKET) return i;
        }
        return -1;
    }

    private int findBlockInHotbar() {
        PlayerInventory inv = mc.player.inventory;
        for (int i = 0; i < 9; i++) {
            ItemStack stack = inv.getStackInSlot(i);
            if (stack.getItem() instanceof BlockItem) return i;
        }
        return -1;
    }

    private void useWaterBucket(int slot) {
        int currentSlot = mc.player.inventory.currentItem;

        if (slot != currentSlot) {
            mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
        }

        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));

        if (slot != currentSlot) {
            mc.player.connection.sendPacket(new CHeldItemChangePacket(currentSlot));
        }

        lastBucketUse = System.currentTimeMillis();
    }

    private double getHeightFromGround() {
        if (mc.player == null || mc.world == null) return 0;

        double y = mc.player.getPosY();
        for (double i = y; i > 0; i -= 0.1) {
            BlockPos pos = new BlockPos(mc.player.getPosX(), i, mc.player.getPosZ());
            if (!mc.world.isAirBlock(pos)) {
                return y - (i + 1);
            }
        }
        return 0;
    }

    private boolean canPlaceBlock(ItemStack stack) {
        BlockPos pos = mc.player.getPosition();
        double motionY = mc.player.getMotion().y;
        double playerY = mc.player.getPosY();
        double targetY = pos.getY() + motionY;

        BlockState below = mc.world.getBlockState(pos.down());
        boolean canPlace = targetY < playerY && below.getBlock() != Blocks.AIR;

        return canPlace && stack.getItem() instanceof BlockItem;
    }

    private BlockPos findPlacePos() {
        BlockPos pos = mc.player.getPosition();
        Direction[] dirs = {Direction.WEST, Direction.EAST, Direction.SOUTH, Direction.NORTH};

        for (Direction dir : dirs) {
            BlockPos neighbor = pos.offset(dir);
            if (!mc.world.getBlockState(neighbor).isAir()) {
                return neighbor;
            }
        }
        return null;
    }
}
+rep слей ноу слов под сп я пытался сделать но хуй знает как там че делать буду рад если сольешь
 
Назад
Сверху Снизу