Middle Click Pearl

Auto_Pearl Инвентарь (Inventory) HIGH +8 очков

🎮 Влияние на механику Minecraft

В PvP ситуациях бросок эндер-перла требует ручного выбора слота на хотбаре, нажатия ПКМ и последующего возврата к мечу или щиту. Модули AutoPearl / MiddleClickPearl автоматизируют эту цепочку по нажатию одной клавиши: макрос сканирует хотбар, находит эндер-перл, переключает активный слот, вызывает interactItem для мгновенного броска и через 1 тик восстанавливает исходный предмет в руке.

🔍 Анализируемые функции и API

Items.ENDER_PEARL

Константа предмета «Эндер-жемчуг» (class_1802.field_8634 / field_151079_bi).

ClientPlayerInteractionManager.interactItem

Клиентский метод (method_2919) активации предмета в руке с отправкой пакета использования.

💻 Реализация в моде (Исходный код)

// Developer Source (Fabric / Yarn mappings)
public class AutoPearl {
    public static void throwPearl(MinecraftClient client) {
        if (client.player == null || client.interactionManager == null) return;
        int prevSlot = client.player.getInventory().selectedSlot;
        int pearlSlot = findPearlSlot(client.player.getInventory());
        if (pearlSlot != -1) {
            client.player.getInventory().selectedSlot = pearlSlot;
            client.interactionManager.interactItem(client.player, Hand.MAIN_HAND);
            client.player.swingHand(Hand.MAIN_HAND);
            client.player.getInventory().selectedSlot = prevSlot;
        }
    }
}

⚙️ Декомпилированный вид (Vineflower)

// Decompiled with Vineflower 1.12 (Intermediary mappings)
public class AutoPearl {
    public static void throwPearl(class_310 client) {
        if (client.field_1724 != null && client.field_1761 != null) {
            int prevSlot = client.field_1724.method_31548().field_7545;
            int pearlSlot = findPearl(client.field_1724, class_1802.field_8634);
            if (pearlSlot != -1) {
                client.field_1724.method_31548().field_7545 = pearlSlot;
                client.field_1761.method_2919(client.field_1724, class_1268.field_5808);
                client.field_1724.method_6104(class_1268.field_5808);
                client.field_1724.method_31548().field_7545 = prevSlot;
            }
        }
    }
}

🛡️ Сигнатура байткода и статический детект

Совпадение обращения к Items.ENDER_PEARL (class_1802.field_8634 / field_151079_bi) с методом использования предмета ClientPlayerInteractionManager.interactItem (method_2919 / func_217292_a).