Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Часть функционала Aim assist 1.21.4 fabric

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Окт 2024
Сообщения
11
Реакции
0
Выберите загрузчик игры
  1. Fabric
Это моя первая тема по аим ассист на fabric 1.21.4 если будут ошибки не доработки я буду исправлять

Вот код:

Код:
Expand Collapse Copy
package pupsik;

import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.option.SimpleOption;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.entity.mob.Monster;
import net.minecraft.entity.passive.PassiveEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import org.lwjgl.glfw.GLFW;
import java.util.List;
import java.util.ArrayList;

public class PupsikAimAssist implements ClientModInitializer {
    
    private static KeyBinding guiKey;
    private static KeyBinding aimKey;
    private static boolean guiOpen = false;
    private static boolean aimActive = false;
    
    private static float aimFov = 45.0f;
    private static float aimRange = 100.0f;
    private static float aimSpeed = 8.5f;
    private static float horizontalSpeed = 9.0f;
    private static float verticalSpeed = 6.0f;
    private static float smoothing = 12.0f;
    private static boolean throughWalls = false;
    private static boolean friendlyFire = false;
    private static boolean animals = false;
    private static boolean players = true;
    private static boolean mobs = true;
    private static float verticalLimit = 2.5f;
    private static float targetSwitchDelay = 150.0f;
    private static long lastTargetTime = 0;
    private static Entity currentTarget = null;
    
    @Override
    public void onInitializeClient() {
        guiKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.pupsik.aimgui",
            GLFW.GLFW_KEY_RIGHT_SHIFT,
            "category.pupsik"
        ));
        
        aimKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.pupsik.aimkey",
            GLFW.GLFW_KEY_LEFT_ALT,
            "category.pupsik"
        ));
        
        ClientTickEvents.END_CLIENT_TICK.register(client -> {
            if (client.player == null) return;
            
            while (guiKey.wasPressed()) {
                guiOpen = !guiOpen;
            }
            
            aimActive = aimKey.isPressed();
            
            if (!aimActive) {
                currentTarget = null;
                return;
            }
            
            if (guiOpen) {
                client.setScreen(new AimGuiScreen());
                guiOpen = false;
            }
            
            Entity target = getBestTarget(client);
            if (target != null) {
                applySmoothing(client, target);
                currentTarget = target;
                lastTargetTime = System.currentTimeMillis();
            }
        });
    }
    
    private Entity getBestTarget(MinecraftClient client) {
        Vec3d playerPos = client.player.getEyePos();
        Vec3d lookVec = client.player.getRotationVec(1.0f);
        Entity bestEntity = null;
        float bestAngle = aimFov;
        
        List<Entity> entities = client.world.getEntities();
        
        for (Entity entity : entities) {
            if (entity == client.player) continue;
            if (!isValidTarget(entity)) continue;
            
            Vec3d targetPos = entity.getBoundingBox().getCenter();
            Vec3d delta = targetPos.subtract(playerPos);
            double distance = delta.length();
            
            if (distance > aimRange) continue;
            if (!throughWalls && !client.player.canSee(entity)) continue;
            
            Vec3d deltaNorm = delta.normalize();
            double dot = lookVec.dotProduct(deltaNorm);
            double angle = Math.toDegrees(Math.acos(dot));
            
            if (angle < bestAngle) {
                bestAngle = (float) angle;
                bestEntity = entity;
            }
        }
        
        if (bestEntity != null && System.currentTimeMillis() - lastTargetTime < targetSwitchDelay) {
            if (currentTarget != null && isValidTarget(currentTarget)) {
                Vec3d delta = currentTarget.getBoundingBox().getCenter().subtract(playerPos);
                if (delta.length() <= aimRange) {
                    return currentTarget;
                }
            }
        }
        
        return bestEntity;
    }
    
    private boolean isValidTarget(Entity entity) {
        if (entity instanceof LivingEntity && ((LivingEntity) entity).isDead()) return false;
        
        if (entity instanceof PlayerEntity) {
            if (!players) return false;
            if (!friendlyFire && entity == MinecraftClient.getInstance().player) return false;
        }
        
        if (entity instanceof MobEntity) {
            if (!mobs) return false;
        }
        
        if (entity instanceof PassiveEntity) {
            if (!animals) return false;
        }
        
        return true;
    }
    
    private void applySmoothing(MinecraftClient client, Entity target) {
        Vec3d targetPos = target.getBoundingBox().getCenter();
        Vec3d playerPos = client.player.getEyePos();
        Vec3d delta = targetPos.subtract(playerPos);
        
        double horizontalDistance = Math.sqrt(delta.x * delta.x + delta.z * delta.z);
        float targetYaw = (float) Math.toDegrees(Math.atan2(delta.z, delta.x)) - 90.0f;
        float targetPitch = (float) -Math.toDegrees(Math.atan2(delta.y, horizontalDistance));
        
        targetPitch = MathHelper.clamp(targetPitch, -verticalLimit, verticalLimit);
        
        float currentYaw = client.player.getYaw();
        float currentPitch = client.player.getPitch();
        
        float yawDelta = MathHelper.wrapDegrees(targetYaw - currentYaw);
        float pitchDelta = targetPitch - currentPitch;
        
        float maxYawStep = horizontalSpeed / smoothing;
        float maxPitchStep = verticalSpeed / smoothing;
        
        if (Math.abs(yawDelta) > aimFov) return;
        
        float newYaw;
        float newPitch;
        
        if (Math.abs(yawDelta) > 360.0f) {
            newYaw = currentYaw;
        } else {
            float step = Math.min(Math.abs(yawDelta), maxYawStep);
            newYaw = currentYaw + Math.signum(yawDelta) * step;
        }
        
        if (Math.abs(pitchDelta) > 90.0f) {
            newPitch = currentPitch;
        } else {
            float step = Math.min(Math.abs(pitchDelta), maxPitchStep);
            newPitch = currentPitch + Math.signum(pitchDelta) * step;
        }
        
        client.player.setYaw(newYaw);
        client.player.setPitch(newPitch);
    }
    
    private class AimGuiScreen extends Screen {
        
        private SliderWidget fovSlider;
        private SliderWidget rangeSlider;
        private SliderWidget smoothingSlider;
        private SliderWidget horizontalSlider;
        private SliderWidget verticalSlider;
        private SliderWidget verticalLimitSlider;
        
        protected AimGuiScreen() {
            super(Text.literal("Pupsik AimAssist"));
        }
        
        @Override
        protected void init() {
            int buttonWidth = 100;
            int buttonHeight = 20;
            int startX = this.width / 2 - 150;
            int startY = 40;
            int spacing = 25;
            
            fovSlider = new SliderWidget(startX, startY, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("FOV: " + String.format("%.1f", aimFov)));
                }
                
                @Override
                protected void applyValue() {
                    aimFov = (float) (this.value * 180.0);
                    if (aimFov < 5.0f) aimFov = 5.0f;
                    if (aimFov > 180.0f) aimFov = 180.0f;
                }
            };
            fovSlider.value = aimFov / 180.0;
            fovSlider.updateMessage();
            this.addDrawableChild(fovSlider);
            
            rangeSlider = new SliderWidget(startX, startY + spacing, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Range: " + String.format("%.0f", aimRange)));
                }
                
                @Override
                protected void applyValue() {
                    aimRange = (float) (this.value * 200.0 + 10.0);
                }
            };
            rangeSlider.value = (aimRange - 10.0f) / 200.0;
            rangeSlider.updateMessage();
            this.addDrawableChild(rangeSlider);
            
            smoothingSlider = new SliderWidget(startX, startY + spacing * 2, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Smoothing: " + String.format("%.1f", smoothing)));
                }
                
                @Override
                protected void applyValue() {
                    smoothing = (float) (this.value * 20.0 + 2.0);
                }
            };
            smoothingSlider.value = (smoothing - 2.0f) / 20.0;
            smoothingSlider.updateMessage();
            this.addDrawableChild(smoothingSlider);
            
            horizontalSlider = new SliderWidget(startX, startY + spacing * 3, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Horizontal Speed: " + String.format("%.1f", horizontalSpeed)));
                }
                
                @Override
                protected void applyValue() {
                    horizontalSpeed = (float) (this.value * 15.0 + 1.0);
                }
            };
            horizontalSlider.value = (horizontalSpeed - 1.0f) / 15.0;
            horizontalSlider.updateMessage();
            this.addDrawableChild(horizontalSlider);
            
            verticalSlider = new SliderWidget(startX, startY + spacing * 4, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Vertical Speed: " + String.format("%.1f", verticalSpeed)));
                }
                
                @Override
                protected void applyValue() {
                    verticalSpeed = (float) (this.value * 12.0 + 0.5);
                }
            };
            verticalSlider.value = (verticalSpeed - 0.5f) / 12.0;
            verticalSlider.updateMessage();
            this.addDrawableChild(verticalSlider);
            
            verticalLimitSlider = new SliderWidget(startX, startY + spacing * 5, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Vertical Limit: " + String.format("%.1f", verticalLimit)));
                }
                
                @Override
                protected void applyValue() {
                    verticalLimit = (float) (this.value * 10.0);
                }
            };
            verticalLimitSlider.value = verticalLimit / 10.0f;
            verticalLimitSlider.updateMessage();
            this.addDrawableChild(verticalLimitSlider);
            
            int toggleX = startX;
            int toggleY = startY + spacing * 6;
            
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Through Walls: " + (throughWalls ? "ON" : "OFF")), button -> {
                throughWalls = !throughWalls;
                button.setMessage(Text.literal("Through Walls: " + (throughWalls ? "ON" : "OFF")));
            }).dimensions(toggleX, toggleY, 140, buttonHeight).build());
            
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Friendly Fire: " + (friendlyFire ? "ON" : "OFF")), button -> {
                friendlyFire = !friendlyFire;
                button.setMessage(Text.literal("Friendly Fire: " + (friendlyFire ? "ON" : "OFF")));
            }).dimensions(toggleX + 150, toggleY, 150, buttonHeight).build());
            
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Players: " + (players ? "ON" : "OFF")), button -> {
                players = !players;
                button.setMessage(Text.literal("Players: " + (players ? "ON" : "OFF")));
            }).dimensions(toggleX, toggleY + spacing, 90, buttonHeight).build());
            
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Mobs: " + (mobs ? "ON" : "OFF")), button -> {
                mobs = !mobs;
                button.setMessage(Text.literal("Mobs: " + (mobs ? "ON" : "OFF")));
            }).dimensions(toggleX + 100, toggleY + spacing, 90, buttonHeight).build());
            
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Animals: " + (animals ? "ON" : "OFF")), button -> {
                animals = !animals;
                button.setMessage(Text.literal("Animals: " + (animals ? "ON" : "OFF")));
            }).dimensions(toggleX + 200, toggleY + spacing, 100, buttonHeight).build());
            
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Close"), button -> {
                this.close();
            }).dimensions(this.width / 2 - 50, this.height - 40, 100, buttonHeight).build());
        }
        
        @Override
        public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
            this.renderBackground(matrices);
            drawCenteredText(matrices, this.textRenderer, "Pupsik AimAssist Settings", this.width / 2, 20, 0xFFFFFF);
            super.render(matrices, mouseX, mouseY, delta);
        }
        
        @Override
        public boolean shouldCloseOnEsc() {
            return true;
        }
    }
}
 
Последнее редактирование:
Это моя первая тема по аим ассист на fabric 1.21.4 если будут ошибки не доработки я буду исправлять

Вот код:

Код:
Expand Collapse Copy
package pupsik;

import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.option.SimpleOption;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.entity.mob.Monster;
import net.minecraft.entity.passive.PassiveEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import org.lwjgl.glfw.GLFW;
import java.util.List;
import java.util.ArrayList;

public class PupsikAimAssist implements ClientModInitializer {
   
    private static KeyBinding guiKey;
    private static KeyBinding aimKey;
    private static boolean guiOpen = false;
    private static boolean aimActive = false;
   
    private static float aimFov = 45.0f;
    private static float aimRange = 100.0f;
    private static float aimSpeed = 8.5f;
    private static float horizontalSpeed = 9.0f;
    private static float verticalSpeed = 6.0f;
    private static float smoothing = 12.0f;
    private static boolean throughWalls = false;
    private static boolean friendlyFire = false;
    private static boolean animals = false;
    private static boolean players = true;
    private static boolean mobs = true;
    private static float verticalLimit = 2.5f;
    private static float targetSwitchDelay = 150.0f;
    private static long lastTargetTime = 0;
    private static Entity currentTarget = null;
   
    @Override
    public void onInitializeClient() {
        guiKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.pupsik.aimgui",
            GLFW.GLFW_KEY_RIGHT_SHIFT,
            "category.pupsik"
        ));
       
        aimKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.pupsik.aimkey",
            GLFW.GLFW_KEY_LEFT_ALT,
            "category.pupsik"
        ));
       
        ClientTickEvents.END_CLIENT_TICK.register(client -> {
            if (client.player == null) return;
           
            while (guiKey.wasPressed()) {
                guiOpen = !guiOpen;
            }
           
            aimActive = aimKey.isPressed();
           
            if (!aimActive) {
                currentTarget = null;
                return;
            }
           
            if (guiOpen) {
                client.setScreen(new AimGuiScreen());
                guiOpen = false;
            }
           
            Entity target = getBestTarget(client);
            if (target != null) {
                applySmoothing(client, target);
                currentTarget = target;
                lastTargetTime = System.currentTimeMillis();
            }
        });
    }
   
    private Entity getBestTarget(MinecraftClient client) {
        Vec3d playerPos = client.player.getEyePos();
        Vec3d lookVec = client.player.getRotationVec(1.0f);
        Entity bestEntity = null;
        float bestAngle = aimFov;
       
        List<Entity> entities = client.world.getEntities();
       
        for (Entity entity : entities) {
            if (entity == client.player) continue;
            if (!isValidTarget(entity)) continue;
           
            Vec3d targetPos = entity.getBoundingBox().getCenter();
            Vec3d delta = targetPos.subtract(playerPos);
            double distance = delta.length();
           
            if (distance > aimRange) continue;
            if (!throughWalls && !client.player.canSee(entity)) continue;
           
            Vec3d deltaNorm = delta.normalize();
            double dot = lookVec.dotProduct(deltaNorm);
            double angle = Math.toDegrees(Math.acos(dot));
           
            if (angle < bestAngle) {
                bestAngle = (float) angle;
                bestEntity = entity;
            }
        }
       
        if (bestEntity != null && System.currentTimeMillis() - lastTargetTime < targetSwitchDelay) {
            if (currentTarget != null && isValidTarget(currentTarget)) {
                Vec3d delta = currentTarget.getBoundingBox().getCenter().subtract(playerPos);
                if (delta.length() <= aimRange) {
                    return currentTarget;
                }
            }
        }
       
        return bestEntity;
    }
   
    private boolean isValidTarget(Entity entity) {
        if (entity instanceof LivingEntity && ((LivingEntity) entity).isDead()) return false;
       
        if (entity instanceof PlayerEntity) {
            if (!players) return false;
            if (!friendlyFire && entity == MinecraftClient.getInstance().player) return false;
        }
       
        if (entity instanceof MobEntity) {
            if (!mobs) return false;
        }
       
        if (entity instanceof PassiveEntity) {
            if (!animals) return false;
        }
       
        return true;
    }
   
    private void applySmoothing(MinecraftClient client, Entity target) {
        Vec3d targetPos = target.getBoundingBox().getCenter();
        Vec3d playerPos = client.player.getEyePos();
        Vec3d delta = targetPos.subtract(playerPos);
       
        double horizontalDistance = Math.sqrt(delta.x * delta.x + delta.z * delta.z);
        float targetYaw = (float) Math.toDegrees(Math.atan2(delta.z, delta.x)) - 90.0f;
        float targetPitch = (float) -Math.toDegrees(Math.atan2(delta.y, horizontalDistance));
       
        targetPitch = MathHelper.clamp(targetPitch, -verticalLimit, verticalLimit);
       
        float currentYaw = client.player.getYaw();
        float currentPitch = client.player.getPitch();
       
        float yawDelta = MathHelper.wrapDegrees(targetYaw - currentYaw);
        float pitchDelta = targetPitch - currentPitch;
       
        float maxYawStep = horizontalSpeed / smoothing;
        float maxPitchStep = verticalSpeed / smoothing;
       
        if (Math.abs(yawDelta) > aimFov) return;
       
        float newYaw;
        float newPitch;
       
        if (Math.abs(yawDelta) > 360.0f) {
            newYaw = currentYaw;
        } else {
            float step = Math.min(Math.abs(yawDelta), maxYawStep);
            newYaw = currentYaw + Math.signum(yawDelta) * step;
        }
       
        if (Math.abs(pitchDelta) > 90.0f) {
            newPitch = currentPitch;
        } else {
            float step = Math.min(Math.abs(pitchDelta), maxPitchStep);
            newPitch = currentPitch + Math.signum(pitchDelta) * step;
        }
       
        client.player.setYaw(newYaw);
        client.player.setPitch(newPitch);
    }
   
    private class AimGuiScreen extends Screen {
       
        private SliderWidget fovSlider;
        private SliderWidget rangeSlider;
        private SliderWidget smoothingSlider;
        private SliderWidget horizontalSlider;
        private SliderWidget verticalSlider;
        private SliderWidget verticalLimitSlider;
       
        protected AimGuiScreen() {
            super(Text.literal("Pupsik AimAssist"));
        }
       
        @Override
        protected void init() {
            int buttonWidth = 100;
            int buttonHeight = 20;
            int startX = this.width / 2 - 150;
            int startY = 40;
            int spacing = 25;
           
            fovSlider = new SliderWidget(startX, startY, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("FOV: " + String.format("%.1f", aimFov)));
                }
               
                @Override
                protected void applyValue() {
                    aimFov = (float) (this.value * 180.0);
                    if (aimFov < 5.0f) aimFov = 5.0f;
                    if (aimFov > 180.0f) aimFov = 180.0f;
                }
            };
            fovSlider.value = aimFov / 180.0;
            fovSlider.updateMessage();
            this.addDrawableChild(fovSlider);
           
            rangeSlider = new SliderWidget(startX, startY + spacing, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Range: " + String.format("%.0f", aimRange)));
                }
               
                @Override
                protected void applyValue() {
                    aimRange = (float) (this.value * 200.0 + 10.0);
                }
            };
            rangeSlider.value = (aimRange - 10.0f) / 200.0;
            rangeSlider.updateMessage();
            this.addDrawableChild(rangeSlider);
           
            smoothingSlider = new SliderWidget(startX, startY + spacing * 2, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Smoothing: " + String.format("%.1f", smoothing)));
                }
               
                @Override
                protected void applyValue() {
                    smoothing = (float) (this.value * 20.0 + 2.0);
                }
            };
            smoothingSlider.value = (smoothing - 2.0f) / 20.0;
            smoothingSlider.updateMessage();
            this.addDrawableChild(smoothingSlider);
           
            horizontalSlider = new SliderWidget(startX, startY + spacing * 3, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Horizontal Speed: " + String.format("%.1f", horizontalSpeed)));
                }
               
                @Override
                protected void applyValue() {
                    horizontalSpeed = (float) (this.value * 15.0 + 1.0);
                }
            };
            horizontalSlider.value = (horizontalSpeed - 1.0f) / 15.0;
            horizontalSlider.updateMessage();
            this.addDrawableChild(horizontalSlider);
           
            verticalSlider = new SliderWidget(startX, startY + spacing * 4, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Vertical Speed: " + String.format("%.1f", verticalSpeed)));
                }
               
                @Override
                protected void applyValue() {
                    verticalSpeed = (float) (this.value * 12.0 + 0.5);
                }
            };
            verticalSlider.value = (verticalSpeed - 0.5f) / 12.0;
            verticalSlider.updateMessage();
            this.addDrawableChild(verticalSlider);
           
            verticalLimitSlider = new SliderWidget(startX, startY + spacing * 5, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Vertical Limit: " + String.format("%.1f", verticalLimit)));
                }
               
                @Override
                protected void applyValue() {
                    verticalLimit = (float) (this.value * 10.0);
                }
            };
            verticalLimitSlider.value = verticalLimit / 10.0f;
            verticalLimitSlider.updateMessage();
            this.addDrawableChild(verticalLimitSlider);
           
            int toggleX = startX;
            int toggleY = startY + spacing * 6;
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Through Walls: " + (throughWalls ? "ON" : "OFF")), button -> {
                throughWalls = !throughWalls;
                button.setMessage(Text.literal("Through Walls: " + (throughWalls ? "ON" : "OFF")));
            }).dimensions(toggleX, toggleY, 140, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Friendly Fire: " + (friendlyFire ? "ON" : "OFF")), button -> {
                friendlyFire = !friendlyFire;
                button.setMessage(Text.literal("Friendly Fire: " + (friendlyFire ? "ON" : "OFF")));
            }).dimensions(toggleX + 150, toggleY, 150, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Players: " + (players ? "ON" : "OFF")), button -> {
                players = !players;
                button.setMessage(Text.literal("Players: " + (players ? "ON" : "OFF")));
            }).dimensions(toggleX, toggleY + spacing, 90, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Mobs: " + (mobs ? "ON" : "OFF")), button -> {
                mobs = !mobs;
                button.setMessage(Text.literal("Mobs: " + (mobs ? "ON" : "OFF")));
            }).dimensions(toggleX + 100, toggleY + spacing, 90, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Animals: " + (animals ? "ON" : "OFF")), button -> {
                animals = !animals;
                button.setMessage(Text.literal("Animals: " + (animals ? "ON" : "OFF")));
            }).dimensions(toggleX + 200, toggleY + spacing, 100, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Close"), button -> {
                this.close();
            }).dimensions(this.width / 2 - 50, this.height - 40, 100, buttonHeight).build());
        }
       
        @Override
        public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
            this.renderBackground(matrices);
            drawCenteredText(matrices, this.textRenderer, "Pupsik AimAssist Settings", this.width / 2, 20, 0xFFFFFF);
            super.render(matrices, mouseX, mouseY, delta);
        }
       
        @Override
        public boolean shouldCloseOnEsc() {
            return true;
        }
    }
}
/del
 
Эт пздц..
Люди на форум заходят, как в тт или шортсы 😭🙏

1775731823995.png
 
Это моя первая тема по аим ассист на fabric 1.21.4 если будут ошибки не доработки я буду исправлять

Вот код:

Код:
Expand Collapse Copy
package pupsik;

import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.option.SimpleOption;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.entity.mob.Monster;
import net.minecraft.entity.passive.PassiveEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import org.lwjgl.glfw.GLFW;
import java.util.List;
import java.util.ArrayList;

public class PupsikAimAssist implements ClientModInitializer {
   
    private static KeyBinding guiKey;
    private static KeyBinding aimKey;
    private static boolean guiOpen = false;
    private static boolean aimActive = false;
   
    private static float aimFov = 45.0f;
    private static float aimRange = 100.0f;
    private static float aimSpeed = 8.5f;
    private static float horizontalSpeed = 9.0f;
    private static float verticalSpeed = 6.0f;
    private static float smoothing = 12.0f;
    private static boolean throughWalls = false;
    private static boolean friendlyFire = false;
    private static boolean animals = false;
    private static boolean players = true;
    private static boolean mobs = true;
    private static float verticalLimit = 2.5f;
    private static float targetSwitchDelay = 150.0f;
    private static long lastTargetTime = 0;
    private static Entity currentTarget = null;
   
    @Override
    public void onInitializeClient() {
        guiKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.pupsik.aimgui",
            GLFW.GLFW_KEY_RIGHT_SHIFT,
            "category.pupsik"
        ));
       
        aimKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.pupsik.aimkey",
            GLFW.GLFW_KEY_LEFT_ALT,
            "category.pupsik"
        ));
       
        ClientTickEvents.END_CLIENT_TICK.register(client -> {
            if (client.player == null) return;
           
            while (guiKey.wasPressed()) {
                guiOpen = !guiOpen;
            }
           
            aimActive = aimKey.isPressed();
           
            if (!aimActive) {
                currentTarget = null;
                return;
            }
           
            if (guiOpen) {
                client.setScreen(new AimGuiScreen());
                guiOpen = false;
            }
           
            Entity target = getBestTarget(client);
            if (target != null) {
                applySmoothing(client, target);
                currentTarget = target;
                lastTargetTime = System.currentTimeMillis();
            }
        });
    }
   
    private Entity getBestTarget(MinecraftClient client) {
        Vec3d playerPos = client.player.getEyePos();
        Vec3d lookVec = client.player.getRotationVec(1.0f);
        Entity bestEntity = null;
        float bestAngle = aimFov;
       
        List<Entity> entities = client.world.getEntities();
       
        for (Entity entity : entities) {
            if (entity == client.player) continue;
            if (!isValidTarget(entity)) continue;
           
            Vec3d targetPos = entity.getBoundingBox().getCenter();
            Vec3d delta = targetPos.subtract(playerPos);
            double distance = delta.length();
           
            if (distance > aimRange) continue;
            if (!throughWalls && !client.player.canSee(entity)) continue;
           
            Vec3d deltaNorm = delta.normalize();
            double dot = lookVec.dotProduct(deltaNorm);
            double angle = Math.toDegrees(Math.acos(dot));
           
            if (angle < bestAngle) {
                bestAngle = (float) angle;
                bestEntity = entity;
            }
        }
       
        if (bestEntity != null && System.currentTimeMillis() - lastTargetTime < targetSwitchDelay) {
            if (currentTarget != null && isValidTarget(currentTarget)) {
                Vec3d delta = currentTarget.getBoundingBox().getCenter().subtract(playerPos);
                if (delta.length() <= aimRange) {
                    return currentTarget;
                }
            }
        }
       
        return bestEntity;
    }
   
    private boolean isValidTarget(Entity entity) {
        if (entity instanceof LivingEntity && ((LivingEntity) entity).isDead()) return false;
       
        if (entity instanceof PlayerEntity) {
            if (!players) return false;
            if (!friendlyFire && entity == MinecraftClient.getInstance().player) return false;
        }
       
        if (entity instanceof MobEntity) {
            if (!mobs) return false;
        }
       
        if (entity instanceof PassiveEntity) {
            if (!animals) return false;
        }
       
        return true;
    }
   
    private void applySmoothing(MinecraftClient client, Entity target) {
        Vec3d targetPos = target.getBoundingBox().getCenter();
        Vec3d playerPos = client.player.getEyePos();
        Vec3d delta = targetPos.subtract(playerPos);
       
        double horizontalDistance = Math.sqrt(delta.x * delta.x + delta.z * delta.z);
        float targetYaw = (float) Math.toDegrees(Math.atan2(delta.z, delta.x)) - 90.0f;
        float targetPitch = (float) -Math.toDegrees(Math.atan2(delta.y, horizontalDistance));
       
        targetPitch = MathHelper.clamp(targetPitch, -verticalLimit, verticalLimit);
       
        float currentYaw = client.player.getYaw();
        float currentPitch = client.player.getPitch();
       
        float yawDelta = MathHelper.wrapDegrees(targetYaw - currentYaw);
        float pitchDelta = targetPitch - currentPitch;
       
        float maxYawStep = horizontalSpeed / smoothing;
        float maxPitchStep = verticalSpeed / smoothing;
       
        if (Math.abs(yawDelta) > aimFov) return;
       
        float newYaw;
        float newPitch;
       
        if (Math.abs(yawDelta) > 360.0f) {
            newYaw = currentYaw;
        } else {
            float step = Math.min(Math.abs(yawDelta), maxYawStep);
            newYaw = currentYaw + Math.signum(yawDelta) * step;
        }
       
        if (Math.abs(pitchDelta) > 90.0f) {
            newPitch = currentPitch;
        } else {
            float step = Math.min(Math.abs(pitchDelta), maxPitchStep);
            newPitch = currentPitch + Math.signum(pitchDelta) * step;
        }
       
        client.player.setYaw(newYaw);
        client.player.setPitch(newPitch);
    }
   
    private class AimGuiScreen extends Screen {
       
        private SliderWidget fovSlider;
        private SliderWidget rangeSlider;
        private SliderWidget smoothingSlider;
        private SliderWidget horizontalSlider;
        private SliderWidget verticalSlider;
        private SliderWidget verticalLimitSlider;
       
        protected AimGuiScreen() {
            super(Text.literal("Pupsik AimAssist"));
        }
       
        @Override
        protected void init() {
            int buttonWidth = 100;
            int buttonHeight = 20;
            int startX = this.width / 2 - 150;
            int startY = 40;
            int spacing = 25;
           
            fovSlider = new SliderWidget(startX, startY, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("FOV: " + String.format("%.1f", aimFov)));
                }
               
                @Override
                protected void applyValue() {
                    aimFov = (float) (this.value * 180.0);
                    if (aimFov < 5.0f) aimFov = 5.0f;
                    if (aimFov > 180.0f) aimFov = 180.0f;
                }
            };
            fovSlider.value = aimFov / 180.0;
            fovSlider.updateMessage();
            this.addDrawableChild(fovSlider);
           
            rangeSlider = new SliderWidget(startX, startY + spacing, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Range: " + String.format("%.0f", aimRange)));
                }
               
                @Override
                protected void applyValue() {
                    aimRange = (float) (this.value * 200.0 + 10.0);
                }
            };
            rangeSlider.value = (aimRange - 10.0f) / 200.0;
            rangeSlider.updateMessage();
            this.addDrawableChild(rangeSlider);
           
            smoothingSlider = new SliderWidget(startX, startY + spacing * 2, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Smoothing: " + String.format("%.1f", smoothing)));
                }
               
                @Override
                protected void applyValue() {
                    smoothing = (float) (this.value * 20.0 + 2.0);
                }
            };
            smoothingSlider.value = (smoothing - 2.0f) / 20.0;
            smoothingSlider.updateMessage();
            this.addDrawableChild(smoothingSlider);
           
            horizontalSlider = new SliderWidget(startX, startY + spacing * 3, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Horizontal Speed: " + String.format("%.1f", horizontalSpeed)));
                }
               
                @Override
                protected void applyValue() {
                    horizontalSpeed = (float) (this.value * 15.0 + 1.0);
                }
            };
            horizontalSlider.value = (horizontalSpeed - 1.0f) / 15.0;
            horizontalSlider.updateMessage();
            this.addDrawableChild(horizontalSlider);
           
            verticalSlider = new SliderWidget(startX, startY + spacing * 4, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Vertical Speed: " + String.format("%.1f", verticalSpeed)));
                }
               
                @Override
                protected void applyValue() {
                    verticalSpeed = (float) (this.value * 12.0 + 0.5);
                }
            };
            verticalSlider.value = (verticalSpeed - 0.5f) / 12.0;
            verticalSlider.updateMessage();
            this.addDrawableChild(verticalSlider);
           
            verticalLimitSlider = new SliderWidget(startX, startY + spacing * 5, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Vertical Limit: " + String.format("%.1f", verticalLimit)));
                }
               
                @Override
                protected void applyValue() {
                    verticalLimit = (float) (this.value * 10.0);
                }
            };
            verticalLimitSlider.value = verticalLimit / 10.0f;
            verticalLimitSlider.updateMessage();
            this.addDrawableChild(verticalLimitSlider);
           
            int toggleX = startX;
            int toggleY = startY + spacing * 6;
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Through Walls: " + (throughWalls ? "ON" : "OFF")), button -> {
                throughWalls = !throughWalls;
                button.setMessage(Text.literal("Through Walls: " + (throughWalls ? "ON" : "OFF")));
            }).dimensions(toggleX, toggleY, 140, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Friendly Fire: " + (friendlyFire ? "ON" : "OFF")), button -> {
                friendlyFire = !friendlyFire;
                button.setMessage(Text.literal("Friendly Fire: " + (friendlyFire ? "ON" : "OFF")));
            }).dimensions(toggleX + 150, toggleY, 150, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Players: " + (players ? "ON" : "OFF")), button -> {
                players = !players;
                button.setMessage(Text.literal("Players: " + (players ? "ON" : "OFF")));
            }).dimensions(toggleX, toggleY + spacing, 90, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Mobs: " + (mobs ? "ON" : "OFF")), button -> {
                mobs = !mobs;
                button.setMessage(Text.literal("Mobs: " + (mobs ? "ON" : "OFF")));
            }).dimensions(toggleX + 100, toggleY + spacing, 90, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Animals: " + (animals ? "ON" : "OFF")), button -> {
                animals = !animals;
                button.setMessage(Text.literal("Animals: " + (animals ? "ON" : "OFF")));
            }).dimensions(toggleX + 200, toggleY + spacing, 100, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Close"), button -> {
                this.close();
            }).dimensions(this.width / 2 - 50, this.height - 40, 100, buttonHeight).build());
        }
       
        @Override
        public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
            this.renderBackground(matrices);
            drawCenteredText(matrices, this.textRenderer, "Pupsik AimAssist Settings", this.width / 2, 20, 0xFFFFFF);
            super.render(matrices, mouseX, mouseY, delta);
        }
       
        @Override
        public boolean shouldCloseOnEsc() {
            return true;
        }
    }
}
когда что то выкладываешь пиши "это сделала нейросеть ,не судите строго" :pepe2:
 
Это моя первая тема по аим ассист на fabric 1.21.4 если будут ошибки не доработки я буду исправлять

Вот код:

Код:
Expand Collapse Copy
package pupsik;

import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.option.SimpleOption;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.entity.mob.Monster;
import net.minecraft.entity.passive.PassiveEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import org.lwjgl.glfw.GLFW;
import java.util.List;
import java.util.ArrayList;

public class PupsikAimAssist implements ClientModInitializer {
   
    private static KeyBinding guiKey;
    private static KeyBinding aimKey;
    private static boolean guiOpen = false;
    private static boolean aimActive = false;
   
    private static float aimFov = 45.0f;
    private static float aimRange = 100.0f;
    private static float aimSpeed = 8.5f;
    private static float horizontalSpeed = 9.0f;
    private static float verticalSpeed = 6.0f;
    private static float smoothing = 12.0f;
    private static boolean throughWalls = false;
    private static boolean friendlyFire = false;
    private static boolean animals = false;
    private static boolean players = true;
    private static boolean mobs = true;
    private static float verticalLimit = 2.5f;
    private static float targetSwitchDelay = 150.0f;
    private static long lastTargetTime = 0;
    private static Entity currentTarget = null;
   
    @Override
    public void onInitializeClient() {
        guiKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.pupsik.aimgui",
            GLFW.GLFW_KEY_RIGHT_SHIFT,
            "category.pupsik"
        ));
       
        aimKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
            "key.pupsik.aimkey",
            GLFW.GLFW_KEY_LEFT_ALT,
            "category.pupsik"
        ));
       
        ClientTickEvents.END_CLIENT_TICK.register(client -> {
            if (client.player == null) return;
           
            while (guiKey.wasPressed()) {
                guiOpen = !guiOpen;
            }
           
            aimActive = aimKey.isPressed();
           
            if (!aimActive) {
                currentTarget = null;
                return;
            }
           
            if (guiOpen) {
                client.setScreen(new AimGuiScreen());
                guiOpen = false;
            }
           
            Entity target = getBestTarget(client);
            if (target != null) {
                applySmoothing(client, target);
                currentTarget = target;
                lastTargetTime = System.currentTimeMillis();
            }
        });
    }
   
    private Entity getBestTarget(MinecraftClient client) {
        Vec3d playerPos = client.player.getEyePos();
        Vec3d lookVec = client.player.getRotationVec(1.0f);
        Entity bestEntity = null;
        float bestAngle = aimFov;
       
        List<Entity> entities = client.world.getEntities();
       
        for (Entity entity : entities) {
            if (entity == client.player) continue;
            if (!isValidTarget(entity)) continue;
           
            Vec3d targetPos = entity.getBoundingBox().getCenter();
            Vec3d delta = targetPos.subtract(playerPos);
            double distance = delta.length();
           
            if (distance > aimRange) continue;
            if (!throughWalls && !client.player.canSee(entity)) continue;
           
            Vec3d deltaNorm = delta.normalize();
            double dot = lookVec.dotProduct(deltaNorm);
            double angle = Math.toDegrees(Math.acos(dot));
           
            if (angle < bestAngle) {
                bestAngle = (float) angle;
                bestEntity = entity;
            }
        }
       
        if (bestEntity != null && System.currentTimeMillis() - lastTargetTime < targetSwitchDelay) {
            if (currentTarget != null && isValidTarget(currentTarget)) {
                Vec3d delta = currentTarget.getBoundingBox().getCenter().subtract(playerPos);
                if (delta.length() <= aimRange) {
                    return currentTarget;
                }
            }
        }
       
        return bestEntity;
    }
   
    private boolean isValidTarget(Entity entity) {
        if (entity instanceof LivingEntity && ((LivingEntity) entity).isDead()) return false;
       
        if (entity instanceof PlayerEntity) {
            if (!players) return false;
            if (!friendlyFire && entity == MinecraftClient.getInstance().player) return false;
        }
       
        if (entity instanceof MobEntity) {
            if (!mobs) return false;
        }
       
        if (entity instanceof PassiveEntity) {
            if (!animals) return false;
        }
       
        return true;
    }
   
    private void applySmoothing(MinecraftClient client, Entity target) {
        Vec3d targetPos = target.getBoundingBox().getCenter();
        Vec3d playerPos = client.player.getEyePos();
        Vec3d delta = targetPos.subtract(playerPos);
       
        double horizontalDistance = Math.sqrt(delta.x * delta.x + delta.z * delta.z);
        float targetYaw = (float) Math.toDegrees(Math.atan2(delta.z, delta.x)) - 90.0f;
        float targetPitch = (float) -Math.toDegrees(Math.atan2(delta.y, horizontalDistance));
       
        targetPitch = MathHelper.clamp(targetPitch, -verticalLimit, verticalLimit);
       
        float currentYaw = client.player.getYaw();
        float currentPitch = client.player.getPitch();
       
        float yawDelta = MathHelper.wrapDegrees(targetYaw - currentYaw);
        float pitchDelta = targetPitch - currentPitch;
       
        float maxYawStep = horizontalSpeed / smoothing;
        float maxPitchStep = verticalSpeed / smoothing;
       
        if (Math.abs(yawDelta) > aimFov) return;
       
        float newYaw;
        float newPitch;
       
        if (Math.abs(yawDelta) > 360.0f) {
            newYaw = currentYaw;
        } else {
            float step = Math.min(Math.abs(yawDelta), maxYawStep);
            newYaw = currentYaw + Math.signum(yawDelta) * step;
        }
       
        if (Math.abs(pitchDelta) > 90.0f) {
            newPitch = currentPitch;
        } else {
            float step = Math.min(Math.abs(pitchDelta), maxPitchStep);
            newPitch = currentPitch + Math.signum(pitchDelta) * step;
        }
       
        client.player.setYaw(newYaw);
        client.player.setPitch(newPitch);
    }
   
    private class AimGuiScreen extends Screen {
       
        private SliderWidget fovSlider;
        private SliderWidget rangeSlider;
        private SliderWidget smoothingSlider;
        private SliderWidget horizontalSlider;
        private SliderWidget verticalSlider;
        private SliderWidget verticalLimitSlider;
       
        protected AimGuiScreen() {
            super(Text.literal("Pupsik AimAssist"));
        }
       
        @Override
        protected void init() {
            int buttonWidth = 100;
            int buttonHeight = 20;
            int startX = this.width / 2 - 150;
            int startY = 40;
            int spacing = 25;
           
            fovSlider = new SliderWidget(startX, startY, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("FOV: " + String.format("%.1f", aimFov)));
                }
               
                @Override
                protected void applyValue() {
                    aimFov = (float) (this.value * 180.0);
                    if (aimFov < 5.0f) aimFov = 5.0f;
                    if (aimFov > 180.0f) aimFov = 180.0f;
                }
            };
            fovSlider.value = aimFov / 180.0;
            fovSlider.updateMessage();
            this.addDrawableChild(fovSlider);
           
            rangeSlider = new SliderWidget(startX, startY + spacing, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Range: " + String.format("%.0f", aimRange)));
                }
               
                @Override
                protected void applyValue() {
                    aimRange = (float) (this.value * 200.0 + 10.0);
                }
            };
            rangeSlider.value = (aimRange - 10.0f) / 200.0;
            rangeSlider.updateMessage();
            this.addDrawableChild(rangeSlider);
           
            smoothingSlider = new SliderWidget(startX, startY + spacing * 2, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Smoothing: " + String.format("%.1f", smoothing)));
                }
               
                @Override
                protected void applyValue() {
                    smoothing = (float) (this.value * 20.0 + 2.0);
                }
            };
            smoothingSlider.value = (smoothing - 2.0f) / 20.0;
            smoothingSlider.updateMessage();
            this.addDrawableChild(smoothingSlider);
           
            horizontalSlider = new SliderWidget(startX, startY + spacing * 3, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Horizontal Speed: " + String.format("%.1f", horizontalSpeed)));
                }
               
                @Override
                protected void applyValue() {
                    horizontalSpeed = (float) (this.value * 15.0 + 1.0);
                }
            };
            horizontalSlider.value = (horizontalSpeed - 1.0f) / 15.0;
            horizontalSlider.updateMessage();
            this.addDrawableChild(horizontalSlider);
           
            verticalSlider = new SliderWidget(startX, startY + spacing * 4, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Vertical Speed: " + String.format("%.1f", verticalSpeed)));
                }
               
                @Override
                protected void applyValue() {
                    verticalSpeed = (float) (this.value * 12.0 + 0.5);
                }
            };
            verticalSlider.value = (verticalSpeed - 0.5f) / 12.0;
            verticalSlider.updateMessage();
            this.addDrawableChild(verticalSlider);
           
            verticalLimitSlider = new SliderWidget(startX, startY + spacing * 5, 300, buttonHeight, Text.literal(""), 0.0) {
                @Override
                protected void updateMessage() {
                    this.setMessage(Text.literal("Vertical Limit: " + String.format("%.1f", verticalLimit)));
                }
               
                @Override
                protected void applyValue() {
                    verticalLimit = (float) (this.value * 10.0);
                }
            };
            verticalLimitSlider.value = verticalLimit / 10.0f;
            verticalLimitSlider.updateMessage();
            this.addDrawableChild(verticalLimitSlider);
           
            int toggleX = startX;
            int toggleY = startY + spacing * 6;
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Through Walls: " + (throughWalls ? "ON" : "OFF")), button -> {
                throughWalls = !throughWalls;
                button.setMessage(Text.literal("Through Walls: " + (throughWalls ? "ON" : "OFF")));
            }).dimensions(toggleX, toggleY, 140, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Friendly Fire: " + (friendlyFire ? "ON" : "OFF")), button -> {
                friendlyFire = !friendlyFire;
                button.setMessage(Text.literal("Friendly Fire: " + (friendlyFire ? "ON" : "OFF")));
            }).dimensions(toggleX + 150, toggleY, 150, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Players: " + (players ? "ON" : "OFF")), button -> {
                players = !players;
                button.setMessage(Text.literal("Players: " + (players ? "ON" : "OFF")));
            }).dimensions(toggleX, toggleY + spacing, 90, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Mobs: " + (mobs ? "ON" : "OFF")), button -> {
                mobs = !mobs;
                button.setMessage(Text.literal("Mobs: " + (mobs ? "ON" : "OFF")));
            }).dimensions(toggleX + 100, toggleY + spacing, 90, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Animals: " + (animals ? "ON" : "OFF")), button -> {
                animals = !animals;
                button.setMessage(Text.literal("Animals: " + (animals ? "ON" : "OFF")));
            }).dimensions(toggleX + 200, toggleY + spacing, 100, buttonHeight).build());
           
            this.addDrawableChild(ButtonWidget.builder(Text.literal("Close"), button -> {
                this.close();
            }).dimensions(this.width / 2 - 50, this.height - 40, 100, buttonHeight).build());
        }
       
        @Override
        public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
            this.renderBackground(matrices);
            drawCenteredText(matrices, this.textRenderer, "Pupsik AimAssist Settings", this.width / 2, 20, 0xFFFFFF);
            super.render(matrices, mouseX, mouseY, delta);
        }
       
        @Override
        public boolean shouldCloseOnEsc() {
            return true;
        }
    }
}
/del no ss, что он вообще обходит, сказал бы
 
/del, ненужная штука так еще и из киро идеа xD
Ох да забыл киро и другие ии не умеют писать софт тебе а если умеют то покажика видео которые где наглядно пишут)
 
Назад
Сверху Снизу