Начинающий
- Статус
- Оффлайн
- Регистрация
- 23 Сен 2024
- Сообщения
- 357
- Реакции
- 2
- Выберите загрузчик игры
- Прочие моды
Всем привет! После слива моего читикса, я продолжил делать фришную версию чита, так вот, сливаю вам анти бот для uni ac (lony grief и т.д), и под рилик, данный слив для тех, кто вообще не разбирается в этом, думаю нормально
DW:
SS: зачем он нужен? Это просто обход летающей штуки, созданной анти читом
Надеюсь для начинающих сойдет, всем удачи
(переменная это перемены в школе)
(ооп это организация обкуренных наций (надеюсь уяснили))
DW:
AntiBOT:
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();
}
}
Надеюсь для начинающих сойдет, всем удачи
(переменная это перемены в школе)
(ооп это организация обкуренных наций (надеюсь уяснили))
