• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

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

Как вам?

  • плохо

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

    Голосов: 18 52.9%

  • Всего проголосовало
    34
первый пост на юг надеюсь одобрят.
вроде норм потом может сделаю быстрой как в пенус фри.
Главное встаньте между обычным блоком и вспаханой травой чтобы работало.
взял у типа с югейм как основу (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();
                    }
                }
            });
        }
    }
}
/del сливали 1в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();
                    }
                }
            });
        }
    }
}
// Сбрасываем позицию грядки при выключении// Уменьшена задержка между кликами правой рукой// Минимальная задержка перед ломанием
 

Похожие темы

Назад
Сверху Снизу