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

Часть функционала AntiBot RW EXP 3.1

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
17 Апр 2025
Сообщения
50
Реакции
0
Выберите загрузчик игры
  1. Прочие моды
Заметил что нету никто не сливал антибот

если че щиткод на самом деле, не всегда работает, но более лучше

Короче суть работы, киллаура не таргетит если у бота 0 хп, (я уже потом заметил что у бота не всегда 0)
антибот.джава детектит если рядом что то с не нормальной скоростью летает, и если есть коррекция движения, и движется ни как игрок
так же если нету в табе, если странный или нестабильный пинг у бота
чутка гпт и воркает лучше чем дефолтный из экспы

killaura.java:
Expand Collapse Copy
this.addSettings(new Setting[]{..., antiBot, ...});

if (antiBot.get() && (entity.getHealth() <= 0 || AntiBot.isBot(entity))) return false;



AntiBot.java:
Expand Collapse Copy
public class AntiBot extends Function {

    private final Set<UUID> susPlayers = new ConcurrentSet<>();
    private static final Map<UUID, Boolean> botsMap = new HashMap<>();
    private final Map<UUID, Vector3d> lastPositions = new HashMap<>();
    private final Map<UUID, Long> lastMoveTimes = new HashMap<>();

    @Subscribe
    private void onUpdate(EventUpdate e) {
        Minecraft mc = Minecraft.getInstance();
        for (UUID susPlayer : susPlayers) {
            PlayerEntity entity = mc.world.getPlayerByUuid(susPlayer);
            if (entity != null) {
                boolean isBot = checkBot(entity);
                botsMap.put(susPlayer, isBot);
                susPlayers.remove(susPlayer);


                Vector3d currentPos = new Vector3d(entity.getPosX(), entity.getPosY(), entity.getPosZ());
                Long lastTime = lastMoveTimes.get(susPlayer);
                Vector3d lastPos = lastPositions.get(susPlayer);
                if (lastTime != null && lastPos != null) {
                    long timeDiff = System.currentTimeMillis() - lastTime;
                    if (timeDiff > 0) {
                        double distance = currentPos.distanceTo(lastPos);
                        double speed = distance / (timeDiff / 1000.0);
                        if (speed > 20.0) { //
                            botsMap.put(susPlayer, true);
                        }
                    }
                }
                lastPositions.put(susPlayer, currentPos);
                lastMoveTimes.put(susPlayer, System.currentTimeMillis());
            }
        }


        if (mc.player.ticksExisted % 100 == 0) {
            botsMap.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
            lastPositions.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
            lastMoveTimes.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
        }
    }

    private boolean checkBot(PlayerEntity entity) {

        if (entity.getHealth() <= 0) {
            return true;
        }


        int armorCount = 0;
        for (ItemStack armor : entity.getArmorInventoryList()) {
            if (!armor.isEmpty()) {
                armorCount++;
            }
        }
        boolean isFullArmor = armorCount == 4;


        int profileCount = 0;
        for (NetworkPlayerInfo networkPlayerInfo : mc.player.connection.getPlayerInfoMap()) {
            GameProfile profile = networkPlayerInfo.getGameProfile();
            if (entity.getGameProfile().getName().equals(profile.getName())) {
                profileCount++;
            }
        }


        boolean invalidUUID = !entity.getUniqueID().equals(PlayerEntity.getOfflineUUID(entity.getGameProfile().getName()));
        boolean shortExistence = entity.ticksExisted < 20;
        boolean suspiciousPing = false;
        for (NetworkPlayerInfo info : mc.player.connection.getPlayerInfoMap()) {
            if (info.getGameProfile().getId().equals(entity.getUniqueID()) && info.getResponseTime() > 1000) {
                suspiciousPing = true;
            }
        }

        return isFullArmor || invalidUUID || shortExistence || suspiciousPing;
    }

    @Subscribe
    private void onPacket(EventPacket e) {
        if (e.getPacket() instanceof SPlayerListItemPacket p) {
            if (p.getAction() == SPlayerListItemPacket.Action.ADD_PLAYER) {
                for (SPlayerListItemPacket.AddPlayerData entry : p.getEntries()) {
                    GameProfile profile = entry.getProfile();
                    UUID uuid = profile.getId();
                    if (botsMap.containsKey(uuid) || susPlayers.contains(uuid)) {
                        continue;
                    }
                    boolean isInvalid = profile.getProperties().isEmpty() || entry.getPing() > 1000 || entry.getPing() < 0;
                    if (isInvalid) {
                        susPlayers.add(uuid);
                    }
                }
            } else if (p.getAction() == SPlayerListItemPacket.Action.REMOVE_PLAYER) {
                for (SPlayerListItemPacket.AddPlayerData entry : p.getEntries()) {
                    UUID uuid = entry.getProfile().getId();
                    botsMap.remove(uuid);
                    susPlayers.remove(uuid);
                    lastPositions.remove(uuid);
                    lastMoveTimes.remove(uuid);
                }
            }
        }
    }

    public static boolean isBot(Entity entity) {
        if (!(entity instanceof PlayerEntity)) {
            return false;
        }
        return botsMap.getOrDefault(entity.getUniqueID(), false);
    }

    public static boolean isBotU(Entity entity) {
        if (!(entity instanceof PlayerEntity)) {
            return false;
        }
        if (!entity.getUniqueID().equals(PlayerEntity.getOfflineUUID(entity.getName().getString()))) {
            return entity.isInvisible();
        }
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        botsMap.clear();
        susPlayers.clear();
        lastPositions.clear();
        lastMoveTimes.clear();
    }

    @Override
    public String getDescription() {
        return "Обнаруживает и игнорирует античит-ботов в PvP";
    }
}
 
нахуя столько кода?
if (!entity.getUniqueID().equals(PlayerEntity.getOfflineUUID(p.getGameProfile().getName()))) {
return false;
}

вот весь обход
 
да нахуй так морочется можно ещё проще
if (!entity.pisaetID().botiditenahuizaebali.mne.cheat.nado.prodavat)
Согласен нахуй так морочится можно еще проще. Играйте без килки и анти бота и вам никакой код не понадобится
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а куда писать код killaura?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Заметил что нету никто не сливал антибот

если че щиткод на самом деле, не всегда работает, но более лучше

Короче суть работы, киллаура не таргетит если у бота 0 хп, (я уже потом заметил что у бота не всегда 0)
антибот.джава детектит если рядом что то с не нормальной скоростью летает, и если есть коррекция движения, и движется ни как игрок
так же если нету в табе, если странный или нестабильный пинг у бота
чутка гпт и воркает лучше чем дефолтный из экспы

killaura.java:
Expand Collapse Copy
this.addSettings(new Setting[]{..., antiBot, ...});

if (antiBot.get() && (entity.getHealth() <= 0 || AntiBot.isBot(entity))) return false;



AntiBot.java:
Expand Collapse Copy
public class AntiBot extends Function {

    private final Set<UUID> susPlayers = new ConcurrentSet<>();
    private static final Map<UUID, Boolean> botsMap = new HashMap<>();
    private final Map<UUID, Vector3d> lastPositions = new HashMap<>();
    private final Map<UUID, Long> lastMoveTimes = new HashMap<>();

    @Subscribe
    private void onUpdate(EventUpdate e) {
        Minecraft mc = Minecraft.getInstance();
        for (UUID susPlayer : susPlayers) {
            PlayerEntity entity = mc.world.getPlayerByUuid(susPlayer);
            if (entity != null) {
                boolean isBot = checkBot(entity);
                botsMap.put(susPlayer, isBot);
                susPlayers.remove(susPlayer);


                Vector3d currentPos = new Vector3d(entity.getPosX(), entity.getPosY(), entity.getPosZ());
                Long lastTime = lastMoveTimes.get(susPlayer);
                Vector3d lastPos = lastPositions.get(susPlayer);
                if (lastTime != null && lastPos != null) {
                    long timeDiff = System.currentTimeMillis() - lastTime;
                    if (timeDiff > 0) {
                        double distance = currentPos.distanceTo(lastPos);
                        double speed = distance / (timeDiff / 1000.0);
                        if (speed > 20.0) { //
                            botsMap.put(susPlayer, true);
                        }
                    }
                }
                lastPositions.put(susPlayer, currentPos);
                lastMoveTimes.put(susPlayer, System.currentTimeMillis());
            }
        }


        if (mc.player.ticksExisted % 100 == 0) {
            botsMap.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
            lastPositions.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
            lastMoveTimes.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
        }
    }

    private boolean checkBot(PlayerEntity entity) {

        if (entity.getHealth() <= 0) {
            return true;
        }


        int armorCount = 0;
        for (ItemStack armor : entity.getArmorInventoryList()) {
            if (!armor.isEmpty()) {
                armorCount++;
            }
        }
        boolean isFullArmor = armorCount == 4;


        int profileCount = 0;
        for (NetworkPlayerInfo networkPlayerInfo : mc.player.connection.getPlayerInfoMap()) {
            GameProfile profile = networkPlayerInfo.getGameProfile();
            if (entity.getGameProfile().getName().equals(profile.getName())) {
                profileCount++;
            }
        }


        boolean invalidUUID = !entity.getUniqueID().equals(PlayerEntity.getOfflineUUID(entity.getGameProfile().getName()));
        boolean shortExistence = entity.ticksExisted < 20;
        boolean suspiciousPing = false;
        for (NetworkPlayerInfo info : mc.player.connection.getPlayerInfoMap()) {
            if (info.getGameProfile().getId().equals(entity.getUniqueID()) && info.getResponseTime() > 1000) {
                suspiciousPing = true;
            }
        }

        return isFullArmor || invalidUUID || shortExistence || suspiciousPing;
    }

    @Subscribe
    private void onPacket(EventPacket e) {
        if (e.getPacket() instanceof SPlayerListItemPacket p) {
            if (p.getAction() == SPlayerListItemPacket.Action.ADD_PLAYER) {
                for (SPlayerListItemPacket.AddPlayerData entry : p.getEntries()) {
                    GameProfile profile = entry.getProfile();
                    UUID uuid = profile.getId();
                    if (botsMap.containsKey(uuid) || susPlayers.contains(uuid)) {
                        continue;
                    }
                    boolean isInvalid = profile.getProperties().isEmpty() || entry.getPing() > 1000 || entry.getPing() < 0;
                    if (isInvalid) {
                        susPlayers.add(uuid);
                    }
                }
            } else if (p.getAction() == SPlayerListItemPacket.Action.REMOVE_PLAYER) {
                for (SPlayerListItemPacket.AddPlayerData entry : p.getEntries()) {
                    UUID uuid = entry.getProfile().getId();
                    botsMap.remove(uuid);
                    susPlayers.remove(uuid);
                    lastPositions.remove(uuid);
                    lastMoveTimes.remove(uuid);
                }
            }
        }
    }

    public static boolean isBot(Entity entity) {
        if (!(entity instanceof PlayerEntity)) {
            return false;
        }
        return botsMap.getOrDefault(entity.getUniqueID(), false);
    }

    public static boolean isBotU(Entity entity) {
        if (!(entity instanceof PlayerEntity)) {
            return false;
        }
        if (!entity.getUniqueID().equals(PlayerEntity.getOfflineUUID(entity.getName().getString()))) {
            return entity.isInvisible();
        }
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        botsMap.clear();
        susPlayers.clear();
        lastPositions.clear();
        lastMoveTimes.clear();
    }

    @Override
    public String getDescription() {
        return "Обнаруживает и игнорирует античит-ботов в PvP";
    }
}
я новичок в этой теме я когда это всё вставляю в анти бот то чота нихуя не робит точнее просто дофига ошибок
 
Заметил что нету никто не сливал антибот

если че щиткод на самом деле, не всегда работает, но более лучше

Короче суть работы, киллаура не таргетит если у бота 0 хп, (я уже потом заметил что у бота не всегда 0)
антибот.джава детектит если рядом что то с не нормальной скоростью летает, и если есть коррекция движения, и движется ни как игрок
так же если нету в табе, если странный или нестабильный пинг у бота
чутка гпт и воркает лучше чем дефолтный из экспы

killaura.java:
Expand Collapse Copy
this.addSettings(new Setting[]{..., antiBot, ...});

if (antiBot.get() && (entity.getHealth() <= 0 || AntiBot.isBot(entity))) return false;



AntiBot.java:
Expand Collapse Copy
public class AntiBot extends Function {

    private final Set<UUID> susPlayers = new ConcurrentSet<>();
    private static final Map<UUID, Boolean> botsMap = new HashMap<>();
    private final Map<UUID, Vector3d> lastPositions = new HashMap<>();
    private final Map<UUID, Long> lastMoveTimes = new HashMap<>();

    @Subscribe
    private void onUpdate(EventUpdate e) {
        Minecraft mc = Minecraft.getInstance();
        for (UUID susPlayer : susPlayers) {
            PlayerEntity entity = mc.world.getPlayerByUuid(susPlayer);
            if (entity != null) {
                boolean isBot = checkBot(entity);
                botsMap.put(susPlayer, isBot);
                susPlayers.remove(susPlayer);


                Vector3d currentPos = new Vector3d(entity.getPosX(), entity.getPosY(), entity.getPosZ());
                Long lastTime = lastMoveTimes.get(susPlayer);
                Vector3d lastPos = lastPositions.get(susPlayer);
                if (lastTime != null && lastPos != null) {
                    long timeDiff = System.currentTimeMillis() - lastTime;
                    if (timeDiff > 0) {
                        double distance = currentPos.distanceTo(lastPos);
                        double speed = distance / (timeDiff / 1000.0);
                        if (speed > 20.0) { //
                            botsMap.put(susPlayer, true);
                        }
                    }
                }
                lastPositions.put(susPlayer, currentPos);
                lastMoveTimes.put(susPlayer, System.currentTimeMillis());
            }
        }


        if (mc.player.ticksExisted % 100 == 0) {
            botsMap.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
            lastPositions.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
            lastMoveTimes.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
        }
    }

    private boolean checkBot(PlayerEntity entity) {

        if (entity.getHealth() <= 0) {
            return true;
        }


        int armorCount = 0;
        for (ItemStack armor : entity.getArmorInventoryList()) {
            if (!armor.isEmpty()) {
                armorCount++;
            }
        }
        boolean isFullArmor = armorCount == 4;


        int profileCount = 0;
        for (NetworkPlayerInfo networkPlayerInfo : mc.player.connection.getPlayerInfoMap()) {
            GameProfile profile = networkPlayerInfo.getGameProfile();
            if (entity.getGameProfile().getName().equals(profile.getName())) {
                profileCount++;
            }
        }


        boolean invalidUUID = !entity.getUniqueID().equals(PlayerEntity.getOfflineUUID(entity.getGameProfile().getName()));
        boolean shortExistence = entity.ticksExisted < 20;
        boolean suspiciousPing = false;
        for (NetworkPlayerInfo info : mc.player.connection.getPlayerInfoMap()) {
            if (info.getGameProfile().getId().equals(entity.getUniqueID()) && info.getResponseTime() > 1000) {
                suspiciousPing = true;
            }
        }

        return isFullArmor || invalidUUID || shortExistence || suspiciousPing;
    }

    @Subscribe
    private void onPacket(EventPacket e) {
        if (e.getPacket() instanceof SPlayerListItemPacket p) {
            if (p.getAction() == SPlayerListItemPacket.Action.ADD_PLAYER) {
                for (SPlayerListItemPacket.AddPlayerData entry : p.getEntries()) {
                    GameProfile profile = entry.getProfile();
                    UUID uuid = profile.getId();
                    if (botsMap.containsKey(uuid) || susPlayers.contains(uuid)) {
                        continue;
                    }
                    boolean isInvalid = profile.getProperties().isEmpty() || entry.getPing() > 1000 || entry.getPing() < 0;
                    if (isInvalid) {
                        susPlayers.add(uuid);
                    }
                }
            } else if (p.getAction() == SPlayerListItemPacket.Action.REMOVE_PLAYER) {
                for (SPlayerListItemPacket.AddPlayerData entry : p.getEntries()) {
                    UUID uuid = entry.getProfile().getId();
                    botsMap.remove(uuid);
                    susPlayers.remove(uuid);
                    lastPositions.remove(uuid);
                    lastMoveTimes.remove(uuid);
                }
            }
        }
    }

    public static boolean isBot(Entity entity) {
        if (!(entity instanceof PlayerEntity)) {
            return false;
        }
        return botsMap.getOrDefault(entity.getUniqueID(), false);
    }

    public static boolean isBotU(Entity entity) {
        if (!(entity instanceof PlayerEntity)) {
            return false;
        }
        if (!entity.getUniqueID().equals(PlayerEntity.getOfflineUUID(entity.getName().getString()))) {
            return entity.isInvisible();
        }
        return false;
    }

    @Override
    public void onDisable() {
        super.onDisable();
        botsMap.clear();
        susPlayers.clear();
        lastPositions.clear();
        lastMoveTimes.clear();
    }

    @Override
    public String getDescription() {
        return "Обнаруживает и игнорирует античит-ботов в PvP";
    }
}
Зачем? Половина паст отвалилась из за бота, а ты их возродил
 
Зачем? Половина паст отвалилась из за бота, а ты их возродил
это дефолт анти бот который обходиться 1 строкой который обход был в 1000 году и он есть у всех паст
 
Ого, я решил основаться на твоём коде, и дип сик выдал это:
package im.expensive.functions.impl.combat;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventPacket;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.network.NetworkPlayerInfo;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.server.SPlayerListItemPacket;
import net.minecraft.potion.Effects;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

@FunctionRegister(name = "AntiBot", type = Category.Combat)
public class AntiBot extends Function {

// Настройки
public BooleanSetting checkHealth = new BooleanSetting("Проверять здоровье", true);
public BooleanSetting checkFlight = new BooleanSetting("Проверять полет", true);
public BooleanSetting checkTab = new BooleanSetting("Проверять таб", true);
public BooleanSetting checkPing = new BooleanSetting("Проверять пинг", true);
public BooleanSetting checkArmor = new BooleanSetting("Проверять броню", false);

public ModeSetting mode = new ModeSetting("Режим", "Строгий", "Строгий", "Средний", "Ленивый");

// Хранилища данных
private final Map<UUID, Boolean> botsMap = new ConcurrentHashMap<>();
private final Set<UUID> susPlayers = Collections.newSetFromMap(new ConcurrentHashMap<>());
private final Map<UUID, Vector3d> lastPositions = new ConcurrentHashMap<>();
private final Map<UUID, Long> lastMoveTimes = new ConcurrentHashMap<>();
private final Map<UUID, Long> flightStartTimes = new ConcurrentHashMap<>();
private final Map<UUID, Boolean> wasOnGround = new ConcurrentHashMap<>();
private final Set<UUID> tabPlayers = Collections.newSetFromMap(new ConcurrentHashMap<>());

public AntiBot() {
addSettings(checkHealth, checkFlight, checkTab, checkPing, checkArmor, mode);
}

@Subscribe
public void onUpdate(EventUpdate e) {
if (mc.world == null || mc.player == null) return;

// Обновляем список игроков в табе
updateTabList();

// Проверяем подозрительных игроков
for (UUID uuid : new ArrayList<>(susPlayers)) {
PlayerEntity player = mc.world.getPlayerByUuid(uuid);
if (player == null) {
susPlayers.remove(uuid);
continue;
}

boolean isBot = checkBot(player);
if (isBot) {
botsMap.put(uuid, true);
susPlayers.remove(uuid);
}
}

// Проверяем всех игроков на летание
if (checkFlight.get()) {
for (PlayerEntity player : mc.world.getPlayers()) {
if (player == mc.player) continue;

UUID uuid = player.getUniqueID();
boolean currentlyFlying = !player.isOnGround() && !player.isInWater() && !player.isElytraFlying();

if (currentlyFlying) {
if (!wasOnGround.getOrDefault(uuid, false)) {
// Начал летать
flightStartTimes.put(uuid, System.currentTimeMillis());
wasOnGround.put(uuid, false);
} else {
// Продолжает летать
Long startTime = flightStartTimes.get(uuid);
if (startTime != null && System.currentTimeMillis() - startTime > 3000) {
// Летает больше 3 секунд - бот
botsMap.put(uuid, true);
}
}
} else {
// На земле
wasOnGround.put(uuid, true);
flightStartTimes.remove(uuid);
}
}
}

// Проверяем скорость движения
for (PlayerEntity player : mc.world.getPlayers()) {
if (player == mc.player) continue;

UUID uuid = player.getUniqueID();
Vector3d currentPos = player.getPositionVec();
Long lastTime = lastMoveTimes.get(uuid);
Vector3d lastPos = lastPositions.get(uuid);

if (lastTime != null && lastPos != null) {
long timeDiff = System.currentTimeMillis() - lastTime;
if (timeDiff > 0) {
double distance = currentPos.distanceTo(lastPos);
double speed = distance / (timeDiff / 1000.0);

// Нереальная скорость (больше 20 блоков/сек)
if (speed > 20.0 && !player.isPotionActive(Effects.SPEED)) {
botsMap.put(uuid, true);
}
}
}

lastPositions.put(uuid, currentPos);
lastMoveTimes.put(uuid, System.currentTimeMillis());
}

// Очистка старых записей
if (mc.player.ticksExisted % 100 == 0) {
cleanUp();
}
}

private void updateTabList() {
if (mc.getConnection() == null) return;

tabPlayers.clear();
for (NetworkPlayerInfo info : mc.getConnection().getPlayerInfoMap()) {
tabPlayers.add(info.getGameProfile().getId());
}
}

private boolean checkBot(PlayerEntity player) {
int botFlags = 0;
int requiredFlags = getRequiredFlags();

// 1. Проверка здоровья (0 сердечек = бот)
if (checkHealth.get() && player.getHealth() <= 0) {
botFlags++;
}

// 2. Проверка нахождения в табе
if (checkTab.get() && !tabPlayers.contains(player.getUniqueID())) {
botFlags++;
}

// 3. Проверка пинга
if (checkPing.get()) {
NetworkPlayerInfo info = mc.getConnection().getPlayerInfo(player.getUniqueID());
if (info != null) {
int ping = info.getResponseTime();
// Подозрительный пинг: меньше 0 или больше 1000
if (ping < 0 || ping > 1000) {
botFlags++;
}
} else {
// Нет информации о пинге
botFlags++;
}
}

// 4. Проверка брони
if (checkArmor.get()) {
int armorCount = 0;
for (ItemStack armor : player.getArmorInventoryList()) {
if (!armor.isEmpty()) armorCount++;
}
// Полная броня сразу после спавна - подозрительно
if (armorCount == 4 && player.ticksExisted < 100) {
botFlags++;
}
}

// 5. Проверка UUID
if (!player.getUniqueID().equals(PlayerEntity.getOfflineUUID(player.getName().getString()))) {
botFlags++;
}

// 6. Слишком короткое время существования
if (player.ticksExisted < 20) {
botFlags++;
}

return botFlags >= requiredFlags;
}

private int getRequiredFlags() {
switch (mode.get()) {
case "Строгий": return 1; // Любой признак = бот
case "Средний": return 2; // 2 признака = бот
case "Ленивый": return 3; // 3 признака = бот
default: return 2;
}
}

private void cleanUp() {
// Удаляем игроков, которых нет в мире
botsMap.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
susPlayers.removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
lastPositions.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
lastMoveTimes.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
flightStartTimes.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
wasOnGround.keySet().removeIf(uuid -> mc.world.getPlayerByUuid(uuid) == null);
}

@Subscribe
public void onPacket(EventPacket e) {
if (e.getPacket() instanceof SPlayerListItemPacket) {
SPlayerListItemPacket packet = (SPlayerListItemPacket) e.getPacket();

if (packet.getAction() == SPlayerListItemPacket.Action.ADD_PLAYER) {
for (SPlayerListItemPacket.AddPlayerData entry : packet.getEntries()) {
UUID uuid = entry.getProfile().getId();

// Проверяем на подозрительные признаки при добавлении
boolean suspicious = entry.getPing() > 1000 ||
entry.getPing() < 0 ||
entry.getProfile().getProperties().isEmpty();

if (suspicious && !botsMap.containsKey(uuid)) {
susPlayers.add(uuid);
}
}
}
else if (packet.getAction() == SPlayerListItemPacket.Action.REMOVE_PLAYER) {
for (SPlayerListItemPacket.AddPlayerData entry : packet.getEntries()) {
UUID uuid = entry.getProfile().getId();
// Удаляем данные при выходе игрока
botsMap.remove(uuid);
susPlayers.remove(uuid);
lastPositions.remove(uuid);
lastMoveTimes.remove(uuid);
flightStartTimes.remove(uuid);
wasOnGround.remove(uuid);
}
}
}
}

// Метод для использования в KillAura
public static boolean isBot(Entity entity) {
if (!(entity instanceof PlayerEntity)) return false;

AntiBot antiBot = getInstance();
if (antiBot == null || !antiBot.isState()) return false;

return antiBot.botsMap.getOrDefault(entity.getUniqueID(), false);
}

// Вспомогательный метод для получения экземпляра
private static AntiBot getInstance() {
// Нужно получить экземпляр через ваш менеджер функций
// Пример:
// return Expensive.getInstance().getFunctionRegistry().get(AntiBot.class);
return null; // Замените на получение экземпляра
}

@Override
public void onDisable() {
super.onDisable();
botsMap.clear();
susPlayers.clear();
lastPositions.clear();
lastMoveTimes.clear();
flightStartTimes.clear();
wasOnGround.clear();
tabPlayers.clear();
}

@Override
public void onEnable() {
super.onEnable();
// Инициализация при включении
if (mc.world != null && mc.player != null) {
updateTabList();
}
}
}
 
Назад
Сверху Снизу