Начинающий
			
			
				
					
				
			
		- Статус
- Оффлайн
- Регистрация
- 28 Апр 2025
- Сообщения
- 17
- Реакции
- 0
Как написать легитный клик перл на базе 2.0 / newcode
Пишу свою шедевро пасту на нькоде и у меня появилась проблема с написанием легит перла, раньше писал его на 3.1 но на 2.0 не получается чет даже уже в дипсика кидал
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
				
			Пишу свою шедевро пасту на нькоде и у меня появилась проблема с написанием легит перла, раньше писал его на 3.1 но на 2.0 не получается чет даже уже в дипсика кидал
			
				clickpearl:
			
		
		
		package newcode.fun.module.impl.player;
import net.minecraft.item.Items;
import net.minecraft.network.play.client.CPlayerPacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.util.Hand;
import newcode.fun.control.Manager;
import newcode.fun.control.events.Event;
import newcode.fun.control.events.impl.game.EventKey;
import newcode.fun.module.api.Module;
import newcode.fun.module.api.Annotation;
import newcode.fun.module.TypeList;
import newcode.fun.module.settings.imp.BindSetting;
import newcode.fun.module.settings.imp.BooleanOption;
import newcode.fun.utils.world.InventoryUtils;
@Annotation(name = "ClickPearl", type = TypeList.Player)
public class ClickPearl extends Module {
    private BindSetting clickKey = new BindSetting("Кнопка", -98);
    private BooleanOption legitMode = new BooleanOption("Легитный режим", false);
    private int oldSlot = -1;
    private ActionType actionType = ActionType.START;
    private long lastActionTime = 0;
    public ClickPearl() {
        addSettings(clickKey, legitMode);
    }
    @Override
    public boolean onEvent(final Event event) {
        if (event instanceof EventKey e) {
            if (e.key == clickKey.getKey()) {
                handleMouseTickEvent();
            }
        }
        // Обрабатываем состояние легитного броска
        if (legitMode.getValue() && actionType != ActionType.START) {
            handleLegitState();
        }
        return false;
    }
    private void handleMouseTickEvent() {
        if (!mc.player.getCooldownTracker().hasCooldown(Items.ENDER_PEARL) && InventoryUtils.getItemSlot(Items.ENDER_PEARL) != -1) {
            if (legitMode.getValue()) {
                startLegitThrow();
            } else {
                handleNormalPearlThrow();
            }
        }
    }
    private void handleNormalPearlThrow() {
        // Обычный бросок
        InventoryUtils.inventorySwapClick(Items.ENDER_PEARL, false);
        sendPlayerRotationPacket(mc.player.rotationYaw, mc.player.rotationPitch, mc.player.isOnGround());
        useItem(Hand.MAIN_HAND);
    }
    private void startLegitThrow() {
        // Начинаем легитный бросок
        oldSlot = mc.player.inventory.currentItem;
        actionType = ActionType.SWITCH_SLOT;
        lastActionTime = System.currentTimeMillis();
    }
    private void handleLegitState() {
        int pearlSlot = InventoryUtils.getItemSlot(Items.ENDER_PEARL);
        switch (actionType) {
            case SWITCH_SLOT:
                // Переключаемся на слот с жемчугом
                if (pearlSlot != -1) {
                    switchToPearlSlot(pearlSlot);
                    actionType = ActionType.WAIT_AFTER_SWITCH;
                    lastActionTime = System.currentTimeMillis();
                } else {
                    // Если жемчуг не найден, сбрасываем
                    actionType = ActionType.START;
                }
                break;
            case WAIT_AFTER_SWITCH:
                // Ждем немного после переключения слота
                if (System.currentTimeMillis() - lastActionTime > 50) {
                    actionType = ActionType.USE_ITEM;
                }
                break;
            case USE_ITEM:
                // Используем жемчуг
                sendPlayerRotationPacket(mc.player.rotationYaw, mc.player.rotationPitch, mc.player.isOnGround());
                useItem(Hand.MAIN_HAND);
                actionType = ActionType.WAIT_AFTER_USE;
                lastActionTime = System.currentTimeMillis();
                break;
            case WAIT_AFTER_USE:
                // Ждем после использования
                if (System.currentTimeMillis() - lastActionTime > 50) {
                    actionType = ActionType.SWITCH_BACK;
                }
                break;
            case SWITCH_BACK:
                // Возвращаемся к исходному слоту
                if (oldSlot != -1) {
                    switchToSlot(oldSlot);
                    actionType = ActionType.START;
                    oldSlot = -1;
                }
                break;
        }
    }
    private void switchToPearlSlot(int pearlSlot) {
        if (pearlSlot >= 0 && pearlSlot <= 8) {
            // Жемчуг уже в хотбаре
            switchToSlot(pearlSlot);
        } else if (pearlSlot >= 36 && pearlSlot <= 44) {
            // Жемчуг в инвентаре - переключаем на соответствующий слот хотбара
            int hotbarSlot = pearlSlot - 36;
            switchToSlot(hotbarSlot);
        } else {
            // Жемчуг в другом месте - используем обычный метод
            InventoryUtils.inventorySwapClick(Items.ENDER_PEARL, false);
        }
    }
    private void switchToSlot(int slot) {
        if (slot >= 0 && slot <= 8 && slot != mc.player.inventory.currentItem) {
            mc.player.connection.sendPacket(new CHeldItemChangePacket(slot));
            mc.player.inventory.currentItem = slot;
        }
    }
    private void sendPlayerRotationPacket(float yaw, float pitch, boolean onGround) {
        if (Manager.FUNCTION_MANAGER.auraFunction.target != null) {
            mc.player.connection.sendPacket(new CPlayerPacket.RotationPacket(yaw, pitch, onGround));
        }
    }
    private void useItem(Hand hand) {
        mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(hand));
        mc.player.swingArm(hand);
    }
    @Override
    public void onDisable() {
        // Сбрасываем состояние при выключении модуля
        actionType = ActionType.START;
        oldSlot = -1;
        super.onDisable();
    }
    private enum ActionType {
        START,
        SWITCH_SLOT,
        WAIT_AFTER_SWITCH,
        USE_ITEM,
        WAIT_AFTER_USE,
        SWITCH_BACK
    }
} 
				 
	 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		