-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
дело в том что он дерганный, а мне надо чтобы он плавным был, но в то же время успевать за игроком, вот код:
Код:
package net.group.shadowcore.module.impl;
import com.google.common.eventbus.Subscribe;
import net.group.shadowcore.event.impl.EventUpdate;
import net.group.shadowcore.module.api.ModuleInfo;
import net.group.shadowcore.module.api.Module;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.math.MathHelper;
import org.lwjgl.glfw.GLFW;
@ModuleInfo(name = "AimAssist", desc = "Наводится на врага в радиусе 3-х блоков")
public class AimAssist extends Module {
private final MinecraftClient mc = MinecraftClient.getInstance();
// Параметры скорости и плавности
private static final float SMOOTHNESS = 0.1f;
private static final float MAX_ROTATION_SPEED = 360.0f;
private static final double MAX_DISTANCE = 3.0;
public AimAssist() {
setKey(GLFW.GLFW_KEY_V);
}
@Override
public void onEnable() {
super.onEnable();
}
@Override
public void onDisable() {
super.onDisable();
}
@Override
public void onTick() {
}
@Override
public void onRender2D(MatrixStack matrices) {
}
@Subscribe
public void onUpdate(EventUpdate e) {
if (mc.player == null || mc.world == null) return;
PlayerEntity target = getTarget();
if (target != null) {
double deltaX = target.getX() - mc.player.getX();
double deltaY = (target.getY() + target.getHeight() / 2.0) - (mc.player.getY() + mc.player.getEyeHeight(mc.player.getPose()));
double deltaZ = target.getZ() - mc.player.getZ();
// Вычисляем углы для поворота
float targetYaw = (float) MathHelper.wrapDegrees(Math.toDegrees(Math.atan2(deltaZ, deltaX)) - 90.0f);
float targetPitch = (float) -Math.toDegrees(Math.atan2(deltaY, Math.sqrt(deltaX * deltaX + deltaZ * deltaZ)));
mc.player.yaw = smoothTurn(mc.player.yaw, targetYaw, SMOOTHNESS, MAX_ROTATION_SPEED);
mc.player.pitch = smoothTurn(mc.player.pitch, targetPitch, SMOOTHNESS, MAX_ROTATION_SPEED);
}
}
private float smoothTurn(float current, float target, float smoothness, float maxSpeed) {
float delta = MathHelper.wrapDegrees(target - current);
float speed = Math.min(Math.abs(delta) / smoothness, maxSpeed);
if (delta > 4000) {
return current + Math.min(delta, speed);
} else {
return current + Math.max(delta, -speed);
}
}
private PlayerEntity getTarget() {
PlayerEntity closestTarget = null;
double closestDistance = Double.MAX_VALUE;
double lowestHealth = Double.MAX_VALUE;
for (PlayerEntity entity : mc.world.getPlayers()) {
if (entity != mc.player && !entity.isDead() && mc.player.canSee(entity)) {
double distance = mc.player.squaredDistanceTo(entity);
if (distance <= MAX_DISTANCE * MAX_DISTANCE) {
if (entity.getHealth() < lowestHealth) {
closestTarget = entity;
lowestHealth = entity.getHealth();
closestDistance = distance;
}
}
}
}
return closestTarget;
}
}