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

Вопрос Помогите с AimBot

Начинающий
Начинающий
Статус
Онлайн
Регистрация
27 Апр 2026
Сообщения
7
Реакции
0
У меня есть такой аимбот, я сначала сам пытался, потом нейронка помогала, короче много страдал, вроде всё плавно. Но анти-чит Funtime банит, кто-то может помочь и сказать как обойти, или что я не так сделал?

AimBot:
Expand Collapse Copy
public class AimBot extends Module implements QuickImports {

    public static AimBot getInstance() {
        return Instance.get(AimBot.class);
    }

    private final BooleanSetting players = new BooleanSetting("Игроки", "").setValue(true);
    private final BooleanSetting naked = new BooleanSetting("Голые", "").setValue(true);
    private final BooleanSetting mobs = new BooleanSetting("Мобы", "").setValue(false);
    private final BooleanSetting friends = new BooleanSetting("Друзья", "").setValue(false);

    private final MultiSelectSetting targets = new MultiSelectSetting("Цели", "")
            .value("Игроки", "Голые", "Мобы", "Друзья").selected("Игроки", "Голые");

    private final SliderSettings dist = new SliderSettings("Дистанция", "")
            .range(1f, 6f).step(0.1f).setValue(4f);

    public static LivingEntity target;

    private float speedYaw = 0.08f;
    private float speedPitch = 0.08f;

    private float aimX, aimZ, aimY = 0.7f;
    private long nextUpdate;

    public AimBot() {
        super("AimBot", "AimBot", ModuleCategory.COMBAT);
        setup(players, naked, mobs, friends, targets, dist);
    }

    public void onEnable() {
        target = null;
        speedYaw = 0.08f;
        speedPitch = 0.08f;
        nextUpdate = 0;
    }

    public void onDisable() {
        target = null;
    }

    @EventHandler
    public void onTick(TickEvent e) {
        if (mc.player == null || mc.world == null) return;
        if (target == null || !valid(target)) find();
    }

    @EventHandler
    public void onDraw(DrawEvent e) {
        if (mc.player == null || mc.world == null) return;
        if (target == null || !valid(target)) find();
        if (target != null) aim();
    }

    private void aim() {
        updatePoint();

        Vec3d eye = mc.player.getEyePos();
        Vec3d pos = getPos();
        Vec3d d = pos.subtract(eye);

        double h = Math.sqrt(d.x * d.x + d.z * d.z);
        if (h < 0.001) return;

        float yaw = (float) Math.toDegrees(Math.atan2(-d.x, d.z));
        float pitch = (float) -Math.toDegrees(Math.atan2(d.y, h));

        float cy = mc.player.getYaw();
        float cp = mc.player.getPitch();

        float dy = MathHelper.wrapDegrees(yaw - cy);
        float dp = pitch - cp;

        float f1 = Math.abs(dy) / 20f;
        float f2 = Math.abs(dp) / 20f;

        if (f1 < 0.2f) f1 = 0.2f;
        if (f2 < 0.2f) f2 = 0.2f;
        if (f1 > 1f) f1 = 1f;
        if (f2 > 1f) f2 = 1f;

        float distTo = mc.player.distanceTo(target);

        if (distTo < 2f) {
            speedYaw = 0.04f;
            speedPitch = 0.04f;
        } else {
            speedYaw = 0.08f;
            speedPitch = 0.08f;
        }

        float ny = cy + dy * speedYaw * f1;
        float np = cp + dp * speedPitch * f2;

        float gcd = Math.max(mc.options.getMouseSensitivity().getValue().floatValue(), 0.01f) * 0.15f;

        ny -= (ny - cy) % gcd;
        np -= (np - cp) % gcd;

        mc.player.setYaw(ny);
        mc.player.setPitch(MathHelper.clamp(np, -90f, 90f));
    }

    private Vec3d getPos() {
        double side = Math.max(0.02, target.getWidth() * 0.2);
        double x = MathHelper.clamp(aimX, (float) -side, (float) side);
        double z = MathHelper.clamp(aimZ, (float) -side, (float) side);
        double y = target.getHeight() * aimY;
        return target.getPos().add(x, y, z);
    }

    private void updatePoint() {
        long t = System.currentTimeMillis();
        if (t < nextUpdate) return;

        ThreadLocalRandom r = ThreadLocalRandom.current();

        aimY = 0.6f + r.nextFloat() * 0.3f;

        float s = Math.max(target.getWidth() * 0.2f, 0.03f);
        aimX = (r.nextFloat() - 0.5f) * 2f * s;
        aimZ = (r.nextFloat() - 0.5f) * 2f * s;

        nextUpdate = t + 150 + r.nextInt(150);
    }

    private void find() {
        LivingEntity best = null;
        double score = 9999;

        Vec3d eye = mc.player.getEyePos();
        Vec3d look = mc.player.getRotationVector().normalize();

        for (Entity e : mc.world.getEntities()) {
            if (!(e instanceof LivingEntity l)) continue;
            if (!valid(l)) continue;

            Vec3d dir = l.getPos().add(0, l.getHeight() * 0.5, 0).subtract(eye).normalize();

            double angle = Math.acos(MathHelper.clamp(look.dotProduct(dir), -1, 1));
            double dist = mc.player.distanceTo(l);

            double s = angle * 8 + dist * 2;

            if (s < score) {
                score = s;
                best = l;
            }
        }

        target = best;
    }

    private boolean valid(LivingEntity e) {
        if (e instanceof ClientPlayerEntity) return false;
        if (mc.player.distanceTo(e) > dist.getValue()) return false;
        if (!mc.player.canSee(e)) return false;

        if (e instanceof PlayerEntity p) {
            if (code.revenant.common.repository.friend.FriendUtils.isFriend(p) && !friends.isValue()) return false;
            if (!targets.isSelected("Игроки")) return false;
            if (p.getArmorVisibility() <= 0 && !targets.isSelected("Голые")) return false;
            if (p.isCreative()) return false;
        }

        if ((e instanceof Monster || e instanceof SlimeEntity || e instanceof AnimalEntity || e instanceof VillagerEntity)
                && !targets.isSelected("Мобы")) return false;

        return !e.isInvulnerable() && e.isAlive() && !(e instanceof ArmorStandEntity);
    }
}
 
во первых очень сильно бросается в глаза неправильный рассчет gcd
во вторых ускорение одно и тоже даже без рандома
в третьих при обновлении точки оно будет вести себя менее легитно

лучше бы aimassist сделал

не знаю зачем я это всё расписал, если он сам не станет это делать, а будет продолжать насиловать LLM ради undetect наводки
 
во первых очень сильно бросается в глаза неправильный рассчет gcd
во вторых ускорение одно и тоже даже без рандома
в третьих при обновлении точки оно будет вести себя менее легитно

лучше бы aimassist сделал

не знаю зачем я это всё расписал, если он сам не станет это делать, а будет продолжать насиловать LLM ради undetect наводки
Спасибо за ответ, но ии я использовать буду в любом случае для экономии времени, как минимум попросить сделать начальную структуру для аима, чтобы не писать всё с нуля вручную. Я иногда прошу ии сделать что-то вместо меня, но если не получается у него то пытаюсь делать сам. Как минимум потомучто я не такой профи в кодинге, я только недавно начал заниматся этим.
 
Назад
Сверху Снизу