Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Часть функционала AutoFarm 3.1 FT

Как вам?

  • плохо

    Голосов: 16 42.1%
  • отлична

    Голосов: 22 57.9%

  • Всего проголосовало
    38
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Дек 2024
Сообщения
20
Реакции
0
Выберите загрузчик игры
  1. Vanilla
  2. Forge
первый пост на юг надеюсь одобрят.
вроде норм потом может сделаю быстрой как в пенус фри.
Главное встаньте между обычным блоком и вспаханой травой чтобы работало.
взял у типа с югейм как основу (2) AutoFarm 3.1 Bypass FT (жмякните)

Пожалуйста, авторизуйтесь для просмотра ссылки.


котакбас:
Expand Collapse Copy
package im.Nexgen.functions.impl.misc;


import java.util.*;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket;
import net.minecraft.network.play.client.CPlayerDiggingPacket;
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.vector.Vector3d;
import im.Nexgen.functions.api.Category;
import im.Nexgen.functions.api.Function;
import im.Nexgen.functions.api.FunctionRegister;
import im.Nexgen.functions.settings.impl.BooleanSetting;
import im.Nexgen.functions.settings.impl.ModeListSetting;

@FunctionRegister(name = "AutoFarm", type = Category.Misc)
public class AutoFarm extends Function {

    private final Set<BlockPos> brokenBlocks = new HashSet<>();
    private final Map<BlockPos, Long> blockBreakingTimes = new HashMap<>();
    private final ModeListSetting elements = new ModeListSetting(
            "Что ломать?",
            new BooleanSetting("Морковь", true) // Ломать только морковь
    );

    private boolean running = false;
    private Thread nukerThread;
    private BlockPos lastFarmlandPosition = null; // Добавляем поле для хранения последней грядки

    public AutoFarm() {
        this.addSettings(this.elements);
    }

    [USER=1367676]@override[/USER]
    public boolean onEnable() {
        super.onEnable();
        this.running = true;
        this.nukerThread = new Thread(() -> {
            while (this.running) {
                if (mc == null || mc.player == null || mc.world == null) continue;
                this.nukeBlocks();
                this.clearBrokenBlocks();
                try {
                    Thread.sleep(1L); // Минимальная задержка для ускорения
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        this.nukerThread.start();
        return true;
    }

    [USER=1367676]@override[/USER]
    public void onDisable() {
        super.onDisable();
        this.running = false;
        if (this.nukerThread != null) {
            this.nukerThread.interrupt();
        }
        this.lastFarmlandPosition = null; // Сбрасываем позицию грядки при выключении
    }

    private void clearBrokenBlocks() {
        long currentTime = System.currentTimeMillis();
        brokenBlocks.removeIf(pos -> currentTime - blockBreakingTimes.getOrDefault(pos, currentTime) >= 400); // Уменьшено время ожидания
    }

    private double getDistanceSquared(BlockPos pos1, BlockPos pos2) {
        double dx = pos1.getX() - pos2.getX();
        double dy = pos1.getY() - pos2.getY();
        double dz = pos1.getZ() - pos2.getZ();
        return dx * dx + dy * dy + dz * dz;
    }


    // Новый метод для проверки, стоим ли мы на вспаханной земле
    private boolean isOnFarmland() {
        if (mc != null && mc.player != null && mc.world != null) {
            BlockPos playerPos = mc.player.getPosition().down(); // Проверяем блок под ногами игрока
            Block block = mc.world.getBlockState(playerPos).getBlock();
            return block == Blocks.FARMLAND;
        }
        return false;
    }



    private void nukeBlocks() {
        if (mc != null && mc.world != null && mc.player != null) {

            if (!isOnFarmland()) {  // Добавляем проверку нахождения на вспаханной земле
                return; // Ничего не делаем, если не стоим на вспаханной земле
            }


            BlockPos playerPos = new BlockPos(mc.player.getPosition());
            int rangeValue = 4; // Увеличен радиус поиска до 4 блоков
            List<BlockPos> blockPositions = new ArrayList<>();

            for (int x = -rangeValue; x <= rangeValue; x++) {
                for (int y = -1; y <= 1; y++) { // Поиск на том же уровне
                    for (int z = -rangeValue; z <= rangeValue; z++) {
                        BlockPos blockPos = playerPos.add(x, y, z);
                        Block block = mc.world.getBlockState(blockPos).getBlock();
                        if (((Boolean) this.elements.getValueByName("Морковь").get()) && block == Blocks.CARROTS) {
                            Block blockBelow = mc.world.getBlockState(blockPos.down()).getBlock();
                            if (blockBelow == Blocks.FARMLAND) {
                                blockPositions.add(blockPos);
                            }
                        }
                    }
                }
            }

            blockPositions.removeIf(this.brokenBlocks::contains);
            blockPositions.sort(Comparator.comparingDouble(pos -> this.getDistanceSquared(pos, playerPos)));
            List<BlockPos> blocksToBreak = blockPositions.subList(0, Math.min(1, blockPositions.size())); // 1 блок

            blocksToBreak.forEach(blockToBreak -> {
                if (!this.brokenBlocks.contains(blockToBreak)) {
                    try {
                        // 1. Ставим морковь (с левой руки) на грядку
                        mc.player.connection.sendPacket(
                                new CPlayerTryUseItemOnBlockPacket(
                                        Hand.OFF_HAND, // Левую руку для посадки
                                        new BlockRayTraceResult(new Vector3d(blockToBreak.getX(), blockToBreak.getY(), blockToBreak.getZ()), Direction.UP, blockToBreak, true)
                                )
                        );
                        Thread.sleep(15); // Минимальная задержка для посадки

                        for (int i = 0; i < 3; i++) {
                            mc.player.connection.sendPacket(
                                    new CPlayerTryUseItemOnBlockPacket(
                                            Hand.MAIN_HAND, // Правую руку для ПКМ
                                            new BlockRayTraceResult(new Vector3d(blockToBreak.getX(), blockToBreak.getY(), blockToBreak.getZ()), Direction.UP, blockToBreak, true)
                                    )
                            );
                            Thread.sleep(5); // Уменьшена задержка между кликами правой рукой
                        }
                        Thread.sleep(40); // Минимальная задержка перед ломанием

                        mc.player.connection.sendPacket(
                                new CPlayerDiggingPacket(
                                        CPlayerDiggingPacket.Action.START_DESTROY_BLOCK,
                                        blockToBreak,
                                        Direction.UP
                                )
                        );
                        Thread.sleep(3);
                        mc.player.connection.sendPacket(
                                new CPlayerTryUseItemOnBlockPacket(
                                        Hand.OFF_HAND,
                                        new BlockRayTraceResult(new Vector3d(blockToBreak.getX(), blockToBreak.getY(), blockToBreak.getZ()), Direction.UP, blockToBreak, true)
                                )
                        );
                        this.brokenBlocks.add(blockToBreak);
                        this.blockBreakingTimes.put(blockToBreak, System.currentTimeMillis());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
}
 
Последнее редактирование:
первый пост на юг надеюсь одобрят.
вроде норм потом может сделаю быстрой как в пенус фри.
Главное встаньте между обычным блоком и вспаханой травой чтобы работало.
взял у типа с югейм как основу (2) AutoFarm 3.1 Bypass FT (жмякните)

котакбас:
Expand Collapse Copy
package im.Nexgen.functions.impl.misc;


import java.util.*;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket;
import net.minecraft.network.play.client.CPlayerDiggingPacket;
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.vector.Vector3d;
import im.Nexgen.functions.api.Category;
import im.Nexgen.functions.api.Function;
import im.Nexgen.functions.api.FunctionRegister;
import im.Nexgen.functions.settings.impl.BooleanSetting;
import im.Nexgen.functions.settings.impl.ModeListSetting;

@FunctionRegister(name = "AutoFarm", type = Category.Misc)
public class AutoFarm extends Function {

    private final Set<BlockPos> brokenBlocks = new HashSet<>();
    private final Map<BlockPos, Long> blockBreakingTimes = new HashMap<>();
    private final ModeListSetting elements = new ModeListSetting(
            "Что ломать?",
            new BooleanSetting("Морковь", true) // Ломать только морковь
    );

    private boolean running = false;
    private Thread nukerThread;
    private BlockPos lastFarmlandPosition = null; // Добавляем поле для хранения последней грядки

    public AutoFarm() {
        this.addSettings(this.elements);
    }

    [USER=1367676]@override[/USER]
    public boolean onEnable() {
        super.onEnable();
        this.running = true;
        this.nukerThread = new Thread(() -> {
            while (this.running) {
                if (mc == null || mc.player == null || mc.world == null) continue;
                this.nukeBlocks();
                this.clearBrokenBlocks();
                try {
                    Thread.sleep(1L); // Минимальная задержка для ускорения
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        this.nukerThread.start();
        return true;
    }

    [USER=1367676]@override[/USER]
    public void onDisable() {
        super.onDisable();
        this.running = false;
        if (this.nukerThread != null) {
            this.nukerThread.interrupt();
        }
        this.lastFarmlandPosition = null; // Сбрасываем позицию грядки при выключении
    }

    private void clearBrokenBlocks() {
        long currentTime = System.currentTimeMillis();
        brokenBlocks.removeIf(pos -> currentTime - blockBreakingTimes.getOrDefault(pos, currentTime) >= 400); // Уменьшено время ожидания
    }

    private double getDistanceSquared(BlockPos pos1, BlockPos pos2) {
        double dx = pos1.getX() - pos2.getX();
        double dy = pos1.getY() - pos2.getY();
        double dz = pos1.getZ() - pos2.getZ();
        return dx * dx + dy * dy + dz * dz;
    }


    // Новый метод для проверки, стоим ли мы на вспаханной земле
    private boolean isOnFarmland() {
        if (mc != null && mc.player != null && mc.world != null) {
            BlockPos playerPos = mc.player.getPosition().down(); // Проверяем блок под ногами игрока
            Block block = mc.world.getBlockState(playerPos).getBlock();
            return block == Blocks.FARMLAND;
        }
        return false;
    }



    private void nukeBlocks() {
        if (mc != null && mc.world != null && mc.player != null) {

            if (!isOnFarmland()) {  // Добавляем проверку нахождения на вспаханной земле
                return; // Ничего не делаем, если не стоим на вспаханной земле
            }


            BlockPos playerPos = new BlockPos(mc.player.getPosition());
            int rangeValue = 4; // Увеличен радиус поиска до 4 блоков
            List<BlockPos> blockPositions = new ArrayList<>();

            for (int x = -rangeValue; x <= rangeValue; x++) {
                for (int y = -1; y <= 1; y++) { // Поиск на том же уровне
                    for (int z = -rangeValue; z <= rangeValue; z++) {
                        BlockPos blockPos = playerPos.add(x, y, z);
                        Block block = mc.world.getBlockState(blockPos).getBlock();
                        if (((Boolean) this.elements.getValueByName("Морковь").get()) && block == Blocks.CARROTS) {
                            Block blockBelow = mc.world.getBlockState(blockPos.down()).getBlock();
                            if (blockBelow == Blocks.FARMLAND) {
                                blockPositions.add(blockPos);
                            }
                        }
                    }
                }
            }

            blockPositions.removeIf(this.brokenBlocks::contains);
            blockPositions.sort(Comparator.comparingDouble(pos -> this.getDistanceSquared(pos, playerPos)));
            List<BlockPos> blocksToBreak = blockPositions.subList(0, Math.min(1, blockPositions.size())); // 1 блок

            blocksToBreak.forEach(blockToBreak -> {
                if (!this.brokenBlocks.contains(blockToBreak)) {
                    try {
                        // 1. Ставим морковь (с левой руки) на грядку
                        mc.player.connection.sendPacket(
                                new CPlayerTryUseItemOnBlockPacket(
                                        Hand.OFF_HAND, // Левую руку для посадки
                                        new BlockRayTraceResult(new Vector3d(blockToBreak.getX(), blockToBreak.getY(), blockToBreak.getZ()), Direction.UP, blockToBreak, true)
                                )
                        );
                        Thread.sleep(15); // Минимальная задержка для посадки

                        for (int i = 0; i < 3; i++) {
                            mc.player.connection.sendPacket(
                                    new CPlayerTryUseItemOnBlockPacket(
                                            Hand.MAIN_HAND, // Правую руку для ПКМ
                                            new BlockRayTraceResult(new Vector3d(blockToBreak.getX(), blockToBreak.getY(), blockToBreak.getZ()), Direction.UP, blockToBreak, true)
                                    )
                            );
                            Thread.sleep(5); // Уменьшена задержка между кликами правой рукой
                        }
                        Thread.sleep(40); // Минимальная задержка перед ломанием

                        mc.player.connection.sendPacket(
                                new CPlayerDiggingPacket(
                                        CPlayerDiggingPacket.Action.START_DESTROY_BLOCK,
                                        blockToBreak,
                                        Direction.UP
                                )
                        );
                        Thread.sleep(3);
                        mc.player.connection.sendPacket(
                                new CPlayerTryUseItemOnBlockPacket(
                                        Hand.OFF_HAND,
                                        new BlockRayTraceResult(new Vector3d(blockToBreak.getX(), blockToBreak.getY(), blockToBreak.getZ()), Direction.UP, blockToBreak, true)
                                )
                        );
                        this.brokenBlocks.add(blockToBreak);
                        this.blockBreakingTimes.put(blockToBreak, System.currentTimeMillis());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
}
сделай в один блок и там ееще есть авто починка?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
гавно фабос1337 не бейте сделал лучше
 
Автопочинки нет. Потом попробую сделать авто посев, останется просто двигать и морковь будет сама ломаться.
так у того типа у которого ты взял за основу код его код откидываеться за 2 минуты, у тя робит хоть а то мне страшно потерять мотыгу
 
так у того типа у которого ты взял за основу код его код откидываеться за 2 минуты, у тя робит хоть а то мне страшно потерять мотыгу
Я сколько тестил все норм. За две минуты весь инвентарь забил морковью с удачей 2
 
Ты буквально залил Ctrl C и Ctrl V с темы челика которую ты брал за основу
Ты сюда ничего не добавил, даже авто починку просто изменил 4 на 1 ебать сложно
 
первый пост на юг надеюсь одобрят.
вроде норм потом может сделаю быстрой как в пенус фри.
Главное встаньте между обычным блоком и вспаханой травой чтобы работало.
взял у типа с югейм как основу (2) AutoFarm 3.1 Bypass FT (жмякните)

Пожалуйста, авторизуйтесь для просмотра ссылки.


котакбас:
Expand Collapse Copy
package im.Nexgen.functions.impl.misc;


import java.util.*;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.network.play.client.CPlayerTryUseItemOnBlockPacket;
import net.minecraft.network.play.client.CPlayerDiggingPacket;
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.vector.Vector3d;
import im.Nexgen.functions.api.Category;
import im.Nexgen.functions.api.Function;
import im.Nexgen.functions.api.FunctionRegister;
import im.Nexgen.functions.settings.impl.BooleanSetting;
import im.Nexgen.functions.settings.impl.ModeListSetting;

@FunctionRegister(name = "AutoFarm", type = Category.Misc)
public class AutoFarm extends Function {

    private final Set<BlockPos> brokenBlocks = new HashSet<>();
    private final Map<BlockPos, Long> blockBreakingTimes = new HashMap<>();
    private final ModeListSetting elements = new ModeListSetting(
            "Что ломать?",
            new BooleanSetting("Морковь", true) // Ломать только морковь
    );

    private boolean running = false;
    private Thread nukerThread;
    private BlockPos lastFarmlandPosition = null; // Добавляем поле для хранения последней грядки

    public AutoFarm() {
        this.addSettings(this.elements);
    }

    [USER=1367676]@override[/USER]
    public boolean onEnable() {
        super.onEnable();
        this.running = true;
        this.nukerThread = new Thread(() -> {
            while (this.running) {
                if (mc == null || mc.player == null || mc.world == null) continue;
                this.nukeBlocks();
                this.clearBrokenBlocks();
                try {
                    Thread.sleep(1L); // Минимальная задержка для ускорения
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        this.nukerThread.start();
        return true;
    }

    [USER=1367676]@override[/USER]
    public void onDisable() {
        super.onDisable();
        this.running = false;
        if (this.nukerThread != null) {
            this.nukerThread.interrupt();
        }
        this.lastFarmlandPosition = null; // Сбрасываем позицию грядки при выключении
    }

    private void clearBrokenBlocks() {
        long currentTime = System.currentTimeMillis();
        brokenBlocks.removeIf(pos -> currentTime - blockBreakingTimes.getOrDefault(pos, currentTime) >= 400); // Уменьшено время ожидания
    }

    private double getDistanceSquared(BlockPos pos1, BlockPos pos2) {
        double dx = pos1.getX() - pos2.getX();
        double dy = pos1.getY() - pos2.getY();
        double dz = pos1.getZ() - pos2.getZ();
        return dx * dx + dy * dy + dz * dz;
    }


    // Новый метод для проверки, стоим ли мы на вспаханной земле
    private boolean isOnFarmland() {
        if (mc != null && mc.player != null && mc.world != null) {
            BlockPos playerPos = mc.player.getPosition().down(); // Проверяем блок под ногами игрока
            Block block = mc.world.getBlockState(playerPos).getBlock();
            return block == Blocks.FARMLAND;
        }
        return false;
    }



    private void nukeBlocks() {
        if (mc != null && mc.world != null && mc.player != null) {

            if (!isOnFarmland()) {  // Добавляем проверку нахождения на вспаханной земле
                return; // Ничего не делаем, если не стоим на вспаханной земле
            }


            BlockPos playerPos = new BlockPos(mc.player.getPosition());
            int rangeValue = 4; // Увеличен радиус поиска до 4 блоков
            List<BlockPos> blockPositions = new ArrayList<>();

            for (int x = -rangeValue; x <= rangeValue; x++) {
                for (int y = -1; y <= 1; y++) { // Поиск на том же уровне
                    for (int z = -rangeValue; z <= rangeValue; z++) {
                        BlockPos blockPos = playerPos.add(x, y, z);
                        Block block = mc.world.getBlockState(blockPos).getBlock();
                        if (((Boolean) this.elements.getValueByName("Морковь").get()) && block == Blocks.CARROTS) {
                            Block blockBelow = mc.world.getBlockState(blockPos.down()).getBlock();
                            if (blockBelow == Blocks.FARMLAND) {
                                blockPositions.add(blockPos);
                            }
                        }
                    }
                }
            }

            blockPositions.removeIf(this.brokenBlocks::contains);
            blockPositions.sort(Comparator.comparingDouble(pos -> this.getDistanceSquared(pos, playerPos)));
            List<BlockPos> blocksToBreak = blockPositions.subList(0, Math.min(1, blockPositions.size())); // 1 блок

            blocksToBreak.forEach(blockToBreak -> {
                if (!this.brokenBlocks.contains(blockToBreak)) {
                    try {
                        // 1. Ставим морковь (с левой руки) на грядку
                        mc.player.connection.sendPacket(
                                new CPlayerTryUseItemOnBlockPacket(
                                        Hand.OFF_HAND, // Левую руку для посадки
                                        new BlockRayTraceResult(new Vector3d(blockToBreak.getX(), blockToBreak.getY(), blockToBreak.getZ()), Direction.UP, blockToBreak, true)
                                )
                        );
                        Thread.sleep(15); // Минимальная задержка для посадки

                        for (int i = 0; i < 3; i++) {
                            mc.player.connection.sendPacket(
                                    new CPlayerTryUseItemOnBlockPacket(
                                            Hand.MAIN_HAND, // Правую руку для ПКМ
                                            new BlockRayTraceResult(new Vector3d(blockToBreak.getX(), blockToBreak.getY(), blockToBreak.getZ()), Direction.UP, blockToBreak, true)
                                    )
                            );
                            Thread.sleep(5); // Уменьшена задержка между кликами правой рукой
                        }
                        Thread.sleep(40); // Минимальная задержка перед ломанием

                        mc.player.connection.sendPacket(
                                new CPlayerDiggingPacket(
                                        CPlayerDiggingPacket.Action.START_DESTROY_BLOCK,
                                        blockToBreak,
                                        Direction.UP
                                )
                        );
                        Thread.sleep(3);
                        mc.player.connection.sendPacket(
                                new CPlayerTryUseItemOnBlockPacket(
                                        Hand.OFF_HAND,
                                        new BlockRayTraceResult(new Vector3d(blockToBreak.getX(), blockToBreak.getY(), blockToBreak.getZ()), Direction.UP, blockToBreak, true)
                                )
                        );
                        this.brokenBlocks.add(blockToBreak);
                        this.blockBreakingTimes.put(blockToBreak, System.currentTimeMillis());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
}
протестил, оно не ставит морковку, и выращивает медленновато
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу