Вот реализации указанных функций для Minecraft 1.16.5 Forge:
### 1. Аим трезубца и лука (Excellent ReCode)
public class AimAssist {
private static final float TRIDENT_AIM_FACTOR = 0.15F;
private static final float BOW_AIM_FACTOR = 0.1F;
public static void onPlayerUpdate(PlayerEvent.LivingUpdateEvent event) {
if (!(event.getEntity() instanceof PlayerEntity)) return;
PlayerEntity player = (PlayerEntity) event.getEntity();
if (player.getMainHandItem().getItem() instanceof TridentItem) {
adjustAim(player, TRIDENT_AIM_FACTOR);
} else if (player.getMainHandItem().getItem() instanceof BowItem) {
adjustAim(player, BOW_AIM_FACTOR);
}
}
private static void adjustAim(PlayerEntity player, float factor) {
Entity target = findTarget(player, 5.0F);
if (target != null) {
double deltaX = target.getX() - player.getX();
double deltaZ = target.getZ() - player.getZ();
double deltaY = target.getY() + target.getEyeHeight() - (player.getY() + player.getEyeHeight());
double horizontalDistance = Math.sqrt(deltaX * deltaX + deltaZ * deltaZ);
float targetYaw = (float) Math.toDegrees(Math.atan2(deltaZ, deltaX)) - 90F;
float targetPitch = (float) -Math.toDegrees(Math.atan2(deltaY, horizontalDistance));
player.yRot += (targetYaw - player.yRot) * factor;
player.xRot += (targetPitch - player.xRot) * factor;
}
}
private static Entity findTarget(PlayerEntity player, float range) {
// Реализация поиска цели (можно использовать RayTrace или другие методы)
return null; // Заглушка
}
}
### 2. Плавный FPS с помощью лерпа
public class SmoothFPS {
private static int targetFPS = 60;
private static int currentFPS = 60;
private static long lastUpdateTime = 0;
public static void update() {
long currentTime = System.currentTimeMillis();
if (lastUpdateTime == 0) {
lastUpdateTime = currentTime;
return;
}
long delta = currentTime - lastUpdateTime;
lastUpdateTime = currentTime;
int actualFPS = delta > 0 ? (int) (1000 / delta) : targetFPS;
currentFPS = (int) lerp(currentFPS, actualFPS, 0.1F);
}
public static int getSmoothedFPS() {
return currentFPS;
}
private static float lerp(float a, float b, float f) {
return a + f * (b - a);
}
}
### 3. Стрейфы (Excellent ReCode)
public class StrafeHelper {
public static void onMovementInput(InputUpdateEvent event) {
if (!(event.getEntity() instanceof PlayerEntity)) return;
PlayerEntity player = (PlayerEntity) event.getEntity();
if (player.input.left || player.input.right) {
float strafeSpeed = 0.2F;
float forward = player.input.up ? 1.0F : (player.input.down ? -1.0F : 0.0F);
float strafe = player.input.left ? -1.0F : (player.input.right ? 1.0F : 0.0F);
float yaw = player.yRot;
if (forward != 0) {
if (strafe > 0) {
yaw += (forward > 0 ? -45 : 45);
} else if (strafe < 0) {
yaw += (forward > 0 ? 45 : -45);
}
strafe = 0;
if (forward > 0) {
forward = 1.0F;
} else if (forward < 0) {
forward = -1.0F;
}
}
double rad = Math.toRadians(yaw);
double sin = Math.sin(rad);
double cos = Math.cos(rad);
player.setDeltaMovement(
player.getDeltaMovement().x + (strafe * cos - forward * sin) * strafeSpeed,
player.getDeltaMovement().y,
player.getDeltaMovement().z + (forward * cos + strafe * sin) * strafeSpeed
);
}
}
}
### 4. Target ESP (все базы)
public class TargetESP {
public static void render(RenderWorldLastEvent event) {
Minecraft mc = Minecraft.getInstance();
if (mc.player == null) return;
Entity target = findClosestTarget(mc.player, 50.0D);
if (target != null) {
renderESP(target, event.getMatrixStack(), event.getPartialTicks());
}
}
private static void renderESP(Entity entity, MatrixStack matrixStack, float partialTicks) {
// Реализация отрисовки ESP (бокс, трассировка и т.д.)
}
private static Entity findClosestTarget(PlayerEntity player, double range) {
// Реализация поиска ближайшей цели
return null; // Заглушка
}
}
### 5. Таймер (Excellent ReCode)
public class Timer {
private static long lastTime = 0;
private static float speed = 1.0F;
public static void update() {
if (lastTime == 0) {
lastTime = System.nanoTime();
return;
}
long currentTime = System.nanoTime();
long delta = currentTime - lastTime;
lastTime = currentTime;
// Изменение скорости игры
if (speed != 1.0F) {
Minecraft.getInstance().getFrameTimer().recordFrameTime((long) (delta * speed));
}
}
public static void setSpeed(float newSpeed) {
speed = newSpeed;
}
}
### 6. Выбор тем и изменение альфы ректов
public class ThemeManager {
public static enum Theme {
DARK(0xFF121212, 0xFF454545),
LIGHT(0xFFFFFFFF, 0xFFDDDDDD),
BLUE(0xFF1A1A2E, 0xFF16213E);
public final int backgroundColor;
public final int elementColor;
Theme(int bg, int el) {
this.backgroundColor = bg;
this.elementColor = el;
}
}
private static Theme currentTheme = Theme.DARK;
private static float rectAlpha = 0.7F;
public static void setTheme(Theme theme) {
currentTheme = theme;
}
public static void setRectAlpha(float alpha) {
rectAlpha = MathHelper.clamp(alpha, 0.0F, 1.0F);
}
public static int getBackgroundColor() {
return (currentTheme.backgroundColor & 0x00FFFFFF) | ((int)(rectAlpha * 255) << 24);
}
public static int getElementColor() {
return (currentTheme.elementColor & 0x00FFFFFF) | ((int)(rectAlpha * 255) << 24);
}
}
Для использования этих функций нужно зарегистрировать соответствующие обработчики событий в вашем моде. Пример регистрации:
@Mod.EventBusSubscriber
public class EventHandler {
[USER=1561317]@SubscribeEvent[/USER]
public static void onUpdate(LivingUpdateEvent event) {
AimAssist.onPlayerUpdate(event);
}
[USER=1561317]@SubscribeEvent[/USER]
public static void onRender(RenderWorldLastEvent event) {
TargetESP.render(event);
}
[USER=1561317]@SubscribeEvent[/USER]
public static void onInput(InputUpdateEvent event) {
StrafeHelper.onMovementInput(event);
}
}
Не забудьте добавить необходимые импорты и зависимости в ваш проект.