Начинающий
- Статус
- Онлайн
- Регистрация
- 30 Янв 2025
- Сообщения
- 8
- Реакции
- 1
- Выберите загрузчик игры
- Fabric
Всем привет второй раз, публикую доделанный TriggerBot на 1.21.4 без гпт кода.
Надеюсь зайдёт. Спасибо Flowon, что помог код вделать на сайте.
Надеюсь зайдёт. Спасибо Flowon, что помог код вделать на сайте.
TriggerBotv2:
package ru.cat.modules.combat;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.decoration.ArmorStandEntity;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.entity.mob.Monster;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.VillagerEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.EntityHitResult;
import net.minecraft.util.math.Vec3d;
import ru.cat.events.Event;
import ru.cat.events.impl.EventUpdate;
import ru.cat.manager.Manager;
import ru.cat.modules.Function;
import ru.cat.modules.FunctionAnnotation;
import ru.cat.modules.Type;
import ru.cat.modules.setting.BooleanSetting;
import ru.cat.modules.setting.MultiSetting;
import java.util.Arrays;
@FunctionAnnotation(name = "TriggerBot", keywords = {"Триггер", "Триггербот"}, desc = "Автоудар по цели под прицелом", type = Type.Combat)
public class TriggerBot extends Function {
private final MultiSetting targets = new MultiSetting(
"Цели",
Arrays.asList("Игроки", "Мобы", "Монстры"),
new String[]{"Игроки", "Друзья", "Мобы", "Монстры", "Жители"}
);
private final BooleanSetting attackWhileEating = new BooleanSetting("Бить когда ешь", false);
private final BooleanSetting throughShield = new BooleanSetting("Бить сквозь щит", true);
private boolean attackedThisJump = false;
private double lastVelocityY = 0;
private boolean peakReached = false;
private int postPeakTicks = 0;
private static final int ATTACK_DELAY_TICKS = 2;
private static final double REACH = 3.0;
public TriggerBot() {
addSettings(targets, attackWhileEating, throughShield);
}
@Override
public void onEvent(Event event) {
if (!(event instanceof EventUpdate)) return;
if (mc == null || mc.player == null || mc.world == null || mc.interactionManager == null) return;
if (mc.player.isOnGround()) {
attackedThisJump = false;
lastVelocityY = 0;
peakReached = false;
postPeakTicks = 0;
}
LivingEntity target = null;
Lock lock = Manager.FUNCTION_MANAGER.lock;
if (lock != null && lock.state && isValidLockedTarget(lock.lockedTarget)) {
target = lock.lockedTarget;
} else {
if (!(mc.crosshairTarget instanceof EntityHitResult ehr)) return;
Entity e = ehr.getEntity();
if (!(e instanceof LivingEntity living)) return;
if (!isValidTarget(living)) return;
target = living;
}
if (target == null) return;
if (!attackWhileEating.get() && mc.player.isUsingItem() && !mc.player.getActiveItem().isOf(Items.SHIELD)) {
return;
}
float cooldown = mc.player.getAttackCooldownProgress(mc.getRenderTickCounter().getTickDelta(true));
if (cooldown < 0.9F) return;
if (throughShield.get() && mc.player.isUsingItem() && mc.player.getActiveItem().isOf(Items.SHIELD)) {
mc.interactionManager.stopUsingItem(mc.player);
}
boolean canCrit = !mc.player.isOnGround() &&
!mc.player.isTouchingWater() &&
!mc.player.isClimbing();
if (!canCrit) {
lastVelocityY = 0;
peakReached = false;
postPeakTicks = 0;
return;
}
if (attackedThisJump) return;
double distanceSq = mc.player.squaredDistanceTo(target);
if (distanceSq > REACH * REACH) return;
double currentVelY = mc.player.getVelocity().y;
boolean isPeak = lastVelocityY > 0 && currentVelY <= 0;
if (isPeak) {
peakReached = true;
postPeakTicks = 0;
}
if (peakReached) {
postPeakTicks++;
}
lastVelocityY = currentVelY;
if (!peakReached || postPeakTicks < ATTACK_DELAY_TICKS) return;
mc.interactionManager.attackEntity(mc.player, target);
mc.player.swingHand(Hand.MAIN_HAND);
attackedThisJump = true;
peakReached = false;
postPeakTicks = 0;
}
private boolean isValidTarget(LivingEntity entity) {
if (entity == null || entity.isDead() || !entity.isAlive() || entity == mc.player) return false;
if (entity instanceof ArmorStandEntity) return false;
if (Manager.FUNCTION_MANAGER.antiBot.check(entity)) return false;
if (entity instanceof PlayerEntity) {
if (!targets.get("Игроки")) return false;
if (!targets.get("Друзья") && Manager.FRIEND_MANAGER.isFriend(entity.getName().getString())) return false;
} else if (entity instanceof VillagerEntity && !targets.get("Жители")) return false;
else if (entity instanceof MobEntity || entity instanceof AnimalEntity) {
if (!targets.get("Мобы")) return false;
} else if (entity instanceof Monster && !targets.get("Монстры")) return false;
return !entity.hasStatusEffect(StatusEffects.INVISIBILITY) || mc.player.canSee(entity);
}
private boolean isValidLockedTarget(LivingEntity entity) {
if (entity == null || entity.isDead() || !entity.isAlive() || entity == mc.player) return false;
if (entity instanceof ArmorStandEntity) return false;
return !Manager.FUNCTION_MANAGER.antiBot.check(entity);
}
}