Начинающий
- Статус
- Оффлайн
- Регистрация
- 17 Апр 2025
- Сообщения
- 48
- Реакции
- 0
- Выберите загрузчик игры
- Прочие моды
Заметил что нету никто не сливал антибот
если че щиткод на самом деле, не всегда работает, но более лучше
Короче суть работы, киллаура не таргетит если у бота 0 хп, (я уже потом заметил что у бота не всегда 0)
антибот.джава детектит если рядом что то с не нормальной скоростью летает, и если есть коррекция движения, и движется ни как игрок
так же если нету в табе, если странный или нестабильный пинг у бота
чутка гпт и воркает лучше чем дефолтный из экспы
если че щиткод на самом деле, не всегда работает, но более лучше
Короче суть работы, киллаура не таргетит если у бота 0 хп, (я уже потом заметил что у бота не всегда 0)
антибот.джава детектит если рядом что то с не нормальной скоростью летает, и если есть коррекция движения, и движется ни как игрок
так же если нету в табе, если странный или нестабильный пинг у бота
чутка гпт и воркает лучше чем дефолтный из экспы
killaura.java:
this.addSettings(new Setting[]{..., antiBot, ...});
if (antiBot.get() && (entity.getHealth() <= 0 || AntiBot.isBot(entity))) return false;
AntiBot.java:
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";
}
}