Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Обход античита AntiBot | Really World & UniAC | Expensive 3.1 / Litka

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Сен 2024
Сообщения
357
Реакции
2
Выберите загрузчик игры
  1. Прочие моды
Всем привет! После слива моего читикса, я продолжил делать фришную версию чита, так вот, сливаю вам анти бот для uni ac (lony grief и т.д), и под рилик, данный слив для тех, кто вообще не разбирается в этом, думаю нормально
DW:

AntiBOT:
Expand Collapse Copy
package vesence.main.features.categories.combat;

import com.google.common.eventbus.Subscribe;
import com.mojang.authlib.GameProfile;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.IPacket;
import net.minecraft.network.play.server.SPlayerListItemPacket;
import vesence.events.EventPacket;
import vesence.events.TickEvent;
import vesence.events.WorldChangeEvent;
import vesence.events.WorldLoadEvent;
import vesence.main.features.api.Category;
import vesence.main.features.api.Feature;
import vesence.main.features.api.FeatureInfo;
import vesence.main.features.categories.movement.AntiTarget;
import vesence.main.features.settings.impl.ModeSetting;
import vesence.util.player.PlayerUtil;

import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.StreamSupport;

@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@FeatureInfo(name = "Anti Bot", desc = "Фильтрует ботов для комбата и иных функций", type = Category.Combat)
public class AntiBot extends Feature {

    private final Set<UUID> suspectSet = new HashSet<>();
    private static final Set<UUID> botSet = new HashSet<>();

    private final ModeSetting mode = new ModeSetting("Режим обхода","Matrix", "Matrix", "ReallyWorld", "UniAC (LonyGrief и так далее)");

    public AntiBot() {
        addSettings(mode);
    }
    @Subscribe
    public void onEvent(EventPacket event) {
        IPacket<?> packet = event.getPacket();

        if (packet instanceof SPlayerListItemPacket wrapper) {
            if (wrapper.getAction().equals(SPlayerListItemPacket.Action.ADD_PLAYER)) {
                checkPlayerAfterSpawn(wrapper);
            }
            if (wrapper.getAction().equals(SPlayerListItemPacket.Action.REMOVE_PLAYER)) {
                removePlayerBecauseLeftServer(wrapper);
            }
        }
    }

    @Subscribe
    public void onTick(TickEvent event) {
        if (mc.player == null || mc.world == null) return;

        if (!suspectSet.isEmpty()) {
            for (AbstractClientPlayerEntity player : mc.world.getPlayers()) {
                if (suspectSet.contains(player.getUniqueID())) {
                    evaluateSuspectPlayer(player);
                }
            }
        }


        if (mode.is("Matrix")) {
            matrixMode();
        } else if (mode.is("ReallyWorld")) {
            reallyWorldMode();
        } else if (mode.is("UniAC (LonyGrief и так далее)")) {
            uniACMode();
        }
    }

    @Subscribe
    public void onEvent(WorldChangeEvent event) {
        reset();
    }

    @Subscribe
    public void onEvent(WorldLoadEvent event) {
        reset();
    }


    private void checkPlayerAfterSpawn(SPlayerListItemPacket packet) {
        if (mc.getConnection() == null) return;
        packet.getPlayerAdditionEntries().forEach(data -> {
            GameProfile profile = data.getProfile();
            if (isRealPlayer(data, profile)) {
                return;
            }
            if (isDuplicateProfile(profile)) {
                botSet.add(profile.getId());
            } else {
                suspectSet.add(profile.getId());
            }
        });
    }

    private void removePlayerBecauseLeftServer(SPlayerListItemPacket packet) {
        packet.getPlayers().forEach(data -> {
            suspectSet.remove(data.getProfile().getId());
            botSet.remove(data.getProfile().getId());
        });
    }


    private boolean isRealPlayer(SPlayerListItemPacket.AddPlayerData data, GameProfile profile) {
        return data.getPing() < 5 || (profile.getProperties() != null && !profile.getProperties().isEmpty());
    }

    public boolean isDuplicateProfile(GameProfile profile) {
        return mc.getConnection().getPlayerInfoMap().stream()
                .filter(player -> player.getGameProfile().getName().equals(profile.getName()) && !player.getGameProfile().getId().equals(profile.getId()))
                .count() == 1;
    }


    private void evaluateSuspectPlayer(PlayerEntity player) {
        Iterable<ItemStack> armor = null;

        if (!isFullyEquipped(player)) {
            armor = player.getArmorInventoryList();
        }
        if ((isFullyEquipped(player) || hasArmorChanged(player, armor))) {
            botSet.add(player.getUniqueID());
        }
        suspectSet.remove(player.getUniqueID());
    }

    public boolean isFullyEquipped(PlayerEntity entity) {
        return IntStream.rangeClosed(0, 3)
                .mapToObj(slot -> entity.inventory.armorItemInSlot(slot))
                .allMatch(stack -> stack.getItem() instanceof ArmorItem && !stack.isEnchanted());
    }

    public boolean hasArmorChanged(PlayerEntity entity, Iterable<ItemStack> prevArmor) {
        if (prevArmor == null) {
            return true;
        }

        List<ItemStack> currentArmorList = StreamSupport.stream(entity.getArmorInventoryList().spliterator(), false).toList();
        List<ItemStack> prevArmorList = StreamSupport.stream(prevArmor.spliterator(), false).toList();

        return !IntStream.range(0, Math.min(currentArmorList.size(), prevArmorList.size()))
                .allMatch(i -> currentArmorList.get(i).equals(prevArmorList.get(i))) || currentArmorList.size() != prevArmorList.size();
    }

    public static boolean isBot(PlayerEntity entity) {
        return PlayerUtil.isInvalidName(entity.getGameProfile().getName()) || botSet.contains(entity.getUniqueID());
    }


    private void matrixMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            // Проверка что все слоты брони не пустые
            boolean hasBoots = entity.inventory.armorItemInSlot(0).getItem() != Items.AIR;
            boolean hasLeggings = entity.inventory.armorItemInSlot(1).getItem() != Items.AIR;
            boolean hasChestplate = entity.inventory.armorItemInSlot(2).getItem() != Items.AIR;
            boolean hasHelmet = entity.inventory.armorItemInSlot(3).getItem() != Items.AIR;

            // Проверка что броня может быть зачарована (isEnchantable)
            boolean bootsEnchantable = entity.inventory.armorItemInSlot(0).isEnchantable();
            boolean leggingsEnchantable = entity.inventory.armorItemInSlot(1).isEnchantable();
            boolean chestplateEnchantable = entity.inventory.armorItemInSlot(2).isEnchantable();
            boolean helmetEnchantable = entity.inventory.armorItemInSlot(3).isEnchantable();

            // Проверка что оффхенд пустой
            boolean emptyOffhand = entity.getHeldItemOffhand().getItem() == Items.AIR;

            // Проверка что есть кожаная или железная броня
            boolean hasLeatherOrIron =
                    entity.inventory.armorItemInSlot(0).getItem() == Items.LEATHER_BOOTS ||
                            entity.inventory.armorItemInSlot(1).getItem() == Items.LEATHER_LEGGINGS ||
                            entity.inventory.armorItemInSlot(2).getItem() == Items.LEATHER_CHESTPLATE ||
                            entity.inventory.armorItemInSlot(3).getItem() == Items.LEATHER_HELMET ||
                            entity.inventory.armorItemInSlot(0).getItem() == Items.IRON_BOOTS ||
                            entity.inventory.armorItemInSlot(1).getItem() == Items.IRON_LEGGINGS ||
                            entity.inventory.armorItemInSlot(2).getItem() == Items.IRON_CHESTPLATE ||
                            entity.inventory.armorItemInSlot(3).getItem() == Items.IRON_HELMET;

            // Проверка что в основной руке что-то есть
            boolean hasMainHandItem = entity.getHeldItemMainhand().getItem() != Items.AIR;

            // Проверка что броня не повреждена
            boolean notDamagedBoots = !entity.inventory.armorItemInSlot(0).isDamaged();
            boolean notDamagedLeggings = !entity.inventory.armorItemInSlot(1).isDamaged();
            boolean notDamagedChestplate = !entity.inventory.armorItemInSlot(2).isDamaged();
            boolean notDamagedHelmet = !entity.inventory.armorItemInSlot(3).isDamaged();

            // Проверка уровня голода (20 = полный)
            boolean fullHunger = entity.getFoodStats().getFoodLevel() == 20;

            // Финальная проверка: все условия должны быть выполнены
            if (hasBoots && hasLeggings && hasChestplate && hasHelmet &&
                    bootsEnchantable && leggingsEnchantable && chestplateEnchantable && helmetEnchantable &&
                    emptyOffhand && hasLeatherOrIron && hasMainHandItem &&
                    notDamagedBoots && notDamagedLeggings && notDamagedChestplate && notDamagedHelmet &&
                    fullHunger) {

                if (!botSet.contains(entity.getUniqueID())) {
                    botSet.add(entity.getUniqueID());
                }
                return;
            }

            // Если условия не выполнены, удаляем из списка ботов
            botSet.remove(entity.getUniqueID());
        }
    }


    private void reallyWorldMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            String playerName = entity.getName().getString();
            UUID expectedUUID = UUID.nameUUIDFromBytes(("OfflinePlayer:" + playerName).getBytes());

            boolean isFakeUUID = !entity.getUniqueID().equals(expectedUUID);
            boolean isNotNPC = !playerName.contains("NPC") && !playerName.startsWith("[ZNPC]");

            if (isFakeUUID && isNotNPC && !botSet.contains(entity.getUniqueID())) {
                botSet.add(entity.getUniqueID());
            }
        }
    }


    private void uniACMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            // Проверка пустых слотов брони
            boolean nullSlotBoots = entity.inventory.armorItemInSlot(0).getItem() == Items.AIR;
            boolean nullSlotLeggings = entity.inventory.armorItemInSlot(1).getItem() == Items.AIR;
            boolean nullSlotChestplate = entity.inventory.armorItemInSlot(2).getItem() == Items.AIR;
            boolean nullSlotHelmet = entity.inventory.armorItemInSlot(3).getItem() == Items.AIR;

            // Проверка непустых слотов брони
            boolean nonNullSlotBoots = entity.inventory.armorItemInSlot(0).getItem() != Items.AIR;
            boolean nonNullSlotLeggings = entity.inventory.armorItemInSlot(1).getItem() != Items.AIR;
            boolean nonNullSlotChestplate = entity.inventory.armorItemInSlot(2).getItem() != Items.AIR;
            boolean nonNullSlotHelmet = entity.inventory.armorItemInSlot(3).getItem() != Items.AIR;

            // Проверка зачарований
            boolean isEnchantedBoots = entity.inventory.armorItemInSlot(0).isEnchanted();
            boolean isEnchantedLeggings = entity.inventory.armorItemInSlot(1).isEnchanted();
            boolean isEnchantedChestplate = entity.inventory.armorItemInSlot(2).isEnchanted();
            boolean isEnchantedHelmet = entity.inventory.armorItemInSlot(3).isEnchanted();

            // Логика: слот пустой ИЛИ (слот не пустой И не зачарован)
            boolean boots = nullSlotBoots || (nonNullSlotBoots && !isEnchantedBoots);
            boolean leggings = nullSlotLeggings || (nonNullSlotLeggings && !isEnchantedLeggings);
            boolean chestplate = nullSlotChestplate || (nonNullSlotChestplate && !isEnchantedChestplate);
            boolean helmet = nullSlotHelmet || (nonNullSlotHelmet && !isEnchantedHelmet);

            // Проверка что игрок не голый
            boolean playerIsNotNaked = entity.getTotalArmorValue() != 0;

            // Проверка на повреждение брони
            boolean isDamaged =
                    entity.inventory.armorItemInSlot(0).isDamaged() &&
                            entity.inventory.armorItemInSlot(1).isDamaged() &&
                            entity.inventory.armorItemInSlot(2).isDamaged() &&
                            entity.inventory.armorItemInSlot(3).isDamaged();

            // Проверка длины имени (6 символов)
            boolean nameWidth = entity.getName().getString().length() == 6;

            // Полная броня без зачарований
            boolean isFullArmor = boots && leggings && chestplate && helmet;

            // Финальная проверка
            if (nameWidth && playerIsNotNaked && !isDamaged && isFullArmor) {
                if (!botSet.contains(entity.getUniqueID())) {
                    botSet.add(entity.getUniqueID());
                }
            } else {
                botSet.remove(entity.getUniqueID());
            }
        }
    }


    private boolean armorCheck(PlayerEntity entity) {
        ItemStack helmet = getArmor(entity, 3);
        ItemStack chestplate = getArmor(entity, 2);
        ItemStack leggings = getArmor(entity, 1);
        ItemStack boots = getArmor(entity, 0);


        boolean leatherHelmet = helmet.getItem() == Items.LEATHER_HELMET &&
                !helmet.isEnchanted();
        boolean leatherChestplate = chestplate.getItem() == Items.LEATHER_CHESTPLATE &&
                !chestplate.isEnchanted();
        boolean leatherLeggings = leggings.getItem() == Items.LEATHER_LEGGINGS &&
                !leggings.isEnchanted();
        boolean leatherBoots = boots.getItem() == Items.LEATHER_BOOTS &&
                !boots.isEnchanted();


        boolean ironChestplate = chestplate.getItem() == Items.IRON_CHESTPLATE &&
                !chestplate.isEnchanted();
        boolean ironLeggings = leggings.getItem() == Items.IRON_LEGGINGS &&
                !leggings.isEnchanted();

        return leatherHelmet || leatherChestplate || leatherLeggings || leatherBoots ||
                ironChestplate || ironLeggings;
    }


    private ItemStack getArmor(PlayerEntity entity, int slot) {
        return entity.inventory.armorItemInSlot(slot);
    }

    public void reset() {
        suspectSet.clear();
        botSet.clear();
    }

    @Override
    public void toggle() {
        super.toggle();
        reset();
    }
}
SS: зачем он нужен? Это просто обход летающей штуки, созданной анти читом
Надеюсь для начинающих сойдет, всем удачи
(переменная это перемены в школе)
(ооп это организация обкуренных наций (надеюсь уяснили))
 
Всем привет! После слива моего читикса, я продолжил делать фришную версию чита, так вот, сливаю вам анти бот для uni ac (lony grief и т.д), и под рилик, данный слив для тех, кто вообще не разбирается в этом, думаю нормально
DW:

AntiBOT:
Expand Collapse Copy
package vesence.main.features.categories.combat;

import com.google.common.eventbus.Subscribe;
import com.mojang.authlib.GameProfile;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.IPacket;
import net.minecraft.network.play.server.SPlayerListItemPacket;
import vesence.events.EventPacket;
import vesence.events.TickEvent;
import vesence.events.WorldChangeEvent;
import vesence.events.WorldLoadEvent;
import vesence.main.features.api.Category;
import vesence.main.features.api.Feature;
import vesence.main.features.api.FeatureInfo;
import vesence.main.features.categories.movement.AntiTarget;
import vesence.main.features.settings.impl.ModeSetting;
import vesence.util.player.PlayerUtil;

import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.StreamSupport;

@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@FeatureInfo(name = "Anti Bot", desc = "Фильтрует ботов для комбата и иных функций", type = Category.Combat)
public class AntiBot extends Feature {

    private final Set<UUID> suspectSet = new HashSet<>();
    private static final Set<UUID> botSet = new HashSet<>();

    private final ModeSetting mode = new ModeSetting("Режим обхода","Matrix", "Matrix", "ReallyWorld", "UniAC (LonyGrief и так далее)");

    public AntiBot() {
        addSettings(mode);
    }
    @Subscribe
    public void onEvent(EventPacket event) {
        IPacket<?> packet = event.getPacket();

        if (packet instanceof SPlayerListItemPacket wrapper) {
            if (wrapper.getAction().equals(SPlayerListItemPacket.Action.ADD_PLAYER)) {
                checkPlayerAfterSpawn(wrapper);
            }
            if (wrapper.getAction().equals(SPlayerListItemPacket.Action.REMOVE_PLAYER)) {
                removePlayerBecauseLeftServer(wrapper);
            }
        }
    }

    @Subscribe
    public void onTick(TickEvent event) {
        if (mc.player == null || mc.world == null) return;

        if (!suspectSet.isEmpty()) {
            for (AbstractClientPlayerEntity player : mc.world.getPlayers()) {
                if (suspectSet.contains(player.getUniqueID())) {
                    evaluateSuspectPlayer(player);
                }
            }
        }


        if (mode.is("Matrix")) {
            matrixMode();
        } else if (mode.is("ReallyWorld")) {
            reallyWorldMode();
        } else if (mode.is("UniAC (LonyGrief и так далее)")) {
            uniACMode();
        }
    }

    @Subscribe
    public void onEvent(WorldChangeEvent event) {
        reset();
    }

    @Subscribe
    public void onEvent(WorldLoadEvent event) {
        reset();
    }


    private void checkPlayerAfterSpawn(SPlayerListItemPacket packet) {
        if (mc.getConnection() == null) return;
        packet.getPlayerAdditionEntries().forEach(data -> {
            GameProfile profile = data.getProfile();
            if (isRealPlayer(data, profile)) {
                return;
            }
            if (isDuplicateProfile(profile)) {
                botSet.add(profile.getId());
            } else {
                suspectSet.add(profile.getId());
            }
        });
    }

    private void removePlayerBecauseLeftServer(SPlayerListItemPacket packet) {
        packet.getPlayers().forEach(data -> {
            suspectSet.remove(data.getProfile().getId());
            botSet.remove(data.getProfile().getId());
        });
    }


    private boolean isRealPlayer(SPlayerListItemPacket.AddPlayerData data, GameProfile profile) {
        return data.getPing() < 5 || (profile.getProperties() != null && !profile.getProperties().isEmpty());
    }

    public boolean isDuplicateProfile(GameProfile profile) {
        return mc.getConnection().getPlayerInfoMap().stream()
                .filter(player -> player.getGameProfile().getName().equals(profile.getName()) && !player.getGameProfile().getId().equals(profile.getId()))
                .count() == 1;
    }


    private void evaluateSuspectPlayer(PlayerEntity player) {
        Iterable<ItemStack> armor = null;

        if (!isFullyEquipped(player)) {
            armor = player.getArmorInventoryList();
        }
        if ((isFullyEquipped(player) || hasArmorChanged(player, armor))) {
            botSet.add(player.getUniqueID());
        }
        suspectSet.remove(player.getUniqueID());
    }

    public boolean isFullyEquipped(PlayerEntity entity) {
        return IntStream.rangeClosed(0, 3)
                .mapToObj(slot -> entity.inventory.armorItemInSlot(slot))
                .allMatch(stack -> stack.getItem() instanceof ArmorItem && !stack.isEnchanted());
    }

    public boolean hasArmorChanged(PlayerEntity entity, Iterable<ItemStack> prevArmor) {
        if (prevArmor == null) {
            return true;
        }

        List<ItemStack> currentArmorList = StreamSupport.stream(entity.getArmorInventoryList().spliterator(), false).toList();
        List<ItemStack> prevArmorList = StreamSupport.stream(prevArmor.spliterator(), false).toList();

        return !IntStream.range(0, Math.min(currentArmorList.size(), prevArmorList.size()))
                .allMatch(i -> currentArmorList.get(i).equals(prevArmorList.get(i))) || currentArmorList.size() != prevArmorList.size();
    }

    public static boolean isBot(PlayerEntity entity) {
        return PlayerUtil.isInvalidName(entity.getGameProfile().getName()) || botSet.contains(entity.getUniqueID());
    }


    private void matrixMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            // Проверка что все слоты брони не пустые
            boolean hasBoots = entity.inventory.armorItemInSlot(0).getItem() != Items.AIR;
            boolean hasLeggings = entity.inventory.armorItemInSlot(1).getItem() != Items.AIR;
            boolean hasChestplate = entity.inventory.armorItemInSlot(2).getItem() != Items.AIR;
            boolean hasHelmet = entity.inventory.armorItemInSlot(3).getItem() != Items.AIR;

            // Проверка что броня может быть зачарована (isEnchantable)
            boolean bootsEnchantable = entity.inventory.armorItemInSlot(0).isEnchantable();
            boolean leggingsEnchantable = entity.inventory.armorItemInSlot(1).isEnchantable();
            boolean chestplateEnchantable = entity.inventory.armorItemInSlot(2).isEnchantable();
            boolean helmetEnchantable = entity.inventory.armorItemInSlot(3).isEnchantable();

            // Проверка что оффхенд пустой
            boolean emptyOffhand = entity.getHeldItemOffhand().getItem() == Items.AIR;

            // Проверка что есть кожаная или железная броня
            boolean hasLeatherOrIron =
                    entity.inventory.armorItemInSlot(0).getItem() == Items.LEATHER_BOOTS ||
                            entity.inventory.armorItemInSlot(1).getItem() == Items.LEATHER_LEGGINGS ||
                            entity.inventory.armorItemInSlot(2).getItem() == Items.LEATHER_CHESTPLATE ||
                            entity.inventory.armorItemInSlot(3).getItem() == Items.LEATHER_HELMET ||
                            entity.inventory.armorItemInSlot(0).getItem() == Items.IRON_BOOTS ||
                            entity.inventory.armorItemInSlot(1).getItem() == Items.IRON_LEGGINGS ||
                            entity.inventory.armorItemInSlot(2).getItem() == Items.IRON_CHESTPLATE ||
                            entity.inventory.armorItemInSlot(3).getItem() == Items.IRON_HELMET;

            // Проверка что в основной руке что-то есть
            boolean hasMainHandItem = entity.getHeldItemMainhand().getItem() != Items.AIR;

            // Проверка что броня не повреждена
            boolean notDamagedBoots = !entity.inventory.armorItemInSlot(0).isDamaged();
            boolean notDamagedLeggings = !entity.inventory.armorItemInSlot(1).isDamaged();
            boolean notDamagedChestplate = !entity.inventory.armorItemInSlot(2).isDamaged();
            boolean notDamagedHelmet = !entity.inventory.armorItemInSlot(3).isDamaged();

            // Проверка уровня голода (20 = полный)
            boolean fullHunger = entity.getFoodStats().getFoodLevel() == 20;

            // Финальная проверка: все условия должны быть выполнены
            if (hasBoots && hasLeggings && hasChestplate && hasHelmet &&
                    bootsEnchantable && leggingsEnchantable && chestplateEnchantable && helmetEnchantable &&
                    emptyOffhand && hasLeatherOrIron && hasMainHandItem &&
                    notDamagedBoots && notDamagedLeggings && notDamagedChestplate && notDamagedHelmet &&
                    fullHunger) {

                if (!botSet.contains(entity.getUniqueID())) {
                    botSet.add(entity.getUniqueID());
                }
                return;
            }

            // Если условия не выполнены, удаляем из списка ботов
            botSet.remove(entity.getUniqueID());
        }
    }


    private void reallyWorldMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            String playerName = entity.getName().getString();
            UUID expectedUUID = UUID.nameUUIDFromBytes(("OfflinePlayer:" + playerName).getBytes());

            boolean isFakeUUID = !entity.getUniqueID().equals(expectedUUID);
            boolean isNotNPC = !playerName.contains("NPC") && !playerName.startsWith("[ZNPC]");

            if (isFakeUUID && isNotNPC && !botSet.contains(entity.getUniqueID())) {
                botSet.add(entity.getUniqueID());
            }
        }
    }


    private void uniACMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            // Проверка пустых слотов брони
            boolean nullSlotBoots = entity.inventory.armorItemInSlot(0).getItem() == Items.AIR;
            boolean nullSlotLeggings = entity.inventory.armorItemInSlot(1).getItem() == Items.AIR;
            boolean nullSlotChestplate = entity.inventory.armorItemInSlot(2).getItem() == Items.AIR;
            boolean nullSlotHelmet = entity.inventory.armorItemInSlot(3).getItem() == Items.AIR;

            // Проверка непустых слотов брони
            boolean nonNullSlotBoots = entity.inventory.armorItemInSlot(0).getItem() != Items.AIR;
            boolean nonNullSlotLeggings = entity.inventory.armorItemInSlot(1).getItem() != Items.AIR;
            boolean nonNullSlotChestplate = entity.inventory.armorItemInSlot(2).getItem() != Items.AIR;
            boolean nonNullSlotHelmet = entity.inventory.armorItemInSlot(3).getItem() != Items.AIR;

            // Проверка зачарований
            boolean isEnchantedBoots = entity.inventory.armorItemInSlot(0).isEnchanted();
            boolean isEnchantedLeggings = entity.inventory.armorItemInSlot(1).isEnchanted();
            boolean isEnchantedChestplate = entity.inventory.armorItemInSlot(2).isEnchanted();
            boolean isEnchantedHelmet = entity.inventory.armorItemInSlot(3).isEnchanted();

            // Логика: слот пустой ИЛИ (слот не пустой И не зачарован)
            boolean boots = nullSlotBoots || (nonNullSlotBoots && !isEnchantedBoots);
            boolean leggings = nullSlotLeggings || (nonNullSlotLeggings && !isEnchantedLeggings);
            boolean chestplate = nullSlotChestplate || (nonNullSlotChestplate && !isEnchantedChestplate);
            boolean helmet = nullSlotHelmet || (nonNullSlotHelmet && !isEnchantedHelmet);

            // Проверка что игрок не голый
            boolean playerIsNotNaked = entity.getTotalArmorValue() != 0;

            // Проверка на повреждение брони
            boolean isDamaged =
                    entity.inventory.armorItemInSlot(0).isDamaged() &&
                            entity.inventory.armorItemInSlot(1).isDamaged() &&
                            entity.inventory.armorItemInSlot(2).isDamaged() &&
                            entity.inventory.armorItemInSlot(3).isDamaged();

            // Проверка длины имени (6 символов)
            boolean nameWidth = entity.getName().getString().length() == 6;

            // Полная броня без зачарований
            boolean isFullArmor = boots && leggings && chestplate && helmet;

            // Финальная проверка
            if (nameWidth && playerIsNotNaked && !isDamaged && isFullArmor) {
                if (!botSet.contains(entity.getUniqueID())) {
                    botSet.add(entity.getUniqueID());
                }
            } else {
                botSet.remove(entity.getUniqueID());
            }
        }
    }


    private boolean armorCheck(PlayerEntity entity) {
        ItemStack helmet = getArmor(entity, 3);
        ItemStack chestplate = getArmor(entity, 2);
        ItemStack leggings = getArmor(entity, 1);
        ItemStack boots = getArmor(entity, 0);


        boolean leatherHelmet = helmet.getItem() == Items.LEATHER_HELMET &&
                !helmet.isEnchanted();
        boolean leatherChestplate = chestplate.getItem() == Items.LEATHER_CHESTPLATE &&
                !chestplate.isEnchanted();
        boolean leatherLeggings = leggings.getItem() == Items.LEATHER_LEGGINGS &&
                !leggings.isEnchanted();
        boolean leatherBoots = boots.getItem() == Items.LEATHER_BOOTS &&
                !boots.isEnchanted();


        boolean ironChestplate = chestplate.getItem() == Items.IRON_CHESTPLATE &&
                !chestplate.isEnchanted();
        boolean ironLeggings = leggings.getItem() == Items.IRON_LEGGINGS &&
                !leggings.isEnchanted();

        return leatherHelmet || leatherChestplate || leatherLeggings || leatherBoots ||
                ironChestplate || ironLeggings;
    }


    private ItemStack getArmor(PlayerEntity entity, int slot) {
        return entity.inventory.armorItemInSlot(slot);
    }

    public void reset() {
        suspectSet.clear();
        botSet.clear();
    }

    @Override
    public void toggle() {
        super.toggle();
        reset();
    }
}
SS: зачем он нужен? Это просто обход летающей штуки, созданной анти читом
Надеюсь для начинающих сойдет, всем удачи
(переменная это перемены в школе)
(ооп это организация обкуренных наций (надеюсь уяснили))
смысл это напишет любой пастер или спастит с другого клиеннта ЛЮБОГО везде такое есть хддд
 
Всем привет! После слива моего читикса, я продолжил делать фришную версию чита, так вот, сливаю вам анти бот для uni ac (lony grief и т.д), и под рилик, данный слив для тех, кто вообще не разбирается в этом, думаю нормально
DW:

AntiBOT:
Expand Collapse Copy
package vesence.main.features.categories.combat;

import com.google.common.eventbus.Subscribe;
import com.mojang.authlib.GameProfile;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.IPacket;
import net.minecraft.network.play.server.SPlayerListItemPacket;
import vesence.events.EventPacket;
import vesence.events.TickEvent;
import vesence.events.WorldChangeEvent;
import vesence.events.WorldLoadEvent;
import vesence.main.features.api.Category;
import vesence.main.features.api.Feature;
import vesence.main.features.api.FeatureInfo;
import vesence.main.features.categories.movement.AntiTarget;
import vesence.main.features.settings.impl.ModeSetting;
import vesence.util.player.PlayerUtil;

import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.StreamSupport;

@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@FeatureInfo(name = "Anti Bot", desc = "Фильтрует ботов для комбата и иных функций", type = Category.Combat)
public class AntiBot extends Feature {

    private final Set<UUID> suspectSet = new HashSet<>();
    private static final Set<UUID> botSet = new HashSet<>();

    private final ModeSetting mode = new ModeSetting("Режим обхода","Matrix", "Matrix", "ReallyWorld", "UniAC (LonyGrief и так далее)");

    public AntiBot() {
        addSettings(mode);
    }
    @Subscribe
    public void onEvent(EventPacket event) {
        IPacket<?> packet = event.getPacket();

        if (packet instanceof SPlayerListItemPacket wrapper) {
            if (wrapper.getAction().equals(SPlayerListItemPacket.Action.ADD_PLAYER)) {
                checkPlayerAfterSpawn(wrapper);
            }
            if (wrapper.getAction().equals(SPlayerListItemPacket.Action.REMOVE_PLAYER)) {
                removePlayerBecauseLeftServer(wrapper);
            }
        }
    }

    @Subscribe
    public void onTick(TickEvent event) {
        if (mc.player == null || mc.world == null) return;

        if (!suspectSet.isEmpty()) {
            for (AbstractClientPlayerEntity player : mc.world.getPlayers()) {
                if (suspectSet.contains(player.getUniqueID())) {
                    evaluateSuspectPlayer(player);
                }
            }
        }


        if (mode.is("Matrix")) {
            matrixMode();
        } else if (mode.is("ReallyWorld")) {
            reallyWorldMode();
        } else if (mode.is("UniAC (LonyGrief и так далее)")) {
            uniACMode();
        }
    }

    @Subscribe
    public void onEvent(WorldChangeEvent event) {
        reset();
    }

    @Subscribe
    public void onEvent(WorldLoadEvent event) {
        reset();
    }


    private void checkPlayerAfterSpawn(SPlayerListItemPacket packet) {
        if (mc.getConnection() == null) return;
        packet.getPlayerAdditionEntries().forEach(data -> {
            GameProfile profile = data.getProfile();
            if (isRealPlayer(data, profile)) {
                return;
            }
            if (isDuplicateProfile(profile)) {
                botSet.add(profile.getId());
            } else {
                suspectSet.add(profile.getId());
            }
        });
    }

    private void removePlayerBecauseLeftServer(SPlayerListItemPacket packet) {
        packet.getPlayers().forEach(data -> {
            suspectSet.remove(data.getProfile().getId());
            botSet.remove(data.getProfile().getId());
        });
    }


    private boolean isRealPlayer(SPlayerListItemPacket.AddPlayerData data, GameProfile profile) {
        return data.getPing() < 5 || (profile.getProperties() != null && !profile.getProperties().isEmpty());
    }

    public boolean isDuplicateProfile(GameProfile profile) {
        return mc.getConnection().getPlayerInfoMap().stream()
                .filter(player -> player.getGameProfile().getName().equals(profile.getName()) && !player.getGameProfile().getId().equals(profile.getId()))
                .count() == 1;
    }


    private void evaluateSuspectPlayer(PlayerEntity player) {
        Iterable<ItemStack> armor = null;

        if (!isFullyEquipped(player)) {
            armor = player.getArmorInventoryList();
        }
        if ((isFullyEquipped(player) || hasArmorChanged(player, armor))) {
            botSet.add(player.getUniqueID());
        }
        suspectSet.remove(player.getUniqueID());
    }

    public boolean isFullyEquipped(PlayerEntity entity) {
        return IntStream.rangeClosed(0, 3)
                .mapToObj(slot -> entity.inventory.armorItemInSlot(slot))
                .allMatch(stack -> stack.getItem() instanceof ArmorItem && !stack.isEnchanted());
    }

    public boolean hasArmorChanged(PlayerEntity entity, Iterable<ItemStack> prevArmor) {
        if (prevArmor == null) {
            return true;
        }

        List<ItemStack> currentArmorList = StreamSupport.stream(entity.getArmorInventoryList().spliterator(), false).toList();
        List<ItemStack> prevArmorList = StreamSupport.stream(prevArmor.spliterator(), false).toList();

        return !IntStream.range(0, Math.min(currentArmorList.size(), prevArmorList.size()))
                .allMatch(i -> currentArmorList.get(i).equals(prevArmorList.get(i))) || currentArmorList.size() != prevArmorList.size();
    }

    public static boolean isBot(PlayerEntity entity) {
        return PlayerUtil.isInvalidName(entity.getGameProfile().getName()) || botSet.contains(entity.getUniqueID());
    }


    private void matrixMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            // Проверка что все слоты брони не пустые
            boolean hasBoots = entity.inventory.armorItemInSlot(0).getItem() != Items.AIR;
            boolean hasLeggings = entity.inventory.armorItemInSlot(1).getItem() != Items.AIR;
            boolean hasChestplate = entity.inventory.armorItemInSlot(2).getItem() != Items.AIR;
            boolean hasHelmet = entity.inventory.armorItemInSlot(3).getItem() != Items.AIR;

            // Проверка что броня может быть зачарована (isEnchantable)
            boolean bootsEnchantable = entity.inventory.armorItemInSlot(0).isEnchantable();
            boolean leggingsEnchantable = entity.inventory.armorItemInSlot(1).isEnchantable();
            boolean chestplateEnchantable = entity.inventory.armorItemInSlot(2).isEnchantable();
            boolean helmetEnchantable = entity.inventory.armorItemInSlot(3).isEnchantable();

            // Проверка что оффхенд пустой
            boolean emptyOffhand = entity.getHeldItemOffhand().getItem() == Items.AIR;

            // Проверка что есть кожаная или железная броня
            boolean hasLeatherOrIron =
                    entity.inventory.armorItemInSlot(0).getItem() == Items.LEATHER_BOOTS ||
                            entity.inventory.armorItemInSlot(1).getItem() == Items.LEATHER_LEGGINGS ||
                            entity.inventory.armorItemInSlot(2).getItem() == Items.LEATHER_CHESTPLATE ||
                            entity.inventory.armorItemInSlot(3).getItem() == Items.LEATHER_HELMET ||
                            entity.inventory.armorItemInSlot(0).getItem() == Items.IRON_BOOTS ||
                            entity.inventory.armorItemInSlot(1).getItem() == Items.IRON_LEGGINGS ||
                            entity.inventory.armorItemInSlot(2).getItem() == Items.IRON_CHESTPLATE ||
                            entity.inventory.armorItemInSlot(3).getItem() == Items.IRON_HELMET;

            // Проверка что в основной руке что-то есть
            boolean hasMainHandItem = entity.getHeldItemMainhand().getItem() != Items.AIR;

            // Проверка что броня не повреждена
            boolean notDamagedBoots = !entity.inventory.armorItemInSlot(0).isDamaged();
            boolean notDamagedLeggings = !entity.inventory.armorItemInSlot(1).isDamaged();
            boolean notDamagedChestplate = !entity.inventory.armorItemInSlot(2).isDamaged();
            boolean notDamagedHelmet = !entity.inventory.armorItemInSlot(3).isDamaged();

            // Проверка уровня голода (20 = полный)
            boolean fullHunger = entity.getFoodStats().getFoodLevel() == 20;

            // Финальная проверка: все условия должны быть выполнены
            if (hasBoots && hasLeggings && hasChestplate && hasHelmet &&
                    bootsEnchantable && leggingsEnchantable && chestplateEnchantable && helmetEnchantable &&
                    emptyOffhand && hasLeatherOrIron && hasMainHandItem &&
                    notDamagedBoots && notDamagedLeggings && notDamagedChestplate && notDamagedHelmet &&
                    fullHunger) {

                if (!botSet.contains(entity.getUniqueID())) {
                    botSet.add(entity.getUniqueID());
                }
                return;
            }

            // Если условия не выполнены, удаляем из списка ботов
            botSet.remove(entity.getUniqueID());
        }
    }


    private void reallyWorldMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            String playerName = entity.getName().getString();
            UUID expectedUUID = UUID.nameUUIDFromBytes(("OfflinePlayer:" + playerName).getBytes());

            boolean isFakeUUID = !entity.getUniqueID().equals(expectedUUID);
            boolean isNotNPC = !playerName.contains("NPC") && !playerName.startsWith("[ZNPC]");

            if (isFakeUUID && isNotNPC && !botSet.contains(entity.getUniqueID())) {
                botSet.add(entity.getUniqueID());
            }
        }
    }


    private void uniACMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            // Проверка пустых слотов брони
            boolean nullSlotBoots = entity.inventory.armorItemInSlot(0).getItem() == Items.AIR;
            boolean nullSlotLeggings = entity.inventory.armorItemInSlot(1).getItem() == Items.AIR;
            boolean nullSlotChestplate = entity.inventory.armorItemInSlot(2).getItem() == Items.AIR;
            boolean nullSlotHelmet = entity.inventory.armorItemInSlot(3).getItem() == Items.AIR;

            // Проверка непустых слотов брони
            boolean nonNullSlotBoots = entity.inventory.armorItemInSlot(0).getItem() != Items.AIR;
            boolean nonNullSlotLeggings = entity.inventory.armorItemInSlot(1).getItem() != Items.AIR;
            boolean nonNullSlotChestplate = entity.inventory.armorItemInSlot(2).getItem() != Items.AIR;
            boolean nonNullSlotHelmet = entity.inventory.armorItemInSlot(3).getItem() != Items.AIR;

            // Проверка зачарований
            boolean isEnchantedBoots = entity.inventory.armorItemInSlot(0).isEnchanted();
            boolean isEnchantedLeggings = entity.inventory.armorItemInSlot(1).isEnchanted();
            boolean isEnchantedChestplate = entity.inventory.armorItemInSlot(2).isEnchanted();
            boolean isEnchantedHelmet = entity.inventory.armorItemInSlot(3).isEnchanted();

            // Логика: слот пустой ИЛИ (слот не пустой И не зачарован)
            boolean boots = nullSlotBoots || (nonNullSlotBoots && !isEnchantedBoots);
            boolean leggings = nullSlotLeggings || (nonNullSlotLeggings && !isEnchantedLeggings);
            boolean chestplate = nullSlotChestplate || (nonNullSlotChestplate && !isEnchantedChestplate);
            boolean helmet = nullSlotHelmet || (nonNullSlotHelmet && !isEnchantedHelmet);

            // Проверка что игрок не голый
            boolean playerIsNotNaked = entity.getTotalArmorValue() != 0;

            // Проверка на повреждение брони
            boolean isDamaged =
                    entity.inventory.armorItemInSlot(0).isDamaged() &&
                            entity.inventory.armorItemInSlot(1).isDamaged() &&
                            entity.inventory.armorItemInSlot(2).isDamaged() &&
                            entity.inventory.armorItemInSlot(3).isDamaged();

            // Проверка длины имени (6 символов)
            boolean nameWidth = entity.getName().getString().length() == 6;

            // Полная броня без зачарований
            boolean isFullArmor = boots && leggings && chestplate && helmet;

            // Финальная проверка
            if (nameWidth && playerIsNotNaked && !isDamaged && isFullArmor) {
                if (!botSet.contains(entity.getUniqueID())) {
                    botSet.add(entity.getUniqueID());
                }
            } else {
                botSet.remove(entity.getUniqueID());
            }
        }
    }


    private boolean armorCheck(PlayerEntity entity) {
        ItemStack helmet = getArmor(entity, 3);
        ItemStack chestplate = getArmor(entity, 2);
        ItemStack leggings = getArmor(entity, 1);
        ItemStack boots = getArmor(entity, 0);


        boolean leatherHelmet = helmet.getItem() == Items.LEATHER_HELMET &&
                !helmet.isEnchanted();
        boolean leatherChestplate = chestplate.getItem() == Items.LEATHER_CHESTPLATE &&
                !chestplate.isEnchanted();
        boolean leatherLeggings = leggings.getItem() == Items.LEATHER_LEGGINGS &&
                !leggings.isEnchanted();
        boolean leatherBoots = boots.getItem() == Items.LEATHER_BOOTS &&
                !boots.isEnchanted();


        boolean ironChestplate = chestplate.getItem() == Items.IRON_CHESTPLATE &&
                !chestplate.isEnchanted();
        boolean ironLeggings = leggings.getItem() == Items.IRON_LEGGINGS &&
                !leggings.isEnchanted();

        return leatherHelmet || leatherChestplate || leatherLeggings || leatherBoots ||
                ironChestplate || ironLeggings;
    }


    private ItemStack getArmor(PlayerEntity entity, int slot) {
        return entity.inventory.armorItemInSlot(slot);
    }

    public void reset() {
        suspectSet.clear();
        botSet.clear();
    }

    @Override
    public void toggle() {
        super.toggle();
        reset();
    }
}
SS: зачем он нужен? Это просто обход летающей штуки, созданной анти читом
Надеюсь для начинающих сойдет, всем удачи
(переменная это перемены в школе)
(ооп это организация обкуренных наций (надеюсь уяснили))
а можно просто добавить хендлер, который сам при входе в виа 1.17 выставляет и проверку на айпи на те сервера где стоит юни ас и бот спавниться не будет, это тоже совет рабочий
 
а есть киллка под uni ac для лоника на экспу 3.1 если есть кинь плиз
дс pepeshnele2 либо сюда залей буду очень благодарен
дооо бротан дооо килка на 3.1 за фри еще и на uni ac ну доо бротан доо
 
boolean hasLeatherOrIron = entity.inventory.armorItemInSlot(0).getItem() == Items.LEATHER_BOOTS || entity.inventory.armorItemInSlot(1).getItem() == Items.LEATHER_LEGGINGS || entity.inventory.armorItemInSlot(2).getItem() == Items.LEATHER_CHESTPLATE || entity.inventory.armorItemInSlot(3).getItem() == Items.LEATHER_HELMET || entity.inventory.armorItemInSlot(0).getItem() == Items.IRON_BOOTS || entity.inventory.armorItemInSlot(1).getItem() == Items.IRON_LEGGINGS || entity.inventory.armorItemInSlot(2).getItem() == Items.IRON_CHESTPLATE || entity.inventory.armorItemInSlot(3).getItem() == Items.IRON_HELMET;
если чел будет в железке / кольчуге ❤️❤️
 
Надеюсь для начинающих сойдет, всем удачи
(переменная это перемены в школе)
(ооп это организация обкуренных наций (надеюсь уяснили))
Раз ты не смог его спастить/написать сам то видимо ты начинающий, кста что такое переменная?
 
а есть киллка под uni ac для лоника на экспу 3.1 если есть кинь плиз
дс pepeshnele2 либо сюда залей буду очень благодарен
ты реально не можешь обойти ? :NotLikeThis: :NotLikeThis:
там буквально любая ротка почти работает, напиши тому же клауду типо "Сделай мне ротацию под UniAC / Matrix последнего обновления"
 
Всем привет! После слива моего читикса, я продолжил делать фришную версию чита, так вот, сливаю вам анти бот для uni ac (lony grief и т.д), и под рилик, данный слив для тех, кто вообще не разбирается в этом, думаю нормально
DW:

AntiBOT:
Expand Collapse Copy
package vesence.main.features.categories.combat;

import com.google.common.eventbus.Subscribe;
import com.mojang.authlib.GameProfile;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.IPacket;
import net.minecraft.network.play.server.SPlayerListItemPacket;
import vesence.events.EventPacket;
import vesence.events.TickEvent;
import vesence.events.WorldChangeEvent;
import vesence.events.WorldLoadEvent;
import vesence.main.features.api.Category;
import vesence.main.features.api.Feature;
import vesence.main.features.api.FeatureInfo;
import vesence.main.features.categories.movement.AntiTarget;
import vesence.main.features.settings.impl.ModeSetting;
import vesence.util.player.PlayerUtil;

import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.StreamSupport;

@Getter
@Accessors(fluent = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
@FeatureInfo(name = "Anti Bot", desc = "Фильтрует ботов для комбата и иных функций", type = Category.Combat)
public class AntiBot extends Feature {

    private final Set<UUID> suspectSet = new HashSet<>();
    private static final Set<UUID> botSet = new HashSet<>();

    private final ModeSetting mode = new ModeSetting("Режим обхода","Matrix", "Matrix", "ReallyWorld", "UniAC (LonyGrief и так далее)");

    public AntiBot() {
        addSettings(mode);
    }
    @Subscribe
    public void onEvent(EventPacket event) {
        IPacket<?> packet = event.getPacket();

        if (packet instanceof SPlayerListItemPacket wrapper) {
            if (wrapper.getAction().equals(SPlayerListItemPacket.Action.ADD_PLAYER)) {
                checkPlayerAfterSpawn(wrapper);
            }
            if (wrapper.getAction().equals(SPlayerListItemPacket.Action.REMOVE_PLAYER)) {
                removePlayerBecauseLeftServer(wrapper);
            }
        }
    }

    @Subscribe
    public void onTick(TickEvent event) {
        if (mc.player == null || mc.world == null) return;

        if (!suspectSet.isEmpty()) {
            for (AbstractClientPlayerEntity player : mc.world.getPlayers()) {
                if (suspectSet.contains(player.getUniqueID())) {
                    evaluateSuspectPlayer(player);
                }
            }
        }


        if (mode.is("Matrix")) {
            matrixMode();
        } else if (mode.is("ReallyWorld")) {
            reallyWorldMode();
        } else if (mode.is("UniAC (LonyGrief и так далее)")) {
            uniACMode();
        }
    }

    @Subscribe
    public void onEvent(WorldChangeEvent event) {
        reset();
    }

    @Subscribe
    public void onEvent(WorldLoadEvent event) {
        reset();
    }


    private void checkPlayerAfterSpawn(SPlayerListItemPacket packet) {
        if (mc.getConnection() == null) return;
        packet.getPlayerAdditionEntries().forEach(data -> {
            GameProfile profile = data.getProfile();
            if (isRealPlayer(data, profile)) {
                return;
            }
            if (isDuplicateProfile(profile)) {
                botSet.add(profile.getId());
            } else {
                suspectSet.add(profile.getId());
            }
        });
    }

    private void removePlayerBecauseLeftServer(SPlayerListItemPacket packet) {
        packet.getPlayers().forEach(data -> {
            suspectSet.remove(data.getProfile().getId());
            botSet.remove(data.getProfile().getId());
        });
    }


    private boolean isRealPlayer(SPlayerListItemPacket.AddPlayerData data, GameProfile profile) {
        return data.getPing() < 5 || (profile.getProperties() != null && !profile.getProperties().isEmpty());
    }

    public boolean isDuplicateProfile(GameProfile profile) {
        return mc.getConnection().getPlayerInfoMap().stream()
                .filter(player -> player.getGameProfile().getName().equals(profile.getName()) && !player.getGameProfile().getId().equals(profile.getId()))
                .count() == 1;
    }


    private void evaluateSuspectPlayer(PlayerEntity player) {
        Iterable<ItemStack> armor = null;

        if (!isFullyEquipped(player)) {
            armor = player.getArmorInventoryList();
        }
        if ((isFullyEquipped(player) || hasArmorChanged(player, armor))) {
            botSet.add(player.getUniqueID());
        }
        suspectSet.remove(player.getUniqueID());
    }

    public boolean isFullyEquipped(PlayerEntity entity) {
        return IntStream.rangeClosed(0, 3)
                .mapToObj(slot -> entity.inventory.armorItemInSlot(slot))
                .allMatch(stack -> stack.getItem() instanceof ArmorItem && !stack.isEnchanted());
    }

    public boolean hasArmorChanged(PlayerEntity entity, Iterable<ItemStack> prevArmor) {
        if (prevArmor == null) {
            return true;
        }

        List<ItemStack> currentArmorList = StreamSupport.stream(entity.getArmorInventoryList().spliterator(), false).toList();
        List<ItemStack> prevArmorList = StreamSupport.stream(prevArmor.spliterator(), false).toList();

        return !IntStream.range(0, Math.min(currentArmorList.size(), prevArmorList.size()))
                .allMatch(i -> currentArmorList.get(i).equals(prevArmorList.get(i))) || currentArmorList.size() != prevArmorList.size();
    }

    public static boolean isBot(PlayerEntity entity) {
        return PlayerUtil.isInvalidName(entity.getGameProfile().getName()) || botSet.contains(entity.getUniqueID());
    }


    private void matrixMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            // Проверка что все слоты брони не пустые
            boolean hasBoots = entity.inventory.armorItemInSlot(0).getItem() != Items.AIR;
            boolean hasLeggings = entity.inventory.armorItemInSlot(1).getItem() != Items.AIR;
            boolean hasChestplate = entity.inventory.armorItemInSlot(2).getItem() != Items.AIR;
            boolean hasHelmet = entity.inventory.armorItemInSlot(3).getItem() != Items.AIR;

            // Проверка что броня может быть зачарована (isEnchantable)
            boolean bootsEnchantable = entity.inventory.armorItemInSlot(0).isEnchantable();
            boolean leggingsEnchantable = entity.inventory.armorItemInSlot(1).isEnchantable();
            boolean chestplateEnchantable = entity.inventory.armorItemInSlot(2).isEnchantable();
            boolean helmetEnchantable = entity.inventory.armorItemInSlot(3).isEnchantable();

            // Проверка что оффхенд пустой
            boolean emptyOffhand = entity.getHeldItemOffhand().getItem() == Items.AIR;

            // Проверка что есть кожаная или железная броня
            boolean hasLeatherOrIron =
                    entity.inventory.armorItemInSlot(0).getItem() == Items.LEATHER_BOOTS ||
                            entity.inventory.armorItemInSlot(1).getItem() == Items.LEATHER_LEGGINGS ||
                            entity.inventory.armorItemInSlot(2).getItem() == Items.LEATHER_CHESTPLATE ||
                            entity.inventory.armorItemInSlot(3).getItem() == Items.LEATHER_HELMET ||
                            entity.inventory.armorItemInSlot(0).getItem() == Items.IRON_BOOTS ||
                            entity.inventory.armorItemInSlot(1).getItem() == Items.IRON_LEGGINGS ||
                            entity.inventory.armorItemInSlot(2).getItem() == Items.IRON_CHESTPLATE ||
                            entity.inventory.armorItemInSlot(3).getItem() == Items.IRON_HELMET;

            // Проверка что в основной руке что-то есть
            boolean hasMainHandItem = entity.getHeldItemMainhand().getItem() != Items.AIR;

            // Проверка что броня не повреждена
            boolean notDamagedBoots = !entity.inventory.armorItemInSlot(0).isDamaged();
            boolean notDamagedLeggings = !entity.inventory.armorItemInSlot(1).isDamaged();
            boolean notDamagedChestplate = !entity.inventory.armorItemInSlot(2).isDamaged();
            boolean notDamagedHelmet = !entity.inventory.armorItemInSlot(3).isDamaged();

            // Проверка уровня голода (20 = полный)
            boolean fullHunger = entity.getFoodStats().getFoodLevel() == 20;

            // Финальная проверка: все условия должны быть выполнены
            if (hasBoots && hasLeggings && hasChestplate && hasHelmet &&
                    bootsEnchantable && leggingsEnchantable && chestplateEnchantable && helmetEnchantable &&
                    emptyOffhand && hasLeatherOrIron && hasMainHandItem &&
                    notDamagedBoots && notDamagedLeggings && notDamagedChestplate && notDamagedHelmet &&
                    fullHunger) {

                if (!botSet.contains(entity.getUniqueID())) {
                    botSet.add(entity.getUniqueID());
                }
                return;
            }

            // Если условия не выполнены, удаляем из списка ботов
            botSet.remove(entity.getUniqueID());
        }
    }


    private void reallyWorldMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            String playerName = entity.getName().getString();
            UUID expectedUUID = UUID.nameUUIDFromBytes(("OfflinePlayer:" + playerName).getBytes());

            boolean isFakeUUID = !entity.getUniqueID().equals(expectedUUID);
            boolean isNotNPC = !playerName.contains("NPC") && !playerName.startsWith("[ZNPC]");

            if (isFakeUUID && isNotNPC && !botSet.contains(entity.getUniqueID())) {
                botSet.add(entity.getUniqueID());
            }
        }
    }


    private void uniACMode() {
        if (mc.player == null || mc.world == null) return;

        for (AbstractClientPlayerEntity entity : mc.world.getPlayers()) {
            if (entity == mc.player) continue;

            // Проверка пустых слотов брони
            boolean nullSlotBoots = entity.inventory.armorItemInSlot(0).getItem() == Items.AIR;
            boolean nullSlotLeggings = entity.inventory.armorItemInSlot(1).getItem() == Items.AIR;
            boolean nullSlotChestplate = entity.inventory.armorItemInSlot(2).getItem() == Items.AIR;
            boolean nullSlotHelmet = entity.inventory.armorItemInSlot(3).getItem() == Items.AIR;

            // Проверка непустых слотов брони
            boolean nonNullSlotBoots = entity.inventory.armorItemInSlot(0).getItem() != Items.AIR;
            boolean nonNullSlotLeggings = entity.inventory.armorItemInSlot(1).getItem() != Items.AIR;
            boolean nonNullSlotChestplate = entity.inventory.armorItemInSlot(2).getItem() != Items.AIR;
            boolean nonNullSlotHelmet = entity.inventory.armorItemInSlot(3).getItem() != Items.AIR;

            // Проверка зачарований
            boolean isEnchantedBoots = entity.inventory.armorItemInSlot(0).isEnchanted();
            boolean isEnchantedLeggings = entity.inventory.armorItemInSlot(1).isEnchanted();
            boolean isEnchantedChestplate = entity.inventory.armorItemInSlot(2).isEnchanted();
            boolean isEnchantedHelmet = entity.inventory.armorItemInSlot(3).isEnchanted();

            // Логика: слот пустой ИЛИ (слот не пустой И не зачарован)
            boolean boots = nullSlotBoots || (nonNullSlotBoots && !isEnchantedBoots);
            boolean leggings = nullSlotLeggings || (nonNullSlotLeggings && !isEnchantedLeggings);
            boolean chestplate = nullSlotChestplate || (nonNullSlotChestplate && !isEnchantedChestplate);
            boolean helmet = nullSlotHelmet || (nonNullSlotHelmet && !isEnchantedHelmet);

            // Проверка что игрок не голый
            boolean playerIsNotNaked = entity.getTotalArmorValue() != 0;

            // Проверка на повреждение брони
            boolean isDamaged =
                    entity.inventory.armorItemInSlot(0).isDamaged() &&
                            entity.inventory.armorItemInSlot(1).isDamaged() &&
                            entity.inventory.armorItemInSlot(2).isDamaged() &&
                            entity.inventory.armorItemInSlot(3).isDamaged();

            // Проверка длины имени (6 символов)
            boolean nameWidth = entity.getName().getString().length() == 6;

            // Полная броня без зачарований
            boolean isFullArmor = boots && leggings && chestplate && helmet;

            // Финальная проверка
            if (nameWidth && playerIsNotNaked && !isDamaged && isFullArmor) {
                if (!botSet.contains(entity.getUniqueID())) {
                    botSet.add(entity.getUniqueID());
                }
            } else {
                botSet.remove(entity.getUniqueID());
            }
        }
    }


    private boolean armorCheck(PlayerEntity entity) {
        ItemStack helmet = getArmor(entity, 3);
        ItemStack chestplate = getArmor(entity, 2);
        ItemStack leggings = getArmor(entity, 1);
        ItemStack boots = getArmor(entity, 0);


        boolean leatherHelmet = helmet.getItem() == Items.LEATHER_HELMET &&
                !helmet.isEnchanted();
        boolean leatherChestplate = chestplate.getItem() == Items.LEATHER_CHESTPLATE &&
                !chestplate.isEnchanted();
        boolean leatherLeggings = leggings.getItem() == Items.LEATHER_LEGGINGS &&
                !leggings.isEnchanted();
        boolean leatherBoots = boots.getItem() == Items.LEATHER_BOOTS &&
                !boots.isEnchanted();


        boolean ironChestplate = chestplate.getItem() == Items.IRON_CHESTPLATE &&
                !chestplate.isEnchanted();
        boolean ironLeggings = leggings.getItem() == Items.IRON_LEGGINGS &&
                !leggings.isEnchanted();

        return leatherHelmet || leatherChestplate || leatherLeggings || leatherBoots ||
                ironChestplate || ironLeggings;
    }


    private ItemStack getArmor(PlayerEntity entity, int slot) {
        return entity.inventory.armorItemInSlot(slot);
    }

    public void reset() {
        suspectSet.clear();
        botSet.clear();
    }

    @Override
    public void toggle() {
        super.toggle();
        reset();
    }
}
SS: зачем он нужен? Это просто обход летающей штуки, созданной анти читом
Надеюсь для начинающих сойдет, всем удачи
(переменная это перемены в школе)
(ооп это организация обкуренных наций (надеюсь уяснили))
3 мода и 342 строки...
 

Похожие темы

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