-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Фикс киллауры экспенсив 4.0, пишите если есть ошибки, я недавно начал кодить.
AuraModule:
package ru.expensive.implement.features.modules.combat;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import lombok.experimental.NonFinal;
import net.minecraft.entity.LivingEntity;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.util.math.Vec3d;
import ru.expensive.api.event.EventHandler;
import ru.expensive.api.feature.module.Module;
import ru.expensive.api.feature.module.ModuleCategory;
import ru.expensive.api.feature.module.setting.implement.*;
import ru.expensive.common.util.task.TaskPriority;
import ru.expensive.core.Expensive;
import ru.expensive.implement.events.player.PostRotationMovementInputEvent;
import ru.expensive.implement.events.player.TickEvent;
import ru.expensive.implement.features.commands.defaults.DebugCommand;
import ru.expensive.implement.features.modules.combat.killaura.attack.AttackHandler;
import ru.expensive.implement.features.modules.combat.killaura.attack.AttackPerpetrator;
import ru.expensive.implement.features.modules.combat.killaura.attack.ClickScheduler;
import ru.expensive.implement.features.modules.combat.killaura.attack.SprintManager;
import ru.expensive.implement.features.modules.combat.killaura.rotation.*;
import ru.expensive.implement.features.modules.combat.killaura.rotation.angle.*;
import ru.expensive.implement.features.modules.combat.killaura.target.TargetSelector;
import ru.expensive.implement.screens.menu.components.implement.window.implement.module.InfoWindow;
[USER=270918]@Getter[/USER]
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class AuraModule extends Module {
TargetSelector targetSelector = new TargetSelector();
PointFinder pointFinder = new PointFinder();
@NonFinal
LivingEntity target = null;
ValueSetting maxDistanceSetting = new ValueSetting("Макс. расстояние", "Устанавливает значение максимального расстояния поиска целей")
.setValue(3.0F).range(1.0F, 6.0F);
MultiSelectSetting targetTypeSetting = new MultiSelectSetting("Тип цели", "Фильтрует список целей по типу")
.value("Игроки", "Мобы", "Животные", "Друзья");
MultiSelectSetting attackSetting = new MultiSelectSetting("Настройка атаки", "Позволяет настроить атаку")
.value("Только критические", "Проверка трассировки", "Динамический откат", "Разбить щит", "Отжать щит");
SelectSetting correctionType = new SelectSetting("Тип коррекции", "Выбирает тип коррекции")
.value("Свободный", "Фокусированный");
GroupSetting correctionGroupSetting = new GroupSetting("Коррекция движения", "Предотвращает обнаружение античитами, чувствительными к движению.")
.settings(correctionType);
SelectSetting sprintMode = new SelectSetting("Режим бега", "Позволяет выбрать режим бега")
.value("Обход", "По умолчанию", "Нет");
SelectSetting aimMode = new SelectSetting("Время прицеливания", "Позволяет выбрать время вращения")
.value("Нормальный", "Резкий", "Один тик");
AttackPerpetrator attackPerpetrator = new AttackPerpetrator();
public AuraModule() {
super("Аура", ModuleCategory.COMBAT);
setup(maxDistanceSetting, targetTypeSetting, attackSetting, correctionGroupSetting, sprintMode, aimMode);
}
@Override
public void deactivate() {
targetSelector.releaseTarget();
target = null;
super.deactivate();
}
@EventHandler
public void onPostRotationMovementInput(PostRotationMovementInputEvent postRotationMovementInputEvent) {
target = updateTarget();
if (target != null) {
RotationController rotationController = RotationController.INSTANCE;
Vec3d attackVector = pointFinder.computeVector(target, maxDistanceSetting.getValue(), rotationController.getRotation(),
getSmoothMode().randomValue());
Angle angle = AngleUtil.fromVec3d(attackVector.subtract(mc.player.getEyePos()));
rotateToTarget(target, new Angle.VecRotation(angle, attackVector), rotationController);
}
}
@EventHandler
public void onTick(TickEvent tickEvent) {
if (target != null) {
attackTarget(target, RotationController.INSTANCE.getCurrentAngle());
TargetSelector.EntityFilter filter = new TargetSelector.EntityFilter(targetTypeSetting.getSelected());
targetSelector.searchTargets(mc.world.getEntities(), maxDistanceSetting.getValue());
targetSelector.validateTarget(filter::isValid);
}
}
private LivingEntity updateTarget() {
TargetSelector.EntityFilter filter = new TargetSelector.EntityFilter(targetTypeSetting.getSelected());
targetSelector.searchTargets(mc.world.getEntities(), maxDistanceSetting.getValue());
targetSelector.validateTarget(filter::isValid);
return targetSelector.getCurrentTarget();
}
private void attackTarget(LivingEntity target, Angle angle) {
AttackPerpetrator attackPerpetrator = Expensive.getInstance().getAttackPerpetrator();
AttackPerpetrator.AttackPerpetratorConfigurable configurable = new AttackPerpetrator.AttackPerpetratorConfigurable(
target,
RotationController.INSTANCE.getServerAngle(),
maxDistanceSetting.getValue(),
attackSetting.getSelected(),
getSprintMode()
);
if (angle != null && aimMode.isSelected("Один тик")) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(mc.player.getX(), mc.player.getY(), mc.player.getZ(),
angle.getYaw(), angle.getPitch(), mc.player.isOnGround()));
}
attackPerpetrator.performAttack(configurable);
if (angle != null && aimMode.isSelected("Один тик")) {
mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(mc.player.getX(), mc.player.getY(), mc.player.getZ(),
mc.player.getYaw(), mc.player.getPitch(), mc.player.isOnGround()));
}
}
private void rotateToTarget(LivingEntity target, Angle.VecRotation rotation, RotationController rotationController) {
RotationConfig configurable = new RotationConfig(getSmoothMode(),
DebugCommand.debug,
correctionGroupSetting.isValue(),
((SelectSetting) correctionGroupSetting.getSubSetting("Тип коррекции")).isSelected("Свободный")
);
AttackHandler attackHandler = Expensive.getInstance().getAttackPerpetrator().getAttackHandler();
ClickScheduler clickScheduler = attackHandler.getClickScheduler();
if (aimMode.isSelected("Резкий") && clickScheduler.hasTicksElapsedSinceLastClick(2)) {
return;
}
if (aimMode.isSelected("Один тик")) {
return;
}
rotationController.rotateTo(rotation, target, configurable, TaskPriority.HIGH_IMPORTANCE_1, this);
}
public SprintManager.Mode getSprintMode() {
switch (sprintMode.getSelected()) {
case "Обход" -> {
return SprintManager.Mode.BYPASS;
}
case "По умолчанию" -> {
return SprintManager.Mode.DEFAULT;
}
}
return SprintManager.Mode.NONE;
}
public AngleSmoothMode getSmoothMode() {
if (!aimMode.isSelected("Резкий")) {
switch (InfoWindow.selectSetting.getSelected()) {
case "FunTime" -> {
return new FunTimeSmoothMode();
}
case "ReallyWorld" -> {
return new ReallyWorldSmoothMode();
}
case "HolyWorld Classic" -> {
return new HolyWorldClassicSmoothMode();
}
case "HolyWorld Lite" -> {
return new HolyWorldLiteSmoothMode();
}
}
} else {
return new LinearSmoothMode();
}
return new ReallyWorldSmoothMode();
}
}