Исходник FuntimeHelper 1.20.1 Fabric

Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2024
Сообщения
330
Реакции[?]
0
Поинты[?]
1K
Обычный фт хелпер юзает по бинду трапку и дезорент
FuntimeHelper.java:
public class FuntimeHelper extends Module {
    BindSetting dezorka = new BindSetting("Дезорентация","");
    BindSetting trapka = new BindSetting("Трапка","");
    public FuntimeHelper() {
        super("FuntimeHelper", ModuleCategory.PLAYER);
        setup(dezorka,trapka);
    }
    @EventListener
    public void onKey(KeyEvent keyEvent) {
        if (keyEvent.isKeyDown(dezorka.getKey()) && canPerformAction(Items.ENDER_EYE)) {
            use(Items.ENDER_EYE,"Дезорентация не найдена");
        }
        if (keyEvent.isKeyDown(trapka.getKey()) && canPerformAction(Items.NETHERITE_SCRAP)) {
            use(Items.NETHERITE_SCRAP,"Трапка не найдена");
        }
    }

    private boolean canPerformAction(Item item) {
        return !mc.player.getItemCooldownManager().isCoolingDown(item);
    }
    public void use(Item item ,String notfoundText) {
        SearchInvResult hotbarDezorResult = InventoryHandler.findItemInInventory(item);

        if (hotbarDezorResult.found()) {
            IHolder.sendPacket(new UpdateSelectedSlotC2SPacket(hotbarDezorResult.slot()));

            IHolder.sendSequencedPacket(id -> new PlayerInteractItemC2SPacket(Hand.MAIN_HAND, id));
            IHolder.sendPacket(new HandSwingC2SPacket(Hand.MAIN_HAND));

            IHolder.sendPacket(new UpdateSelectedSlotC2SPacket(mc.player.getInventory().selectedSlot));

        } else {
            logDirect(String.format(notfoundText));
            return;
        }
    }
}
IHolder.java (minced solution):
public interface IHolder {

    MinecraftClient mc = MinecraftClient.getInstance();
    static void sendPacket(Packet<?> packet) {
        if (mc.getNetworkHandler() == null) return;

        mc.getNetworkHandler().sendPacket(packet);
    }

    static void sendSequencedPacket(SequencedPacketCreator packetCreator) {
        if (mc.getNetworkHandler() == null || mc.world == null) return;
        try (PendingUpdateManager pendingUpdateManager = ((IClientWorldMixin) mc.world).getPendingUpdateManager().incrementSequence();){
            int i = pendingUpdateManager.getSequence();
            mc.getNetworkHandler().sendPacket(packetCreator.predict(i));
        }
    }
}
SearchInvResult:
public record SearchInvResult(int slot, boolean found, ItemStack stack) {
    private static final SearchInvResult NOT_FOUND_RESULT = new SearchInvResult(-1, false, null);

    public static SearchInvResult notFound() {
        return NOT_FOUND_RESULT;
    }

    public static @NotNull SearchInvResult inOffhand(ItemStack stack) {
        return new SearchInvResult(999, true, stack);
    }

    public boolean isHolding() {
        if (mc.player == null) return false;

        return mc.player.getInventory().selectedSlot == slot;
    }

    public boolean isInHotBar() {
        return slot < 9;
    }
}
InventoryHandler:
package ru.wuq.utils.common.util.player.inventory;

import net.minecraft.block.AirBlock;
import net.minecraft.block.EnderChestBlock;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.util.math.BlockPos;

import java.util.Arrays;
import java.util.List;

public class InventoryHandler implements IHolder {
    public static int getTool(final BlockPos pos) {
        int index = -1;
        float CurrentFastest = 1.0f;
        for (int i = 0; i < 9; ++i) {
            final ItemStack stack = mc.player.getInventory().getStack(i);
            if (stack != ItemStack.EMPTY) {

                final float digSpeed = EnchantmentHelper.getLevel(Enchantments.EFFICIENCY, stack);
                final float destroySpeed = stack.getMiningSpeedMultiplier(mc.world.getBlockState(pos));

                if (mc.world.getBlockState(pos).getBlock() instanceof AirBlock) return -1;
                if (mc.world.getBlockState(pos).getBlock() instanceof EnderChestBlock) {
                    if (EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, stack) > 0 && digSpeed + destroySpeed > CurrentFastest) {
                        CurrentFastest = digSpeed + destroySpeed;
                        index = i;
                    }
                } else if (digSpeed + destroySpeed > CurrentFastest) {
                    CurrentFastest = digSpeed + destroySpeed;
                    index = i;
                }
            }
        }
        return index;
    }
    public static int getChestplate() {
        for (int i = 0; i < 45; ++i) {
            ItemStack itemStack = mc.player.getInventory().getStack(i);
            if (itemStack.getItem() instanceof ArmorItem)
                if (((ArmorItem)itemStack.getItem()).getSlotType() == EquipmentSlot.CHEST)
                    return i == 40 ? 45 : i < 9 ? 36 + i : i;
        }
        return -1;
    }
    @Deprecated
    public static int getElytra() {
        for (ItemStack stack : mc.player.getInventory().armor) {
            if (stack.getItem() == Items.ELYTRA && stack.getDamage() < 430) {
                return -2;
            }
        }

        int slot = -1;
        for (int i = 0; i < 36; i++) {
            ItemStack s = mc.player.getInventory().getStack(i);
            if (s.getItem() == Items.ELYTRA && s.getDamage() < 430) {
                slot = i;
                break;
            }
        }

        if (slot < 9 && slot != -1) {
            slot = slot + 36;
        }

        return slot;
    }

    public static SearchInvResult findInHotBar(Searcher searcher) {
        if (mc.player != null) {
            for (int i = 0; i < 9; ++i) {
                ItemStack stack = mc.player.getInventory().getStack(i);
                if (searcher.isValid(stack)) {
                    return new SearchInvResult(i, true, stack);
                }
            }
        }

        return SearchInvResult.notFound();
    }

    public static SearchInvResult findItemInHotBar(List<Item> items) {
        return findInHotBar(stack -> items.contains(stack.getItem()));
    }

    public static SearchInvResult findItemInHotBar(Item... items) {
        return findItemInHotBar(Arrays.asList(items));
    }

    public static SearchInvResult findInInventory(Searcher searcher) {
        if (mc.player != null) {
            for (int i = 36; i >= 0; i--) {
                ItemStack stack = mc.player.getInventory().getStack(i);
                if (searcher.isValid(stack)) {
                    if (i < 9) i += 36;
                    return new SearchInvResult(i, true, stack);
                }
            }
        }

        return SearchInvResult.notFound();
    }

    public static SearchInvResult findItemInInventory(List<Item> items) {
        return findInInventory(stack -> items.contains(stack.getItem()));
    }

    public static SearchInvResult findItemInInventory(Item... items) {
        return findItemInInventory(Arrays.asList(items));
    }

    public static void moveItem(int one, int two, boolean swap) {
        mc.interactionManager.clickSlot(0, one, 0, SlotActionType.PICKUP, mc.player);
        mc.interactionManager.clickSlot(0, two, 0, SlotActionType.PICKUP, mc.player);
        if (swap) {
            mc.interactionManager.clickSlot(0, one, 0, SlotActionType.PICKUP, mc.player);
        }
    }

    public interface Searcher {
        boolean isValid(ItemStack stack);
    }
}
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
20 Июн 2022
Сообщения
89
Реакции[?]
0
Поинты[?]
0
Сидит на базе экспенсива, пастит минцед, тандерхак, лучший)
ДАДААДАДАДАД КНЧ
Обычный фт хелпер юзает по бинду трапку и дезорент
FuntimeHelper.java:
public class FuntimeHelper extends Module {
    BindSetting dezorka = new BindSetting("Дезорентация","");
    BindSetting trapka = new BindSetting("Трапка","");
    public FuntimeHelper() {
        super("FuntimeHelper", ModuleCategory.PLAYER);
        setup(dezorka,trapka);
    }
    @EventListener
    public void onKey(KeyEvent keyEvent) {
        if (keyEvent.isKeyDown(dezorka.getKey()) && canPerformAction(Items.ENDER_EYE)) {
            use(Items.ENDER_EYE,"Дезорентация не найдена");
        }
        if (keyEvent.isKeyDown(trapka.getKey()) && canPerformAction(Items.NETHERITE_SCRAP)) {
            use(Items.NETHERITE_SCRAP,"Трапка не найдена");
        }
    }

    private boolean canPerformAction(Item item) {
        return !mc.player.getItemCooldownManager().isCoolingDown(item);
    }
    public void use(Item item ,String notfoundText) {
        SearchInvResult hotbarDezorResult = InventoryHandler.findItemInInventory(item);

        if (hotbarDezorResult.found()) {
            IHolder.sendPacket(new UpdateSelectedSlotC2SPacket(hotbarDezorResult.slot()));

            IHolder.sendSequencedPacket(id -> new PlayerInteractItemC2SPacket(Hand.MAIN_HAND, id));
            IHolder.sendPacket(new HandSwingC2SPacket(Hand.MAIN_HAND));

            IHolder.sendPacket(new UpdateSelectedSlotC2SPacket(mc.player.getInventory().selectedSlot));

        } else {
            logDirect(String.format(notfoundText));
            return;
        }
    }
}
IHolder.java (minced solution):
public interface IHolder {

    MinecraftClient mc = MinecraftClient.getInstance();
    static void sendPacket(Packet<?> packet) {
        if (mc.getNetworkHandler() == null) return;

        mc.getNetworkHandler().sendPacket(packet);
    }

    static void sendSequencedPacket(SequencedPacketCreator packetCreator) {
        if (mc.getNetworkHandler() == null || mc.world == null) return;
        try (PendingUpdateManager pendingUpdateManager = ((IClientWorldMixin) mc.world).getPendingUpdateManager().incrementSequence();){
            int i = pendingUpdateManager.getSequence();
            mc.getNetworkHandler().sendPacket(packetCreator.predict(i));
        }
    }
}
SearchInvResult:
public record SearchInvResult(int slot, boolean found, ItemStack stack) {
    private static final SearchInvResult NOT_FOUND_RESULT = new SearchInvResult(-1, false, null);

    public static SearchInvResult notFound() {
        return NOT_FOUND_RESULT;
    }

    public static @NotNull SearchInvResult inOffhand(ItemStack stack) {
        return new SearchInvResult(999, true, stack);
    }

    public boolean isHolding() {
        if (mc.player == null) return false;

        return mc.player.getInventory().selectedSlot == slot;
    }

    public boolean isInHotBar() {
        return slot < 9;
    }
}
InventoryHandler:
package ru.wuq.utils.common.util.player.inventory;

import net.minecraft.block.AirBlock;
import net.minecraft.block.EnderChestBlock;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.util.math.BlockPos;

import java.util.Arrays;
import java.util.List;

public class InventoryHandler implements IHolder {
    public static int getTool(final BlockPos pos) {
        int index = -1;
        float CurrentFastest = 1.0f;
        for (int i = 0; i < 9; ++i) {
            final ItemStack stack = mc.player.getInventory().getStack(i);
            if (stack != ItemStack.EMPTY) {

                final float digSpeed = EnchantmentHelper.getLevel(Enchantments.EFFICIENCY, stack);
                final float destroySpeed = stack.getMiningSpeedMultiplier(mc.world.getBlockState(pos));

                if (mc.world.getBlockState(pos).getBlock() instanceof AirBlock) return -1;
                if (mc.world.getBlockState(pos).getBlock() instanceof EnderChestBlock) {
                    if (EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, stack) > 0 && digSpeed + destroySpeed > CurrentFastest) {
                        CurrentFastest = digSpeed + destroySpeed;
                        index = i;
                    }
                } else if (digSpeed + destroySpeed > CurrentFastest) {
                    CurrentFastest = digSpeed + destroySpeed;
                    index = i;
                }
            }
        }
        return index;
    }
    public static int getChestplate() {
        for (int i = 0; i < 45; ++i) {
            ItemStack itemStack = mc.player.getInventory().getStack(i);
            if (itemStack.getItem() instanceof ArmorItem)
                if (((ArmorItem)itemStack.getItem()).getSlotType() == EquipmentSlot.CHEST)
                    return i == 40 ? 45 : i < 9 ? 36 + i : i;
        }
        return -1;
    }
    @Deprecated
    public static int getElytra() {
        for (ItemStack stack : mc.player.getInventory().armor) {
            if (stack.getItem() == Items.ELYTRA && stack.getDamage() < 430) {
                return -2;
            }
        }

        int slot = -1;
        for (int i = 0; i < 36; i++) {
            ItemStack s = mc.player.getInventory().getStack(i);
            if (s.getItem() == Items.ELYTRA && s.getDamage() < 430) {
                slot = i;
                break;
            }
        }

        if (slot < 9 && slot != -1) {
            slot = slot + 36;
        }

        return slot;
    }

    public static SearchInvResult findInHotBar(Searcher searcher) {
        if (mc.player != null) {
            for (int i = 0; i < 9; ++i) {
                ItemStack stack = mc.player.getInventory().getStack(i);
                if (searcher.isValid(stack)) {
                    return new SearchInvResult(i, true, stack);
                }
            }
        }

        return SearchInvResult.notFound();
    }

    public static SearchInvResult findItemInHotBar(List<Item> items) {
        return findInHotBar(stack -> items.contains(stack.getItem()));
    }

    public static SearchInvResult findItemInHotBar(Item... items) {
        return findItemInHotBar(Arrays.asList(items));
    }

    public static SearchInvResult findInInventory(Searcher searcher) {
        if (mc.player != null) {
            for (int i = 36; i >= 0; i--) {
                ItemStack stack = mc.player.getInventory().getStack(i);
                if (searcher.isValid(stack)) {
                    if (i < 9) i += 36;
                    return new SearchInvResult(i, true, stack);
                }
            }
        }

        return SearchInvResult.notFound();
    }

    public static SearchInvResult findItemInInventory(List<Item> items) {
        return findInInventory(stack -> items.contains(stack.getItem()));
    }

    public static SearchInvResult findItemInInventory(Item... items) {
        return findItemInInventory(Arrays.asList(items));
    }

    public static void moveItem(int one, int two, boolean swap) {
        mc.interactionManager.clickSlot(0, one, 0, SlotActionType.PICKUP, mc.player);
        mc.interactionManager.clickSlot(0, two, 0, SlotActionType.PICKUP, mc.player);
        if (swap) {
            mc.interactionManager.clickSlot(0, one, 0, SlotActionType.PICKUP, mc.player);
        }
    }

    public interface Searcher {
        boolean isValid(ItemStack stack);
    }
}
полезно, но для кого?
 
Начинающий
Статус
Оффлайн
Регистрация
7 Янв 2023
Сообщения
88
Реакции[?]
0
Поинты[?]
0
Умный человек сам напишет себе фт хелпер, смысл юзерам этого форума от этого на 1.20.1 так ещё и фабрик?
 
Начинающий
Статус
Оффлайн
Регистрация
25 Янв 2024
Сообщения
330
Реакции[?]
0
Поинты[?]
1K
Сверху Снизу