Начинающий
- Статус
- Оффлайн
- Регистрация
- 1 Июл 2024
- Сообщения
- 56
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Всем привет! Написал на скорую руку триггербот на зенит рекод, думаю пойдёт под пиво, но работает
че думаете?) ну бля, модуль как регистрировать я уже не буду показывать, там делать нехуй
TriggerBot.java:
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();
}
}
че думаете?) ну бля, модуль как регистрировать я уже не буду показывать, там делать нехуй

