AutoFarm (нарост) | Exp 2.0

Начинающий
Статус
Оффлайн
Регистрация
24 Май 2024
Сообщения
20
Реакции[?]
0
Поинты[?]
0
Типо легитный авто фарм нароста .
Пожалуйста, авторизуйтесь для просмотра ссылки.

Java:
package jiraf.cc.modules.impl.player;

import net.minecraft.block.Block;
import net.minecraft.block.NetherWartBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
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 net.minecraft.util.Direction;
import jiraf.cc.events.Event;
import jiraf.cc.events.impl.player.EventUpdate;
import jiraf.cc.modules.Function;
import jiraf.cc.modules.FunctionAnnotation;
import jiraf.cc.modules.Type;
import jiraf.cc.util.misc.TimerUtil;
import we.winner.annotations.obfuscator.Native;
import we.winner.annotations.obfuscator.VMProtect;

import java.util.ArrayList;
import java.util.List;

@Native(vmProtect = VMProtect.NONE)
@FunctionAnnotation(name = "FarmNarosta", type = Type.Player)
public class AutoFarm extends Function {

    private final TimerUtil delay = new TimerUtil();
    private BlockPos targetBlock = null;

    @Override
    public void onEvent(final Event event) {
        if (mc.player == null || mc.world == null) return;

        if (event instanceof EventUpdate) {
            if (targetBlock == null) {
                targetBlock = findGrowthNetherWart();  // ищет нарост который уже вырос до 2 или 3 стадии
            }

            if (targetBlock != null) {
                moveToBlock(targetBlock);
                if (isPlayerCloseToBlock(targetBlock)) {  // Если пользователь рядом с ним то
                    harvestNetherWart(targetBlock);  // Он собирает нарост
                    replantNetherWart(targetBlock);  // И если нарост находиться в хотбаре то он засаживает его обратно
                    targetBlock = null;  // Сбрасываем
                }
            }
        }
    }

    // Метод для поиска нароста
    private BlockPos findGrowthNetherWart() {
        for (BlockPos pos : getNearbyBlocks()) {
            if (isNetherWartOnGrowthStage(pos)) {
                return pos;
            }
        }
        return null;
    }

    private Iterable<BlockPos> getNearbyBlocks() {
        BlockPos playerPos = mc.player.getPosition();
        int radius = 9;  // Радиус для проверки нароста вокруг игрока (не советую ставить больше)
        List<BlockPos> blocks = new ArrayList<>();
        for (int x = -radius; x <= radius; x++) {
            for (int y = -1; y <= 1; y++) {
                for (int z = -radius; z <= radius; z++) {
                    blocks.add(playerPos.add(x, y, z));
                }
            }
        }
        return blocks;
    }

    // Проверка 2 или 3 стадии чтобы он не добывал нарост который находиться на 1 стадии
    private boolean isNetherWartOnGrowthStage(BlockPos pos) {
        Block block = mc.world.getBlockState(pos).getBlock();
        if (block instanceof NetherWartBlock) {
            int age = mc.world.getBlockState(pos).get(NetherWartBlock.AGE);
            return age == 2 || age == 3;  // Стадия
        }
        return false;
    }


    private void moveToBlock(BlockPos pos) {
        double dx = pos.getX() + 0.5 - mc.player.getPosX();
        double dz = pos.getZ() + 0.5 - mc.player.getPosZ();

        // Угол поворота к наросту
        float yaw = (float) (Math.atan2(dz, dx) * (180 / Math.PI)) - 90;
        mc.player.rotationYaw = yaw;  // Поворот в нужную сторону

       
        mc.player.moveForward = 1.0f;
    }

    // Проверка может ли пользователь дотянуться до нароста или нет
    private boolean isPlayerCloseToBlock(BlockPos pos) {
        double playerX = mc.player.getPosX();
        double playerY = mc.player.getPosY();
        double playerZ = mc.player.getPosZ();

        double blockX = pos.getX() + 0.5;
        double blockY = pos.getY() + 0.5;
        double blockZ = pos.getZ() + 0.5;

        double distanceSquared = (playerX - blockX) * (playerX - blockX)
                + (playerY - blockY) * (playerY - blockY)
                + (playerZ - blockZ) * (playerZ - blockZ);

        return distanceSquared < 2.25;  // Радиус примерно полтора блока
    }

    // Собирает нарост
    private void harvestNetherWart(BlockPos pos) {
        mc.playerController.clickBlock(pos, mc.player.getHorizontalFacing());
    }

    // Садим новый нарост
    private void replantNetherWart(BlockPos pos) {
       
        if (mc.player.inventory.hasItemStack(new ItemStack(Items.NETHER_WART))) {
            mc.player.inventory.currentItem = findSlotWithNetherWart();  // Переключение на слот с наростом
            BlockRayTraceResult rayTraceResult = new BlockRayTraceResult(
                    Vector3d.copyCentered(pos), Direction.UP, pos, false
            );
            mc.playerController.processRightClickBlock(mc.player, mc.world, Hand.MAIN_HAND, rayTraceResult);  // Сажаем
        }
    }

    // Находим слот с наростом
    private int findSlotWithNetherWart() {
        for (int i = 0; i < mc.player.inventory.mainInventory.size(); i++) {
            ItemStack stack = mc.player.inventory.mainInventory.get(i);
            if (stack.getItem() == Items.NETHER_WART) {
                return i;
            }
        }
        return -1;  // Если не найдено то не садим.
    }

    @Override
    protected void onDisable() {
        super.onDisable();
        delay.reset();
        targetBlock = null;
    }
}
Пометки в коде есть. Будет легко перенести на 3.1
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
24 Авг 2022
Сообщения
188
Реакции[?]
0
Поинты[?]
0
Если доделать то можно сделать такой принцип и на тыквы и морковку
 
Read Only
Статус
Оффлайн
Регистрация
11 Июл 2024
Сообщения
227
Реакции[?]
3
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
 
Начинающий
Статус
Оффлайн
Регистрация
6 Июл 2024
Сообщения
28
Реакции[?]
0
Поинты[?]
0
блять главный вопрос для меня т.к. я не фармлю, а как фармить? я включил эту функцию сделал песок душ взял нарос включил и не чё не происходит
 
Сверху Снизу