Начинающий
- Статус
- Оффлайн
- Регистрация
- 11 Мар 2024
- Сообщения
- 17
- Реакции
- 0
сука зачем это одобрили /del
Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Нэт крошсистемкента зовут курсор?
Рофл тема есл чтну и дерьмо, а тебя искренне жаль если ты дружишь с нейросетью
Ето топовайа хач аура фт бопассука зачем это одобрили /del
Одиночкуи что ЭТО обходит
Ето топ ротацыйа фт бапасэто че такое нахуй1:"Выключена", "Выключена",
Писал крошсистем дезз и фабосокей, давай будем людьми, назови топ 5 причин почему эта киллаура хороша и достойна похвалы
Фабос писалХАХАХАХАХХАХАХАХАХАХАХАХАХАХАХА
а нахуй?"Тип ротации", "Выключена", "Выключена"
хз зачем то крашсистем написала нахуй?
а коментарии в коде кент оставлял?новая селфкод килка для топовых пастеров нафик кто понил тот понял спасиба маему кинту Хз М. за что что предоставил свою топовую килку
вот код
Код:package im.expensive.functions.impl.combat; import com.google.common.eventbus.Subscribe; import im.expensive.command.friends.FriendStorage; import im.expensive.events.EventInput; import im.expensive.events.EventMotion; import im.expensive.events.EventUpdate; import im.expensive.functions.api.Category; import im.expensive.functions.api.Function; import im.expensive.functions.api.FunctionRegister; import im.expensive.functions.settings.impl.BooleanSetting; import im.expensive.functions.settings.impl.ModeListSetting; import im.expensive.functions.settings.impl.ModeSetting; import im.expensive.functions.settings.impl.SliderSetting; import im.expensive.utils.math.SensUtils; import im.expensive.utils.player.InventoryUtil; import im.expensive.utils.player.MouseUtil; import im.expensive.utils.player.MoveUtils; import lombok.Getter; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.item.ArmorStandEntity; import net.minecraft.entity.monster.MonsterEntity; import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ClickType; import net.minecraft.item.ArmorItem; import net.minecraft.item.ItemStack; import net.minecraft.network.play.client.CHeldItemChangePacket; import net.minecraft.util.Hand; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector2f; import net.minecraft.util.math.vector.Vector3d; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Random; import static java.lang.Math.hypot; import static net.minecraft.util.math.MathHelper.clamp; import static net.minecraft.util.math.MathHelper.wrapDegrees; @FunctionRegister(name = "KillAura", type = Category.Combat) public class KillAura extends Function { @Getter private final ModeSetting rotationType = new ModeSetting("Тип ротации", "Выключена", "Выключена", "Плавная", "Снап", "HVH Плавная", "HVH Снап"); // Основные настройки private final SliderSetting attackRange = new SliderSetting("Дальность атаки", 3.2f, 3f, 6f, 0.1f); private final SliderSetting fov = new SliderSetting("Поле зрения", 180f, 30f, 360f, 1f); // Настройки для снап ротации (мгновенная) private final SliderSetting snapAccuracy = new SliderSetting("Точность снапа", 1.0f, 0.5f, 5f, 0.1f); private final BooleanSetting snapPrediction = new BooleanSetting("Предсказание траектории", true); private final SliderSetting predictionStrength = new SliderSetting("Сила предсказания", 1.5f, 0.5f, 3f, 0.1f); private final BooleanSetting snapSilent = new BooleanSetting("Скрытный снап", false); private final BooleanSetting snapAntiAim = new BooleanSetting("Противоаим", false); private final SliderSetting snapAntiAimAmount = new SliderSetting("Сила противоаима", 5f, 1f, 15f, 0.5f); // Настройки для HVH ротаций private final SliderSetting hvhRotationSpeed = new SliderSetting("Скорость плавного поворота", 60f, 10f, 360f, 1f); private final SliderSetting hvhPitchSpeed = new SliderSetting("Скорость плавного наклона", 40f, 10f, 180f, 1f); private final BooleanSetting silentAim = new BooleanSetting("Скрытное наведение", false); private final BooleanSetting randomization = new BooleanSetting("Случайные отклонения", false); final ModeListSetting targetSelection = new ModeListSetting("Выбор целей", new BooleanSetting("Игроки", true), new BooleanSetting("Без брони", true), new BooleanSetting("Враждебные мобы", false), new BooleanSetting("Мирные мобы", false), new BooleanSetting("Друзья", false), new BooleanSetting("Невидимые без брони", true), new BooleanSetting("Невидимые", true)); @Getter final ModeListSetting advancedOptions = new ModeListSetting("Дополнительно", new BooleanSetting("Только с критом", false), new BooleanSetting("Ломать щиты", true), new BooleanSetting("Отжимать щиты", true), new BooleanSetting("Ускорять при атаке", true), new BooleanSetting("Синхронизация с TPS", false), new BooleanSetting("Фиксировать цель", true), new BooleanSetting("Корректировка движения", true), new BooleanSetting("Пауза при использовании предметов", true), new BooleanSetting("Снап при атаке", true)); final ModeSetting movementCorrection = new ModeSetting("Стиль коррекции", "Плавный", "Плавный", "Агрессивный"); private Vector2f rotationVector = new Vector2f(0, 0); @Getter private LivingEntity currentTarget; private Entity selectedEntity; private int rotationTicks = 0; private boolean isRotating; // Для снап ротации private float lastSnapYaw = 0; private float lastSnapPitch = 0; private int snapDelay = 0; private boolean wasSnapping = false; private int snapCounter = 0; private float[] snapHistory = new float[10]; private int snapHistoryIndex = 0; private float antiAimOffset = 0f; // Для случайных отклонений в HVH private float randomDeviation = 0f; private int randomDeviationTimer = 0; // Таймеры для атаки private int attackTimer = 0; private boolean canPerformAttack = true; private final Random randomGenerator = new Random(); private final Random snapRandom = new Random(); public KillAura(AutoPotion autopotion) { addSettings(rotationType, attackRange, fov, targetSelection, advancedOptions, movementCorrection); addSettings(snapAccuracy, snapPrediction, predictionStrength, snapSilent, snapAntiAim, snapAntiAimAmount); addSettings(hvhRotationSpeed, hvhPitchSpeed, silentAim, randomization); } @Subscribe public void onInput(EventInput eventInput) { if (!isState() || currentTarget == null || mc.player == null) return; if (advancedOptions.getValueByName("Корректировка движения").get() && movementCorrection.is("Плавный")) { MoveUtils.fixMovement(eventInput, rotationVector.x); } } @Subscribe public void onUpdate(EventUpdate e) { if (!isState() || mc.player == null) return; // Обновление таймера атаки if (attackTimer > 0) { attackTimer--; } else { canPerformAttack = true; } // Обновление задержки снапа if (snapDelay > 0) { snapDelay--; } // Поиск новой цели if (advancedOptions.getValueByName("Фиксировать цель").get() && (currentTarget == null || !isValidTarget(currentTarget)) || !advancedOptions.getValueByName("Фиксировать цель").get()) { findNewTarget(); } // Обновление случайных отклонений if (randomDeviationTimer > 0) { randomDeviationTimer--; } else if (randomization.get() && (rotationType.is("HVH Плавная") || rotationType.is("HVH Снап"))) { randomDeviation = (float) ((randomGenerator.nextFloat() - 0.5) * 10f); randomDeviationTimer = 20 + randomGenerator.nextInt(20); } // Обновление противоаима для снапа if (snapAntiAim.get() && rotationType.is("Снап")) { antiAimOffset = (float) Math.sin(System.currentTimeMillis() / 200.0) * snapAntiAimAmount.get(); } else { antiAimOffset = 0f; } if (currentTarget != null) { isRotating = false; // Обновление ротации в зависимости от выбранного типа if (!rotationType.is("Выключена")) { String currentRotationType = rotationType.get(); switch (currentRotationType) { case "Снап": updateSnapRotation(); break; case "HVH Плавная": updateHvHSmoothRotation(false); break; case "HVH Снап": updateHvHSnapRotation(false); break; case "Плавная": if (!isRotating) { updateSmoothRotation(false); } break; } } // Проверка условий для атаки if (canAttack() && canPerformAttack) { performAttack(); rotationTicks = 2; attackTimer = 10; canPerformAttack = false; } } else { resetAll(); } // Сохранение истории снапа if (rotationType.is("Снап")) { snapHistory[snapHistoryIndex] = rotationVector.x; snapHistoryIndex = (snapHistoryIndex + 1) % snapHistory.length; } } @Subscribe private void onWalking(EventMotion e) { if (!isState() || currentTarget == null) return; // Для скрытного наведения в HVH режимах и снап ротации boolean shouldBeSilent = (rotationType.is("HVH Плавная") || rotationType.is("HVH Снап")) && silentAim.get() || rotationType.is("Снап") && snapSilent.get(); if (shouldBeSilent) { return; } // Применение ротации if (!rotationType.is("Выключена")) { float yaw = rotationVector.x; float pitch = rotationVector.y; // Добавляем противоаим if (snapAntiAim.get() && rotationType.is("Снап")) { yaw += antiAimOffset; } e.setYaw(yaw); e.setPitch(pitch); mc.player.rotationYawHead = yaw; mc.player.renderYawOffset = yaw; mc.player.rotationPitchHead = pitch; } } private void findNewTarget() { if (mc.player == null || mc.world == null) return; List<LivingEntity> potentialTargets = new ArrayList<>(); for (Entity entity : mc.world.getAllEntities()) { if (entity instanceof LivingEntity living && isValidTarget(living)) { if (isWithinFieldOfView(living)) { potentialTargets.add(living); } } } if (potentialTargets.isEmpty()) { currentTarget = null; return; } // Сортировка по расстоянию potentialTargets.sort(Comparator.comparingDouble(entity -> mc.player.getDistance(entity))); currentTarget = potentialTargets.get(0); } private boolean isWithinFieldOfView(LivingEntity entity) { if (fov.get() >= 360f) return true; if (mc.player == null) return false; Vector3d directionVector = entity.getBoundingBox().getCenter() .subtract(mc.player.getEyePosition(1.0F)); float targetYaw = (float) MathHelper.wrapDegrees(Math.toDegrees(Math.atan2(directionVector.z, directionVector.x)) - 90); float targetPitch = (float) (-Math.toDegrees(Math.atan2(directionVector.y, hypot(directionVector.x, directionVector.z)))); float yawDifference = Math.abs(wrapDegrees(targetYaw - mc.player.rotationYaw)); float pitchDifference = Math.abs(wrapDegrees(targetPitch - mc.player.rotationPitch)); return yawDifference <= fov.get() / 2 && pitchDifference <= fov.get() / 2; } private Vector3d calculatePredictedPosition(LivingEntity target) { if (!snapPrediction.get() || target == null) { return target.getBoundingBox().getCenter(); } Vector3d currentPos = target.getBoundingBox().getCenter(); // Получаем вектор движения цели Vector3d motion = new Vector3d( target.getPosX() - target.prevPosX, target.getPosY() - target.prevPosY, target.getPosZ() - target.prevPosZ ); // Рассчитываем время полета удара double distance = mc.player.getDistance(target); double timeToTarget = distance / 8.0; // Примерная скорость удара // Усиливаем предсказание timeToTarget *= predictionStrength.get(); // Учитываем вертикальное движение if (!target.isOnGround()) { motion = motion.add(0, motion.y * 0.5, 0); } // Предсказанная позиция Vector3d predictedPos = currentPos.add(motion.scale(timeToTarget)); // Минимальная коррекция для стоящих целей if (motion.length() < 0.05) { predictedPos = currentPos; } return predictedPos; } private Vector2f calculateSnapAngles(Vector3d targetPos) { if (mc.player == null) return new Vector2f(0, 0); Vector3d eyePos = mc.player.getEyePosition(1.0F); Vector3d diff = targetPos.subtract(eyePos); double diffX = diff.x; double diffY = diff.y; double diffZ = diff.z; double dist = Math.sqrt(diffX * diffX + diffZ * diffZ); float yaw = (float) Math.toDegrees(Math.atan2(diffZ, diffX)) - 90.0F; float pitch = (float) (-Math.toDegrees(Math.atan2(diffY, dist))); // Выбираем кратчайший путь поворота float currentYaw = rotationVector.x; float deltaYaw = wrapDegrees(yaw - currentYaw); if (Math.abs(deltaYaw) > 180) { deltaYaw = deltaYaw - Math.copySign(360, deltaYaw); } yaw = currentYaw + deltaYaw; // Ограничиваем угол наклона pitch = clamp(pitch, -89, 89); // Добавляем точность (случайное отклонение для натуральности) float accuracyFactor = 1.0f / snapAccuracy.get(); if (accuracyFactor > 0.1f) { float randomYawOffset = (snapRandom.nextFloat() - 0.5f) * 2f * accuracyFactor; float randomPitchOffset = (snapRandom.nextFloat() - 0.5f) * accuracyFactor; yaw += randomYawOffset; pitch += randomPitchOffset; } return new Vector2f(wrapDegrees(yaw), pitch); } private void updateSnapRotation() { if (currentTarget == null || mc.player == null || snapDelay > 0) return; isRotating = true; // Получаем предсказанную позицию Vector3d targetPos = calculatePredictedPosition(currentTarget); // Рассчитываем углы снапа Vector2f snapAngles = calculateSnapAngles(targetPos); float targetYaw = snapAngles.x; float targetPitch = snapAngles.y; // Проверяем, нужно ли делать снап (слишком большой угол или опция "Снап при атаке") boolean shouldSnap = shouldPerformSnap(targetYaw, targetPitch); if (shouldSnap) { // Мгновенный снап performInstantSnap(targetYaw, targetPitch); snapCounter++; // Случайная задержка между снапами для натуральности if (snapCounter > 3) { snapDelay = 1 + snapRandom.nextInt(2); snapCounter = 0; } } else { // Плавный переход к цели performSmoothTransition(targetYaw, targetPitch); } // Корректировка движения if (advancedOptions.getValueByName("Корректировка движения").get() && !snapSilent.get()) { mc.player.rotationYawOffset = rotationVector.x; } // Сохраняем последние углы lastSnapYaw = targetYaw; lastSnapPitch = targetPitch; wasSnapping = shouldSnap; } private boolean shouldPerformSnap(float targetYaw, float targetPitch) { // Всегда делаем снап при атаке, если опция включена if (advancedOptions.getValueByName("Снап при атаке").get() && advancedOptions.getValueByName("Ускорять при атаке").get() && canPerformAttack) { return true; } // Проверяем угол отклонения float yawDiff = Math.abs(wrapDegrees(targetYaw - rotationVector.x)); float pitchDiff = Math.abs(wrapDegrees(targetPitch - rotationVector.y)); // Делаем снап при большом отклонении return yawDiff > 15f || pitchDiff > 8f; } private void performInstantSnap(float targetYaw, float targetPitch) { // Мгновенный снап с учетом GCD float newYaw = targetYaw; float newPitch = targetPitch; // Применяем коррекцию чувствительности float gcd = SensUtils.getGCDValue(); if (gcd > 0) { float deltaYaw = newYaw - rotationVector.x; float deltaPitch = newPitch - rotationVector.y; deltaYaw -= deltaYaw % gcd; deltaPitch -= deltaPitch % gcd; newYaw = rotationVector.x + deltaYaw; newPitch = rotationVector.y + deltaPitch; } // Ограничиваем угол наклона newPitch = clamp(newPitch, -89, 89); rotationVector = new Vector2f(newYaw, newPitch); } private void performSmoothTransition(float targetYaw, float targetPitch) { // Плавный переход для небольших корректировок float yawDiff = wrapDegrees(targetYaw - rotationVector.x); float pitchDiff = wrapDegrees(targetPitch - rotationVector.y); // Медленная корректировка float yawStep = yawDiff * 0.3f; float pitchStep = pitchDiff * 0.2f; float newYaw = rotationVector.x + yawStep; float newPitch = clamp(rotationVector.y + pitchStep, -89, 89); // GCD коррекция float gcd = SensUtils.getGCDValue(); if (gcd > 0) { newYaw -= (newYaw - rotationVector.x) % gcd; newPitch -= (newPitch - rotationVector.y) % gcd; } rotationVector = new Vector2f(newYaw, newPitch); } private void updateSmoothRotation(boolean isAttacking) { if (currentTarget == null || mc.player == null) return; isRotating = true; Vector3d targetPos = calculatePredictedPosition(currentTarget); Vector2f targetAngles = calculateSnapAngles(targetPos); float targetYaw = targetAngles.x; float targetPitch = clamp(targetAngles.y, -89, 89); float yawDiff = wrapDegrees(targetYaw - rotationVector.x); float pitchDiff = wrapDegrees(targetPitch - rotationVector.y); // Плавная интерполяция float smoothFactor = isAttacking ? 0.8f : 0.3f; float newYaw = rotationVector.x + yawDiff * smoothFactor; float newPitch = clamp(rotationVector.y + pitchDiff * smoothFactor, -89, 89); // Коррекция чувствительности float gcd = SensUtils.getGCDValue(); if (gcd > 0) { newYaw -= (newYaw - rotationVector.x) % gcd; newPitch -= (newPitch - rotationVector.y) % gcd; } rotationVector = new Vector2f(newYaw, newPitch); if (advancedOptions.getValueByName("Корректировка движения").get()) { mc.player.rotationYawOffset = rotationVector.x; } } private void updateHvHSmoothRotation(boolean isAttacking) { if (currentTarget == null || mc.player == null) return; Vector3d targetPos = calculatePredictedPosition(currentTarget); Vector2f targetAngles = calculateSnapAngles(targetPos); float targetYaw = targetAngles.x; float targetPitch = clamp(targetAngles.y, -89, 89); // Добавление случайных отклонений if (randomization.get()) { targetYaw += randomDeviation; targetPitch += randomDeviation * 0.5f; } float yawDiff = wrapDegrees(targetYaw - rotationVector.x); float pitchDiff = wrapDegrees(targetPitch - rotationVector.y); // Плавная ротация с настройками HVH float yawStep = Math.min(Math.max(Math.abs(yawDiff), 1.0f), hvhRotationSpeed.get()); float pitchStep = Math.min(Math.max(Math.abs(pitchDiff), 1.0f), hvhPitchSpeed.get()); if (isAttacking && advancedOptions.getValueByName("Ускорять при атаке").get()) { yawStep *= 1.5f; pitchStep *= 1.5f; } float newYaw = rotationVector.x + (yawDiff > 0 ? yawStep : -yawStep); float newPitch = clamp(rotationVector.y + (pitchDiff > 0 ? pitchStep : -pitchStep), -89.0F, 89.0F); float gcd = SensUtils.getGCDValue(); if (gcd > 0) { newYaw -= (newYaw - rotationVector.x) % gcd; newPitch -= (newPitch - rotationVector.y) % gcd; } rotationVector = new Vector2f(newYaw, newPitch); if (advancedOptions.getValueByName("Корректировка движения").get() && !silentAim.get()) { mc.player.rotationYawOffset = rotationVector.x; } } private void updateHvHSnapRotation(boolean isAttacking) { if (currentTarget == null || mc.player == null) return; Vector3d targetPos = calculatePredictedPosition(currentTarget); Vector2f targetAngles = calculateSnapAngles(targetPos); float targetYaw = targetAngles.x; float targetPitch = clamp(targetAngles.y, -89, 89); if (randomization.get()) { targetYaw += randomDeviation; targetPitch += randomDeviation * 0.5f; } float yawDiff = wrapDegrees(targetYaw - rotationVector.x); float pitchDiff = wrapDegrees(targetPitch - rotationVector.y); // HVH снап - быстрый но не мгновенный float maxYawChange = hvhRotationSpeed.get() * 3f; float maxPitchChange = hvhPitchSpeed.get() * 2f; float yawChange = Math.copySign(Math.min(Math.abs(yawDiff), maxYawChange), yawDiff); float pitchChange = Math.copySign(Math.min(Math.abs(pitchDiff), maxPitchChange), pitchDiff); // Ускорение при атаке if (isAttacking && advancedOptions.getValueByName("Ускорять при атаке").get()) { yawChange *= 1.8f; pitchChange *= 1.5f; } float newYaw = rotationVector.x + yawChange; float newPitch = clamp(rotationVector.y + pitchChange, -89.0F, 89.0F); float gcd = SensUtils.getGCDValue(); if (gcd > 0) { newYaw -= (newYaw - rotationVector.x) % gcd; newPitch -= (newPitch - rotationVector.y) % gcd; } rotationVector = new Vector2f(newYaw, newPitch); if (advancedOptions.getValueByName("Корректировка движения").get() && !silentAim.get()) { mc.player.rotationYawOffset = rotationVector.x; } } private void performAttack() { if (currentTarget == null || mc.playerController == null || mc.player == null) return; // Проверка паузы при использовании предметов if (advancedOptions.getValueByName("Пауза при использовании предметов").get() && isUsingItem()) { return; } // Проверка наведения для ротации if (!rotationType.is("Выключена")) { selectedEntity = MouseUtil.getMouseOver(currentTarget, rotationVector.x, rotationVector.y, attackRange.get()); if (advancedOptions.getValueByName("Ускорять при атаке").get()) { String currentRotationType = rotationType.get(); switch (currentRotationType) { case "Снап": // Для снапа просто обновляем (уже мгновенный) break; case "HVH Плавная": updateHvHSmoothRotation(true); break; case "HVH Снап": updateHvHSnapRotation(true); break; case "Плавная": updateSmoothRotation(true); break; } } if ((selectedEntity == null || selectedEntity != currentTarget) && !mc.player.isElytraFlying()) { return; } } else { selectedEntity = MouseUtil.getMouseOver(currentTarget, mc.player.rotationYaw, mc.player.rotationPitch, attackRange.get()); if ((selectedEntity == null || selectedEntity != currentTarget) && !mc.player.isElytraFlying()) { return; } } if (mc.player.isBlocking() && advancedOptions.getValueByName("Отжимать щиты").get()) { mc.playerController.onStoppedUsingItem(mc.player); } // Выполнение атаки try { mc.playerController.attackEntity(mc.player, currentTarget); mc.player.swingArm(Hand.MAIN_HAND); if (currentTarget instanceof PlayerEntity player && advancedOptions.getValueByName("Ломать щиты").get()) { performShieldBreak(player); } } catch (Exception e) { // Игнорирование ошибок атаки } } private boolean isUsingItem() { if (mc.player == null) return false; return mc.player.isHandActive() && mc.player.getActiveItemStack() != null && (mc.player.getActiveItemStack().getItem().isFood() || mc.player.getActiveItemStack().getItem().isDrinkable()); } private boolean canAttack() { // Проверка паузы при использовании предметов if (advancedOptions.getValueByName("Пауза при использовании предметов").get() && isUsingItem()) { return false; } if (advancedOptions.getValueByName("Только с критом").get()) { return !mc.player.isOnGround() && mc.player.fallDistance > 0; } return true; } private boolean isValidTarget(LivingEntity entity) { if (entity == null || entity instanceof ClientPlayerEntity) return false; if (mc.player == null) return false; if (entity.ticksExisted < 3) return false; if (mc.player.getDistance(entity) > attackRange.get()) return false; if (entity instanceof PlayerEntity p) { if (!targetSelection.getValueByName("Друзья").get() && FriendStorage.isFriend(p.getName().getString())) { return false; } if (p.getName().getString().equals(mc.player.getName().getString())) return false; } if (entity instanceof PlayerEntity) { if (!targetSelection.getValueByName("Игроки").get()) return false; if (entity.getTotalArmorValue() == 0 && !targetSelection.getValueByName("Без брони").get()) return false; if (entity.isInvisible() && entity.getTotalArmorValue() == 0 && !targetSelection.getValueByName("Невидимые без брони").get()) return false; if (entity.isInvisible() && !targetSelection.getValueByName("Невидимые").get()) return false; } else if (entity instanceof MonsterEntity && !targetSelection.getValueByName("Враждебные мобы").get()) { return false; } else if (entity instanceof AnimalEntity && !targetSelection.getValueByName("Мирные мобы").get()) { return false; } return !entity.isInvulnerable() && entity.isAlive() && !(entity instanceof ArmorStandEntity); } private void performShieldBreak(PlayerEntity targetPlayer) { if (!targetPlayer.isBlocking() || mc.playerController == null) return; int inventorySlot = InventoryUtil.getInstance().getAxeInInventory(false); int hotbarSlot = InventoryUtil.getInstance().getAxeInInventory(true); if (hotbarSlot == -1 && inventorySlot != -1) { int bestHotbarSlot = InventoryUtil.getInstance().findBestSlotInHotBar(); if (bestHotbarSlot == -1) return; try { mc.playerController.windowClick(0, inventorySlot, 0, ClickType.PICKUP, mc.player); mc.playerController.windowClick(0, bestHotbarSlot + 36, 0, ClickType.PICKUP, mc.player); mc.player.connection.sendPacket(new CHeldItemChangePacket(bestHotbarSlot)); mc.playerController.attackEntity(mc.player, targetPlayer); mc.player.swingArm(Hand.MAIN_HAND); mc.player.connection.sendPacket(new CHeldItemChangePacket(mc.player.inventory.currentItem)); mc.playerController.windowClick(0, bestHotbarSlot + 36, 0, ClickType.PICKUP, mc.player); mc.playerController.windowClick(0, inventorySlot, 0, ClickType.PICKUP, mc.player); } catch (Exception e) { // Игнорирование ошибок } } if (hotbarSlot != -1) { try { mc.player.connection.sendPacket(new CHeldItemChangePacket(hotbarSlot)); mc.playerController.attackEntity(mc.player, targetPlayer); mc.player.swingArm(Hand.MAIN_HAND); mc.player.connection.sendPacket(new CHeldItemChangePacket(mc.player.inventory.currentItem)); } catch (Exception e) { // Игнорирование ошибок } } } private void resetAll() { if (mc.player != null) { if (advancedOptions.getValueByName("Корректировка движения").get()) { mc.player.rotationYawOffset = Integer.MIN_VALUE; } rotationVector = new Vector2f(mc.player.rotationYaw, mc.player.rotationPitch); } randomDeviation = 0f; randomDeviationTimer = 0; attackTimer = 0; canPerformAttack = true; currentTarget = null; selectedEntity = null; isRotating = false; rotationTicks = 0; // Сброс данных снап ротации lastSnapYaw = 0; lastSnapPitch = 0; snapDelay = 0; wasSnapping = false; snapCounter = 0; snapHistory = new float[10]; snapHistoryIndex = 0; antiAimOffset = 0f; } @Override public void onEnable() { super.onEnable(); resetAll(); } @Override public void onDisable() { super.onDisable(); resetAll(); } // Методы для расчета характеристик цели private double calculateArmorValue(PlayerEntity player) { double armorTotal = 0.0; for (int i = 0; i < 4; ++i) { ItemStack armorPiece = player.inventory.armorInventory.get(i); if (!(armorPiece.getItem() instanceof ArmorItem)) continue; armorTotal += getArmorProtectionValue(armorPiece); } return armorTotal; } private double getArmorProtectionValue(ItemStack armorStack) { if (armorStack.getItem() instanceof ArmorItem armorItem) { double baseProtection = armorItem.getDamageReduceAmount(); if (armorStack.isEnchanted()) { baseProtection += (double) EnchantmentHelper.getEnchantmentLevel(Enchantments.PROTECTION, armorStack) * 0.25; } return baseProtection; } return 0; } private double calculateEffectiveHealth(LivingEntity entity) { if (entity instanceof PlayerEntity player) { return (double) (player.getHealth() + player.getAbsorptionAmount()) * (calculateArmorValue(player) / 20.0); } return entity.getHealth() + entity.getAbsorptionAmount(); } public LivingEntity getTarget() { return null; } }
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz