Начинающий
- Статус
- Оффлайн
- Регистрация
- 22 Мар 2022
- Сообщения
- 349
- Реакции
- 8
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Я начал делать киллауру и делаю её уже почти полторы недели и не понимаю как сделать silent ротации что бы от первого лица всё было норм но не флагало с ними и когда у меня даже что то получалось было такое что киллаура отказывалась бить если я не смотрю на цель, и подобные другие баги, грок или другие нейросети тоже делают какащке и я уже забил на них болт. Очень нуждаюсь в помощи
собственно вот код, если кому надо и если это поможет
Код:
package ru.prodlasio.feature.implement.combat;
import com.google.common.eventbus.Subscribe;
import lombok.Getter;
import net.minecraft.block.Blocks;
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.passive.AnimalEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket;
import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.network.packet.c2s.play.UpdateSelectedSlotC2SPacket;
import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import ru.prodlasio.events.impl.EventHud;
import ru.prodlasio.events.impl.EventRender3D;
import ru.prodlasio.events.impl.EventUpdate;
import ru.prodlasio.feature.Category;
import ru.prodlasio.feature.Feature;
import ru.prodlasio.feature.FeatureInfo;
import ru.prodlasio.feature.implement.combat.utils.AuraUtil;
import ru.prodlasio.feature.settings.impl.*;
import ru.prodlasio.helper.IMinecraft;
import ru.prodlasio.helper.main.manager.friend.FriendManager;
import ru.prodlasio.helper.main.render.RenderHelper;
import ru.prodlasio.helper.main.render.TargetDraw;
import ru.prodlasio.helper.other.player.InventoryHelper;
import ru.prodlasio.helper.other.player.PlayerHandler;
import java.awt.*;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CopyOnWriteArrayList;
import static ru.prodlasio.feature.implement.combat.utils.AuraUtil.*;
@FeatureInfo(name = "KillAura", category = Category.COMBAT, desc = "Автоматически атакует сущности с продвинутыми обходами античитов")
public class Aura extends Feature {
public Aura() {
add(fov, attackSettings, nohitwnen, renderFov, sortMode, targets, maxCPS, minCPS, maxTurnSpeed, failRate,
ignoreInvisible, ignoreNewlySpawned, range, silentAim, movementAdjustLevel, rotationMode, rotationType,
useBypassPackets, critMode, visualRot, horizontalCollision);
}
// Настройки
public final SliderSetting fov = new SliderSetting("Угол обзора", 180F, 30F, 360F, 1F);
public final ModeListSetting attackSettings = new ModeListSetting("Настройки атаки",
"Ломать щит", "Только криты", "Бить через стены", "Сброс спринта", "1.8 пвп");
public final ModeListSetting nohitwnen = new ModeListSetting("Не бить когда",
"Ешь", "Открыто меню");
private final ModeSetting sortMode = new ModeSetting("Режим сортировки",
"Адаптивный", "Дистанция", "Здоровье", "Прочность брони", "Наводка");
private static final ModeListSetting targets = new ModeListSetting("Таргеты",
"Игроки", "Невидимые", "Голые", "Тиммейты", "Животные", "Мобы");
public final BooleanSetting renderFov = new BooleanSetting("Рисовать FOV");
public final SliderSetting maxCPS = new SliderSetting("Макс CPS", 20F, 1F, 30F, 1F);
public final SliderSetting minCPS = new SliderSetting("Мин CPS", 10F, 1F, 20F, 1F);
public final SliderSetting maxTurnSpeed = new SliderSetting("Макс скорость поворота", 90F, 10F, 180F, 1F);
public final SliderSetting failRate = new SliderSetting("Шанс пропуска атаки", 5F, 0F, 20F, 1F);
public final BooleanSetting ignoreInvisible = new BooleanSetting("Игнорировать невидимых", true);
public final BooleanSetting ignoreNewlySpawned = new BooleanSetting("Игнорировать новых игроков", true);
public final SliderSetting range = new SliderSetting("Дальность атаки", 4.2F, 3.0F, 6.0F, 0.1F);
public final BooleanSetting silentAim = new BooleanSetting("Бесшумный прицел", true);
public final SliderSetting movementAdjustLevel = new SliderSetting("Уровень корректировки движения", 0.5F, 0.0F, 1.0F, 0.1F);
private final ModeSetting rotationMode = new ModeSetting("Режим ротации", "PerAttack", "Continuous");
private final ModeSetting rotationType = new ModeSetting("Тип ротации", "Классический", "Продвинутый", "Spooky");
public final BooleanSetting useBypassPackets = new BooleanSetting("Использовать обходные пакеты");
private final ModeSetting critMode = new ModeSetting("Режим критов", "Легит", "Всегда", "Воздух");
public final BooleanSetting visualRot = new BooleanSetting("От первого лица", false);
public final BooleanSetting horizontalCollision = new BooleanSetting("Учитывать горизонтальную коллизию", true);
@Getter
LivingEntity target;
private int attackTimer = 0;
private final Random random = new Random();
private RotationMode currentRotationMode;
public interface RotationMode {
void update(LivingEntity target);
float getYaw();
float getPitch();
}
public class RotationAnimation {
private float currentYaw;
private float currentPitch;
private float targetYaw;
private float targetPitch;
private int yawSpeed;
private int pitchSpeed;
public RotationAnimation() {
currentYaw = 0.0f;
currentPitch = 0.0f;
}
public void setTarget(float yaw, float pitch, int yawSpeed, int pitchSpeed) {
this.targetYaw = yaw;
this.targetPitch = pitch;
this.yawSpeed = yawSpeed;
this.pitchSpeed = pitchSpeed;
}
public void update() {
if (mc.player == null) {
return;
}
if (currentYaw == 0.0f && currentPitch == 0.0f) {
currentYaw = mc.player.getYaw();
currentPitch = mc.player.getPitch();
}
float deltaYaw = MathHelper.wrapDegrees(targetYaw - currentYaw);
float deltaPitch = targetPitch - currentPitch;
float yawStep = Math.signum(deltaYaw) * Math.min(Math.abs(deltaYaw), yawSpeed);
float pitchStep = Math.signum(deltaPitch) * Math.min(Math.abs(deltaPitch), pitchSpeed);
currentYaw += yawStep;
currentPitch += pitchStep;
if (Math.abs(deltaYaw) <= yawSpeed && Math.abs(deltaPitch) <= pitchSpeed) {
currentYaw = targetYaw;
currentPitch = targetPitch;
}
}
public float getYaw() {
return currentYaw;
}
public float getPitch() {
return currentPitch;
}
}
public class ClassicRotation implements RotationMode {
private final RotationAnimation rotAnim = new RotationAnimation();
@Override
public void update(LivingEntity target) {
if (mc.player == null) {
return;
}
if (target == null) {
rotAnim.setTarget(mc.player.getYaw(), mc.player.getPitch(), (int) (maxTurnSpeed.get() / 20F), (int) (maxTurnSpeed.get() / 20F));
rotAnim.update();
return;
}
float[] desired = getDesiredRotations(target);
float targetYaw = desired[0];
float targetPitch = desired[1];
int yawSpeed = (int) (maxTurnSpeed.get() / 20F);
int pitchSpeed = (int) (maxTurnSpeed.get() / 20F);
rotAnim.setTarget(targetYaw, targetPitch, yawSpeed, pitchSpeed);
rotAnim.update();
}
@Override
public float getYaw() {
return rotAnim.getYaw();
}
@Override
public float getPitch() {
return rotAnim.getPitch();
}
}
public class AdvancedRotation implements RotationMode {
private final RotationAnimation rotAnim = new RotationAnimation();
@Override
public void update(LivingEntity target) {
if (mc.player == null) {
return;
}
if (target == null) {
rotAnim.setTarget(mc.player.getYaw(), mc.player.getPitch(), (int) (maxTurnSpeed.get() / 20F), (int) (maxTurnSpeed.get() / 20F));
rotAnim.update();
return;
}
Vec3d predictedPos = predictTargetPosition(target);
float[] desired = getRotationsFromPos(predictedPos);
float targetYaw = desired[0];
float targetPitch = desired[1];
int yawSpeed = (int) (maxTurnSpeed.get() / 20F);
int pitchSpeed = (int) (maxTurnSpeed.get() / 20F);
rotAnim.setTarget(targetYaw, targetPitch, yawSpeed, pitchSpeed);
rotAnim.update();
}
@Override
public float getYaw() {
return rotAnim.getYaw();
}
@Override
public float getPitch() {
return rotAnim.getPitch();
}
private Vec3d predictTargetPosition(LivingEntity target) {
Vec3d velocity = target.getVelocity();
Vec3d pos = target.getBoundingBox().getCenter();
return pos.add(velocity.multiply(0.5));
}
private float[] getRotationsFromPos(Vec3d pos) {
if (mc.player == null) {
return new float[]{0.0f, 0.0f};
}
Vec3d playerPos = mc.player.getEyePos();
double deltaX = pos.x - playerPos.x;
double deltaY = pos.y - playerPos.y;
double deltaZ = pos.z - playerPos.z;
double distanceXZ = Math.sqrt(deltaX * deltaX + deltaZ * deltaZ);
float yaw = (float) Math.toDegrees(Math.atan2(deltaZ, deltaX)) - 90.0F;
float pitch = (float) -Math.toDegrees(Math.atan2(deltaY, distanceXZ));
return new float[]{yaw, pitch};
}
}
// Spooky режим ротации
public class SpookyRotation implements RotationMode {
private final RotationAnimation rotAnim = new RotationAnimation();
@Override
public void update(LivingEntity target) {
if (mc.player == null) {
return;
}
if (target == null) {
rotAnim.setTarget(mc.player.getYaw(), mc.player.getPitch(), (int) (maxTurnSpeed.get() / 20F), (int) (maxTurnSpeed.get() / 20F));
rotAnim.update();
return;
}
float[] desired = getDesiredRotations(target);
float targetYaw = desired[0] + (random.nextFloat() - 0.5f) * 2.0f;
float targetPitch = desired[1] + (random.nextFloat() - 0.5f) * 2.0f;
int yawSpeed = (int) (maxTurnSpeed.get() / 15F);
int pitchSpeed = (int) (maxTurnSpeed.get() / 15F);
rotAnim.setTarget(targetYaw, targetPitch, yawSpeed, pitchSpeed);
rotAnim.update();
}
@Override
public float getYaw() {
return rotAnim.getYaw();
}
@Override
public float getPitch() {
return rotAnim.getPitch();
}
}
private float[] getDesiredRotations(LivingEntity entity) {
if (mc.player == null) {
return new float[]{0.0f, 0.0f};
}
Vec3d playerPos = mc.player.getEyePos();
Vec3d targetPos = entity.getBoundingBox().getCenter();
double deltaX = targetPos.x - playerPos.x;
double deltaY = targetPos.y - playerPos.y;
double deltaZ = targetPos.z - playerPos.z;
double distanceXZ = Math.sqrt(deltaX * deltaX + deltaZ * deltaZ);
float yaw = (float) Math.toDegrees(Math.atan2(deltaZ, deltaX)) - 90.0F;
float pitch = (float) -Math.toDegrees(Math.atan2(deltaY, distanceXZ));
float offset = 1.7f;
yaw += (random.nextFloat() - 0.5f) * offset;
pitch += (random.nextFloat() - 0.5f) * offset;
return new float[]{yaw, pitch};
}
private RotationMode getRotationMode() {
switch (rotationType.getSelected()) {
case "Продвинутый":
return new AdvancedRotation();
case "Spooky":
return new SpookyRotation();
case "Классический":
default:
return new ClassicRotation();
}
}
private boolean collideWith(Entity target) {
if (mc.player == null || target == null || !horizontalCollision.isState()) {
return false;
}
double distance = mc.player.getPos().distanceTo(target.getPos());
return distance < 3;
}
@Subscribe
public void onUpdate(EventUpdate e) {
if (mc.player == null || mc.world == null) {
return;
}
if (mc.player.isUsingItem() && nohitwnen.isSelected("Ешь")) {
return;
}
if (mc.currentScreen != null && nohitwnen.isSelected("Открыто меню")) {
return;
}
if (attackTimer > 0) {
attackTimer--;
return;
}
target = find();
if (target == null) {
if (silentAim.isState() && rotationMode.getSelected().equals("Continuous")) {
currentRotationMode.update(null);
float yaw = mc.player.getYaw();
float pitch = currentRotationMode.getPitch();
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.LookAndOnGround(yaw, pitch, mc.player.isOnGround(), true));
}
return;
}
TargetDraw.tick();
if (!autoCrit()) return;
if (shieldBreaker(false)) {
setAttackTimer();
return;
}
float baseFov = this.fov.get();
double fov = calculateFOVFromCamera(target) * 3;
currentRotationMode.update(target);
float yaw = currentRotationMode.getYaw();
float pitch = currentRotationMode.getPitch();
if (silentAim.isState() && rotationMode.getSelected().equals("Continuous")) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.LookAndOnGround(yaw, pitch, mc.player.isOnGround(), true));
}
if (!FriendManager.checkFriend(target.getName().getString())
&& (silentAim.isState() || Math.abs(fov) < baseFov)
&& mc.player.distanceTo(target) <= range.get()
&& mc.player.getAttackCooldownProgress(0.5f) >= 1.0f) {
if (random.nextInt(100) < failRate.get()) {
return;
}
if (random.nextInt(10) < 4) {
yaw += (random.nextFloat() - 0.5f) * 3f;
pitch += (random.nextFloat() - 0.5f) * 3f;
}
attack(target);
setAttackTimer();
TargetDraw.on();
}
}
private void setAttackTimer() {
float cps = minCPS.get() + random.nextFloat() * (maxCPS.get() - minCPS.get());
int attackInterval = (int) (1000 / cps / 50);
attackTimer = attackInterval + random.nextInt(3);
}
public void attack(Entity entity) {
if (mc.player == null || mc.world == null) {
return;
}
boolean sprinting = mc.player.isSprinting();
boolean needToResetSprint = attackSettings.isSelected("Сброс спринта");
float originalYaw = mc.player.getYaw();
float originalPitch = mc.player.getPitch();
currentRotationMode.update((LivingEntity) entity);
float yaw = currentRotationMode.getYaw();
float pitch = currentRotationMode.getPitch();
boolean isColliding = collideWith(entity);
if (silentAim.isState()) {
if (rotationMode.getSelected().equals("PerAttack")) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.LookAndOnGround(yaw, pitch, mc.player.isOnGround(), true));
}
if (!mc.player.isSwimming() && sprinting && needToResetSprint) {
mc.player.networkHandler.sendPacket(new ClientCommandC2SPacket(mc.player, ClientCommandC2SPacket.Mode.STOP_SPRINTING));
mc.player.setSprinting(false);
}
mc.interactionManager.attackEntity(mc.player, entity);
mc.player.swingHand(Hand.MAIN_HAND);
if (!mc.player.isSwimming() && sprinting && needToResetSprint) {
mc.player.setSprinting(true);
mc.player.networkHandler.sendPacket(new ClientCommandC2SPacket(mc.player, ClientCommandC2SPacket.Mode.START_SPRINTING));
}
if (rotationMode.getSelected().equals("PerAttack")) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.LookAndOnGround(originalYaw, originalPitch, mc.player.isOnGround(), true));
}
if (visualRot.isState()) {
mc.player.setYaw(yaw);
mc.player.setPitch(pitch);
}
if (isColliding) {
adjustMovementOnCollision(yaw);
} else {
adjustMovement(yaw);
}
} else {
mc.player.setYaw(yaw);
mc.player.setPitch(pitch);
if (!mc.player.isSwimming() && sprinting && needToResetSprint) {
mc.player.networkHandler.sendPacket(new ClientCommandC2SPacket(mc.player, ClientCommandC2SPacket.Mode.STOP_SPRINTING));
mc.player.setSprinting(false);
}
mc.interactionManager.attackEntity(mc.player, entity);
mc.player.swingHand(Hand.MAIN_HAND);
if (!mc.player.isSwimming() && sprinting && needToResetSprint) {
mc.player.setSprinting(true);
mc.player.networkHandler.sendPacket(new ClientCommandC2SPacket(mc.player, ClientCommandC2SPacket.Mode.START_SPRINTING));
}
}
}
private void adjustMovement(float spoofedYaw) {
if (mc.player == null) {
return;
}
float deltaYaw = MathHelper.wrapDegrees(spoofedYaw - mc.player.getYaw());
float forward = mc.player.input.movementForward;
float sideways = mc.player.input.movementSideways;
float adjustFactor = movementAdjustLevel.get();
float cosDelta = MathHelper.cos((float) Math.toRadians(deltaYaw));
float sinDelta = MathHelper.sin((float) Math.toRadians(deltaYaw));
float adjustedForward = forward * cosDelta + sideways * sinDelta;
float adjustedSideways = sideways * cosDelta - forward * sinDelta;
mc.player.input.movementForward = forward + (adjustedForward - forward) * adjustFactor;
mc.player.input.movementSideways = sideways + (adjustedSideways - sideways) * adjustFactor;
}
private void adjustMovementOnCollision(float spoofedYaw) {
if (mc.player == null) {
return;
}
float deltaYaw = MathHelper.wrapDegrees(spoofedYaw - mc.player.getYaw());
float forward = mc.player.input.movementForward;
float sideways = mc.player.input.movementSideways;
float adjustFactor = movementAdjustLevel.get() * 0.5f;
float cosDelta = MathHelper.cos((float) Math.toRadians(deltaYaw));
float sinDelta = MathHelper.sin((float) Math.toRadians(deltaYaw));
float adjustedForward = forward * cosDelta + sideways * sinDelta;
float adjustedSideways = sideways * cosDelta - forward * sinDelta;
mc.player.input.movementForward = forward + (adjustedForward - forward) * adjustFactor;
mc.player.input.movementSideways = sideways + (adjustedSideways - sideways) * adjustFactor;
mc.player.setVelocity(mc.player.getVelocity().multiply(0.8));
}
@Subscribe
public void render3d(EventRender3D e) {
if (mc.player == null || target == null) {
return;
}
float baseFov = this.fov.get();
double fov = calculateFOVFromCamera(target) * 3;
TargetDraw.render(target);
if (mc.player.distanceTo(target) >= range.get()) {
TargetDraw.off();
} else {
TargetDraw.on();
}
}
@Subscribe
public void render2d(EventHud e) {
if (mc.player == null || mc.getWindow() == null) {
return;
}
int screenWidth = mc.getWindow().getScaledWidth();
int screenHeight = mc.getWindow().getScaledHeight();
float xWindow = screenWidth / 2.0f;
float yWindow = screenHeight / 2.0f;
if (renderFov.isState()) RenderHelper.drawCircle(e.getStack(), xWindow, yWindow, fov.get(), Color.WHITE);
}
private boolean autoCrit() {
if (mc.player == null || mc.world == null) {
return false;
}
switch (critMode.getSelected()) {
case "Легит":
if (attackSettings.isSelected("1.8 пвп")) {
if (attackSettings.isSelected("Только криты")) {
return !mc.player.isOnGround() && mc.player.fallDistance > 0.25f;
}
return true;
}
boolean reasonForSkipCrit = !attackSettings.isSelected("Только криты")
|| mc.player.getAbilities().flying
|| mc.player.hasStatusEffect(StatusEffects.LEVITATION)
|| mc.player.hasStatusEffect(StatusEffects.BLINDNESS)
|| PlayerHandler.isPlayerInWeb()
|| mc.world.getBlockState(mc.player.getBlockPos()).getBlock() == Blocks.LADDER;
if (PlayerHandler.getAttackStrengthScale(0.5f) < (mc.player.isOnGround() ? 1f : 0.9f))
return false;
if (mc.player.isInLava())
return true;
if (!mc.options.jumpKey.isPressed() && PlayerHandler.isAboveWater())
return true;
if (!reasonForSkipCrit)
return !mc.player.isOnGround() && mc.player.fallDistance > 0.0f;
return true;
case "Всегда":
return true;
case "Воздух":
return !mc.player.isOnGround();
default:
return false;
}
}
private boolean shieldBreaker(boolean instant) {
if (mc.player == null || mc.world == null) {
return false;
}
int axeSlot = InventoryHelper.getAxe();
if (axeSlot == -1) return false;
if (!attackSettings.isSelected("Ломать щит")) return false;
if (!(target instanceof PlayerEntity)) return false;
if (!((PlayerEntity) target).isUsingItem() && !instant) return false;
if (((PlayerEntity) target).getOffHandStack().getItem() != Items.SHIELD && ((PlayerEntity) target).getMainHandStack().getItem() != Items.SHIELD)
return false;
if (random.nextInt(5) == 0) {
try {
Thread.sleep(50 + random.nextInt(50));
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
if (axeSlot >= 9) {
mc.interactionManager.clickSlot(mc.player.currentScreenHandler.syncId, axeSlot, mc.player.getInventory().selectedSlot, SlotActionType.SWAP, mc.player);
IMinecraft.sendPacket(new CloseHandledScreenC2SPacket(mc.player.currentScreenHandler.syncId));
mc.interactionManager.attackEntity(mc.player, target);
mc.player.swingHand(Hand.MAIN_HAND);
mc.interactionManager.clickSlot(mc.player.currentScreenHandler.syncId, axeSlot, mc.player.getInventory().selectedSlot, SlotActionType.SWAP, mc.player);
IMinecraft.sendPacket(new CloseHandledScreenC2SPacket(mc.player.currentScreenHandler.syncId));
} else {
IMinecraft.sendPacket(new UpdateSelectedSlotC2SPacket(axeSlot));
mc.interactionManager.attackEntity(mc.player, target);
mc.player.swingHand(Hand.MAIN_HAND);
IMinecraft.sendPacket(new UpdateSelectedSlotC2SPacket(mc.player.getInventory().selectedSlot));
}
return true;
}
private LivingEntity find() {
if (mc.player == null || mc.world == null) {
return null;
}
List<LivingEntity> first_stage = new CopyOnWriteArrayList<>();
for (Entity ent : mc.world.getEntities()) {
if (ent == mc.player) continue;
if (!(ent instanceof LivingEntity)) continue;
if (!isValid((LivingEntity) ent)) continue;
first_stage.add((LivingEntity) ent);
}
if (!first_stage.isEmpty() && random.nextInt(10) < 3) {
return first_stage.get(random.nextInt(first_stage.size()));
}
return switch (sortMode.getSelected()) {
case "Дистанция" ->
first_stage.stream().min(Comparator.comparing(e -> (mc.player.squaredDistanceTo(e.getPos())))).orElse(null);
case "Здоровье" ->
first_stage.stream().min(Comparator.comparing(e -> (e.getHealth() + e.getAbsorptionAmount()))).orElse(null);
case "Прочность брони" -> first_stage.stream().min(Comparator.comparing(e -> {
float v = 0;
for (ItemStack armor : e.getArmorItems())
if (armor != null && !armor.getItem().equals(Items.AIR)) {
v += ((armor.getMaxDamage() - armor.getDamage()) / (float) armor.getMaxDamage());
}
return v;
})).orElse(null);
case "Наводка" -> first_stage.stream().min(Comparator.comparingDouble(AuraUtil::calculateFOVFromCamera))
.orElse(null);
case "Адаптивный" ->
first_stage.stream().min(Comparator.comparing(e -> {
float health = e.getHealth() + e.getAbsorptionAmount();
double distance = mc.player.squaredDistanceTo(e.getPos());
float armor = 0;
for (ItemStack armorItem : e.getArmorItems())
if (armorItem != null && !armorItem.getItem().equals(Items.AIR)) {
armor += ((armorItem.getMaxDamage() - armorItem.getDamage()) / (float) armorItem.getMaxDamage());
}
return health * 0.4f + distance * 0.3f + armor * 0.3f;
})).orElse(null);
default -> first_stage.stream().min(Comparator.comparing(e -> (mc.player.squaredDistanceTo(e.getPos())))).orElse(null);
};
}
private boolean isValid(final LivingEntity entity) {
if (mc.player == null || entity == null) return false;
if (!attackSettings.isSelected("Бить через стены") && !mc.player.canSee(entity)) return false;
if (entity.getHealth() <= 0 || !entity.isAlive() || entity.equals(mc.player)) return false;
if (entity instanceof ArmorStandEntity) return false;
if (!targets.isSelected("Невидимые") && entity.isInvisible() && ignoreInvisible.isState()) return false;
if (entity.age < 10 && ignoreNewlySpawned.isState()) return false;
if (entity instanceof PlayerEntity player) {
if (FriendManager.checkFriend(player.getName().getString())) return false;
if (!targets.isSelected("Игроки")) return false;
if (!targets.isSelected("Голые") && player.getArmor() <= 0) return false;
if (!targets.isSelected("Тиммейты") && mc.player.isTeammate(entity)) return false;
}
if (entity instanceof AnimalEntity) return targets.isSelected("Животные");
if (entity instanceof MobEntity) return targets.isSelected("Мобы");
return true;
}
@Override
public void off() {
TargetDraw.off();
target = null;
super.off();
}
@Override
public void on() {
if (mc.player != null) {
currentRotationMode = getRotationMode();
}
TargetDraw.on();
super.on();
}
}
собственно вот код, если кому надо и если это поможет