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

Часть функционала TriggerBot Zenith Recode

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
1 Июл 2024
Сообщения
56
Реакции
0
Выберите загрузчик игры
  1. Fabric
Всем привет! Написал на скорую руку триггербот на зенит рекод, думаю пойдёт под пиво, но работает

TriggerBot.java:
Expand Collapse Copy
package zenith.zov.client.modules.impl.combat;

import com.darkmagician6.eventapi.EventTarget;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.Vec3d;

import zenith.zov.base.events.impl.player.EventRotate;
import zenith.zov.base.player.AttackUtil;
import zenith.zov.client.modules.api.Category;
import zenith.zov.client.modules.api.Module;
import zenith.zov.client.modules.api.ModuleAnnotation;
import zenith.zov.client.modules.api.setting.impl.BooleanSetting;
import zenith.zov.client.modules.api.setting.impl.MultiBooleanSetting;

import zenith.zov.utility.game.player.TargetSelector;
import zenith.zov.utility.game.player.rotation.Rotation;

import java.util.List;

@ModuleAnnotation(
        name = "TriggerBot",
        category = Category.COMBAT,
        description = "Автоатака при наведении на цель"
)
public final class TriggerBot extends Module {

    public static final TriggerBot INSTANCE = new TriggerBot();
    private TriggerBot() {}

    private final BooleanSetting onlyCrits =
            new BooleanSetting("Только криты", false);

    private final BooleanSetting smartCrits =
            new BooleanSetting("Умные криты", "Бьёт критом только при зажатом прыжке", true, onlyCrits::isEnabled);

    private final BooleanSetting eatAttack =
            new BooleanSetting("Бить и есть", true);

    private final MultiBooleanSetting targets =
            MultiBooleanSetting.create(
                    "Цели",
                    List.of("Игроков", "Враждебных", "Мирных")
            );

    private final TargetSelector targetSelector = new TargetSelector();

    @EventTarget
    public void onRotate(EventRotate e) {
        if (mc.player == null || mc.world == null) return;
        
        if (mc.player.isUsingItem() && !eatAttack.isEnabled()) return;
        
        if (mc.player.getAttackCooldownProgress(1.0f) < 0.92f) return;
        
        boolean isCrit = AttackUtil.isPlayerInCriticalState();
        boolean jumpPressed = mc.options.jumpKey.isPressed();
        
        if (onlyCrits.isEnabled()) {

            if (smartCrits.isEnabled()) {
                if (mc.options.jumpKey.isPressed()) {
                    if (!isCrit) {
                        return;
                    }
                }
            } else {
                if (!isCrit) {
                    return;
                }
            }
        }

        LivingEntity target = getMouseOverTarget();
        if (target == null) return;

        AttackUtil.attackEntity(target);
    }
    
    private LivingEntity getMouseOverTarget() {
        Rotation rot = rotationManager.getCurrentRotation();
        if (rot == null) return null;

        Vec3d eyePos = mc.player.getCameraPosVec(1.0f);
        Vec3d lookDir = rot.toVector();
        Vec3d farEnd = eyePos.add(lookDir.multiply(100.0));

        targetSelector.searchTargets(mc.world.getEntities(), 100.0f, true);

        targetSelector.validateTarget(entity ->
                isValidTarget(entity) &&
                        rayTraceHit(entity, eyePos, farEnd)
        );

        return targetSelector.getCurrentTarget();
    }

    private boolean isValidTarget(Entity entity) {
        if (!(entity instanceof LivingEntity living)) return false;
        if (entity == mc.player) return false;
        if (!entity.isAlive()) return false;

        TargetSelector.EntityFilter filter =
                new TargetSelector.EntityFilter(targets.getSelectedNames());

        return filter.isValid(living);
    }

    private boolean rayTraceHit(Entity entity, Vec3d start, Vec3d end) {
        Box box = entity.getBoundingBox().expand(0.15);
        return box.raycast(start, end).isPresent();
    }
}


че думаете?) ну бля, модуль как регистрировать я уже не буду показывать, там делать нехуй
 
Всем привет! Написал на скорую руку триггербот на зенит рекод, думаю пойдёт под пиво, но работает

TriggerBot.java:
Expand Collapse Copy
package zenith.zov.client.modules.impl.combat;

import com.darkmagician6.eventapi.EventTarget;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.Vec3d;

import zenith.zov.base.events.impl.player.EventRotate;
import zenith.zov.base.player.AttackUtil;
import zenith.zov.client.modules.api.Category;
import zenith.zov.client.modules.api.Module;
import zenith.zov.client.modules.api.ModuleAnnotation;
import zenith.zov.client.modules.api.setting.impl.BooleanSetting;
import zenith.zov.client.modules.api.setting.impl.MultiBooleanSetting;

import zenith.zov.utility.game.player.TargetSelector;
import zenith.zov.utility.game.player.rotation.Rotation;

import java.util.List;

@ModuleAnnotation(
        name = "TriggerBot",
        category = Category.COMBAT,
        description = "Автоатака при наведении на цель"
)
public final class TriggerBot extends Module {

    public static final TriggerBot INSTANCE = new TriggerBot();
    private TriggerBot() {}

    private final BooleanSetting onlyCrits =
            new BooleanSetting("Только криты", false);

    private final BooleanSetting smartCrits =
            new BooleanSetting("Умные криты", "Бьёт критом только при зажатом прыжке", true, onlyCrits::isEnabled);

    private final BooleanSetting eatAttack =
            new BooleanSetting("Бить и есть", true);

    private final MultiBooleanSetting targets =
            MultiBooleanSetting.create(
                    "Цели",
                    List.of("Игроков", "Враждебных", "Мирных")
            );

    private final TargetSelector targetSelector = new TargetSelector();

    @EventTarget
    public void onRotate(EventRotate e) {
        if (mc.player == null || mc.world == null) return;
       
        if (mc.player.isUsingItem() && !eatAttack.isEnabled()) return;
       
        if (mc.player.getAttackCooldownProgress(1.0f) < 0.92f) return;
       
        boolean isCrit = AttackUtil.isPlayerInCriticalState();
        boolean jumpPressed = mc.options.jumpKey.isPressed();
       
        if (onlyCrits.isEnabled()) {

            if (smartCrits.isEnabled()) {
                if (mc.options.jumpKey.isPressed()) {
                    if (!isCrit) {
                        return;
                    }
                }
            } else {
                if (!isCrit) {
                    return;
                }
            }
        }

        LivingEntity target = getMouseOverTarget();
        if (target == null) return;

        AttackUtil.attackEntity(target);
    }
   
    private LivingEntity getMouseOverTarget() {
        Rotation rot = rotationManager.getCurrentRotation();
        if (rot == null) return null;

        Vec3d eyePos = mc.player.getCameraPosVec(1.0f);
        Vec3d lookDir = rot.toVector();
        Vec3d farEnd = eyePos.add(lookDir.multiply(100.0));

        targetSelector.searchTargets(mc.world.getEntities(), 100.0f, true);

        targetSelector.validateTarget(entity ->
                isValidTarget(entity) &&
                        rayTraceHit(entity, eyePos, farEnd)
        );

        return targetSelector.getCurrentTarget();
    }

    private boolean isValidTarget(Entity entity) {
        if (!(entity instanceof LivingEntity living)) return false;
        if (entity == mc.player) return false;
        if (!entity.isAlive()) return false;

        TargetSelector.EntityFilter filter =
                new TargetSelector.EntityFilter(targets.getSelectedNames());

        return filter.isValid(living);
    }

    private boolean rayTraceHit(Entity entity, Vec3d start, Vec3d end) {
        Box box = entity.getBoundingBox().expand(0.15);
        return box.raycast(start, end).isPresent();
    }
}


че думаете?) ну бля, модуль как регистрировать я уже не буду показывать, там делать нехуй
/del govno
 

Похожие темы

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