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

Визуальная часть Numb | EvaWare v3

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
16 Мар 2024
Сообщения
19
Реакции
0
Выберите загрузчик игры
  1. Fabric
простенький Numb сделанный за 5 минут с ии
Пожалуйста, авторизуйтесь для просмотра ссылки.

Java:
Expand Collapse Copy
package sweetie.Zero.client.features.modules.render;

import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import lombok.Getter;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.render.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.RotationAxis;
import net.minecraft.util.math.Vec3d;
import org.joml.Matrix4f;
import sweetie.Zero.api.event.EventListener;
import sweetie.Zero.api.event.Listener;
import sweetie.Zero.api.event.events.render.Render3DEvent;
import sweetie.Zero.api.module.Category;
import sweetie.Zero.api.module.Module;
import sweetie.Zero.api.module.ModuleRegister;
import sweetie.Zero.api.module.setting.BooleanSetting;
import sweetie.Zero.api.module.setting.ModeSetting;
import sweetie.Zero.api.module.setting.SliderSetting;
import sweetie.Zero.api.system.files.FileUtil;
import sweetie.Zero.api.utils.animation.AnimationUtil;
import sweetie.Zero.api.utils.animation.Easing;
import sweetie.Zero.api.utils.color.ColorUtil;
import sweetie.Zero.api.utils.color.UIColors;
import sweetie.Zero.api.utils.math.MathUtil;

import java.awt.*;

@ModuleRegister(name = "Numb", category = Category.RENDER)
public class NumbModule extends Module {
    @Getter private static final NumbModule instance = new NumbModule();

    private final ModeSetting mode          = new ModeSetting("Mode").value("Ring").values("Ring", "Crown", "Pulse");
    private final SliderSetting height      = new SliderSetting("Height").value(0.22f).range(0f, 0.6f).step(0.01f);
    private final SliderSetting radius      = new SliderSetting("Radius").value(0.28f).range(0.05f, 0.6f).step(0.01f);
    private final SliderSetting glowSize    = new SliderSetting("Glow size").value(0.18f).range(0.04f, 0.5f).step(0.01f);
    private final SliderSetting speed       = new SliderSetting("Speed").value(1.0f).range(0.2f, 4f).step(0.1f);
    private final SliderSetting opacity     = new SliderSetting("Opacity").value(0.85f).range(0.1f, 1f).step(0.05f);
    private final BooleanSetting self       = new BooleanSetting("Render self").value(true);
    private final BooleanSetting firstPerson = new BooleanSetting("1st person").value(false)
            .setVisible(() -> self.getValue());
    private final BooleanSetting others     = new BooleanSetting("Render others").value(false);

    private final SliderSetting particles   = new SliderSetting("Particles").value(12f).range(4f, 32f).step(1f)
            .setVisible(() -> mode.is("Ring"));
    private final SliderSetting rays        = new SliderSetting("Rays").value(5f).range(3f, 9f).step(1f)
            .setVisible(() -> mode.is("Crown"));
    private final SliderSetting rayHeight   = new SliderSetting("Ray height").value(0.35f).range(0.1f, 0.8f).step(0.05f)
            .setVisible(() -> mode.is("Crown"));

    private double angle = 0.0;
    private final AnimationUtil enableAnim = new AnimationUtil();

    public NumbModule() {
        addSettings(mode, height, radius, glowSize, speed, opacity, self, firstPerson, others, particles, rays, rayHeight);
    }

    @Override
    public void onEnable() {
        angle = 0.0;
        enableAnim.setValue(0.0);
    }

    @Override
    public void toggle() {
        super.toggle();
        if (!isEnabled()) enableAnim.run(0.0, 300, Easing.QUINT_OUT);
    }

    @Override
    public void onEvent() {
        EventListener renderEvent = Render3DEvent.getInstance().subscribe(new Listener<>(event -> {
            if (mc.world == null) return;

            enableAnim.update();
            if (isEnabled() && enableAnim.getValue() < 1.0)
                enableAnim.run(1.0, 500, Easing.QUINT_OUT);

            float appear = (float) enableAnim.getValue();
            if (appear < 0.01f) return;

            angle += 0.04 * speed.getValue();

            MatrixStack ms = event.matrixStack();
            float pt = event.partialTicks();

            // true если сейчас вид от первого лица
            boolean isFirstPerson = mc.options.getPerspective().isFirstPerson();

            for (PlayerEntity player : mc.world.getPlayers()) {
                if (player == mc.player) {
                    if (!self.getValue()) continue;
                    // если вид от первого лица и настройка "1st person" выключена — пропускаем
                    if (isFirstPerson && !firstPerson.getValue()) continue;
                }
                if (player != mc.player && !others.getValue()) continue;
                if (player.isInvisible()) continue;

                renderNumb(ms, player, pt, appear);
            }
        }));

        addEvents(renderEvent);
    }

    private void renderNumb(MatrixStack ms, PlayerEntity player, float pt, float appear) {
        Vec3d cam = mc.getEntityRenderDispatcher().camera.getPos();
        double px = MathUtil.interpolate(player.prevX, player.getX(), pt);
        double py = MathUtil.interpolate(player.prevY, player.getY(), pt);
        double pz = MathUtil.interpolate(player.prevZ, player.getZ(), pt);

        double haloY = py + player.getHeight() + height.getValue() * appear;

        setupGlState();

        switch (mode.getValue()) {
            case "Ring"  -> renderRing(ms, cam, px, haloY, pz, appear);
            case "Crown" -> renderCrown(ms, cam, px, haloY, pz, appear);
            case "Pulse" -> renderPulse(ms, cam, px, haloY, pz, appear);
        }

        restoreGlState();
    }

    private void renderRing(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int count = particles.getValue().intValue();
        float r   = radius.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        for (int i = 0; i < count; i++) {
            double a  = angle + (Math.PI * 2.0 / count) * i;
            double or = r * (i % 2 == 0 ? 1.0 : 0.6);
            float  os = sz * (i % 2 == 0 ? 1.0f : 0.65f);

            double wx = cx + Math.sin(a) * or;
            double wz = cz + Math.cos(a) * or;

            int colorIdx = (int)(((double) i / count) * 360) + (int)(angle * 30);
            Color c1 = ColorUtil.setAlpha(UIColors.gradient(colorIdx),      (int)(255 * opc * appear));
            Color c2 = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 60), (int)(180 * opc * appear * 0.5f));

            drawBillboard(ms, cam, wx, cy, wz, os,        c1);
            drawBillboard(ms, cam, wx, cy, wz, os * 1.8f, c2);
        }
    }

    private void renderCrown(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int n     = rays.getValue().intValue();
        float r   = radius.getValue() * appear;
        float rh  = rayHeight.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        float pulse = 0.75f + 0.25f * (float) Math.sin(angle * 2.5);

        for (int i = 0; i < n; i++) {
            double a  = (Math.PI * 2.0 / n) * i;
            double wx = cx + Math.sin(a) * r;
            double wz = cz + Math.cos(a) * r;

            int colorIdx = (int)(((double) i / n) * 360);
            Color base = UIColors.gradient(colorIdx);

            Color cBase = ColorUtil.setAlpha(base, (int)(200 * opc * appear));
            drawBillboard(ms, cam, wx, cy, wz, sz * 0.9f, cBase);

            double tipY  = cy + rh * pulse;
            Color cTip   = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 120), (int)(255 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * pulse, cTip);

            Color cGlow  = ColorUtil.setAlpha(base, (int)(120 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * 2.0f * pulse, cGlow);
        }
    }

    private void renderPulse(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        float opc = opacity.getValue();

        for (int layer = 0; layer < 3; layer++) {
            double phase = angle * 1.8 + layer * (Math.PI * 2.0 / 3.0);
            float pulse  = 0.6f + 0.4f * (float) Math.sin(phase);
            float sz     = glowSize.getValue() * appear * (1.0f + layer * 0.6f) * pulse;

            int colorIdx = (int)(angle * 40) + layer * 120;
            int alpha    = (int)(255 * opc * appear * (1.0f - layer * 0.25f) * pulse);
            Color c = ColorUtil.setAlpha(UIColors.gradient(colorIdx), alpha);

            drawBillboard(ms, cam, cx, cy, cz, sz, c);
        }
    }

    private void setupGlState() {
        RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX_COLOR);
        RenderSystem.setShaderTexture(0, FileUtil.getImage("particles/glow"));
        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();
        RenderSystem.disableDepthTest();
        RenderSystem.depthMask(false);
    }

    private void restoreGlState() {
        RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA);
        RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
    }

    private void drawBillboard(MatrixStack stack, Vec3d cam,
                               double wx, double wy, double wz,
                               float size, Color color) {
        stack.push();
        stack.translate(wx - cam.x, wy - cam.y, wz - cam.z);

        Camera camera = mc.gameRenderer.getCamera();
        stack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw() + 180.0f));
        stack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(-camera.getPitch() + 180.0f));

        Matrix4f matrix = stack.peek().getPositionMatrix();
        float[]  c      = ColorUtil.normalize(color);

        BufferBuilder buf = Tessellator.getInstance()
                .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);

        buf.vertex(matrix, -size,  size, 0).texture(0f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size,  size, 0).texture(1f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size, -size, 0).texture(1f, 0f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix, -size, -size, 0).texture(0f, 0f).color(c[0], c[1], c[2], c[3]);

        BufferRenderer.drawWithGlobalProgram(buf.end());
        stack.pop();
    }
}
 
простенький Numb сделанный за 5 минут с ии
Пожалуйста, авторизуйтесь для просмотра ссылки.

Java:
Expand Collapse Copy
package sweetie.Zero.client.features.modules.render;

import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import lombok.Getter;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.render.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.RotationAxis;
import net.minecraft.util.math.Vec3d;
import org.joml.Matrix4f;
import sweetie.Zero.api.event.EventListener;
import sweetie.Zero.api.event.Listener;
import sweetie.Zero.api.event.events.render.Render3DEvent;
import sweetie.Zero.api.module.Category;
import sweetie.Zero.api.module.Module;
import sweetie.Zero.api.module.ModuleRegister;
import sweetie.Zero.api.module.setting.BooleanSetting;
import sweetie.Zero.api.module.setting.ModeSetting;
import sweetie.Zero.api.module.setting.SliderSetting;
import sweetie.Zero.api.system.files.FileUtil;
import sweetie.Zero.api.utils.animation.AnimationUtil;
import sweetie.Zero.api.utils.animation.Easing;
import sweetie.Zero.api.utils.color.ColorUtil;
import sweetie.Zero.api.utils.color.UIColors;
import sweetie.Zero.api.utils.math.MathUtil;

import java.awt.*;

@ModuleRegister(name = "Numb", category = Category.RENDER)
public class NumbModule extends Module {
    @Getter private static final NumbModule instance = new NumbModule();

    private final ModeSetting mode          = new ModeSetting("Mode").value("Ring").values("Ring", "Crown", "Pulse");
    private final SliderSetting height      = new SliderSetting("Height").value(0.22f).range(0f, 0.6f).step(0.01f);
    private final SliderSetting radius      = new SliderSetting("Radius").value(0.28f).range(0.05f, 0.6f).step(0.01f);
    private final SliderSetting glowSize    = new SliderSetting("Glow size").value(0.18f).range(0.04f, 0.5f).step(0.01f);
    private final SliderSetting speed       = new SliderSetting("Speed").value(1.0f).range(0.2f, 4f).step(0.1f);
    private final SliderSetting opacity     = new SliderSetting("Opacity").value(0.85f).range(0.1f, 1f).step(0.05f);
    private final BooleanSetting self       = new BooleanSetting("Render self").value(true);
    private final BooleanSetting firstPerson = new BooleanSetting("1st person").value(false)
            .setVisible(() -> self.getValue());
    private final BooleanSetting others     = new BooleanSetting("Render others").value(false);

    private final SliderSetting particles   = new SliderSetting("Particles").value(12f).range(4f, 32f).step(1f)
            .setVisible(() -> mode.is("Ring"));
    private final SliderSetting rays        = new SliderSetting("Rays").value(5f).range(3f, 9f).step(1f)
            .setVisible(() -> mode.is("Crown"));
    private final SliderSetting rayHeight   = new SliderSetting("Ray height").value(0.35f).range(0.1f, 0.8f).step(0.05f)
            .setVisible(() -> mode.is("Crown"));

    private double angle = 0.0;
    private final AnimationUtil enableAnim = new AnimationUtil();

    public NumbModule() {
        addSettings(mode, height, radius, glowSize, speed, opacity, self, firstPerson, others, particles, rays, rayHeight);
    }

    @Override
    public void onEnable() {
        angle = 0.0;
        enableAnim.setValue(0.0);
    }

    @Override
    public void toggle() {
        super.toggle();
        if (!isEnabled()) enableAnim.run(0.0, 300, Easing.QUINT_OUT);
    }

    @Override
    public void onEvent() {
        EventListener renderEvent = Render3DEvent.getInstance().subscribe(new Listener<>(event -> {
            if (mc.world == null) return;

            enableAnim.update();
            if (isEnabled() && enableAnim.getValue() < 1.0)
                enableAnim.run(1.0, 500, Easing.QUINT_OUT);

            float appear = (float) enableAnim.getValue();
            if (appear < 0.01f) return;

            angle += 0.04 * speed.getValue();

            MatrixStack ms = event.matrixStack();
            float pt = event.partialTicks();

            // true если сейчас вид от первого лица
            boolean isFirstPerson = mc.options.getPerspective().isFirstPerson();

            for (PlayerEntity player : mc.world.getPlayers()) {
                if (player == mc.player) {
                    if (!self.getValue()) continue;
                    // если вид от первого лица и настройка "1st person" выключена — пропускаем
                    if (isFirstPerson && !firstPerson.getValue()) continue;
                }
                if (player != mc.player && !others.getValue()) continue;
                if (player.isInvisible()) continue;

                renderNumb(ms, player, pt, appear);
            }
        }));

        addEvents(renderEvent);
    }

    private void renderNumb(MatrixStack ms, PlayerEntity player, float pt, float appear) {
        Vec3d cam = mc.getEntityRenderDispatcher().camera.getPos();
        double px = MathUtil.interpolate(player.prevX, player.getX(), pt);
        double py = MathUtil.interpolate(player.prevY, player.getY(), pt);
        double pz = MathUtil.interpolate(player.prevZ, player.getZ(), pt);

        double haloY = py + player.getHeight() + height.getValue() * appear;

        setupGlState();

        switch (mode.getValue()) {
            case "Ring"  -> renderRing(ms, cam, px, haloY, pz, appear);
            case "Crown" -> renderCrown(ms, cam, px, haloY, pz, appear);
            case "Pulse" -> renderPulse(ms, cam, px, haloY, pz, appear);
        }

        restoreGlState();
    }

    private void renderRing(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int count = particles.getValue().intValue();
        float r   = radius.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        for (int i = 0; i < count; i++) {
            double a  = angle + (Math.PI * 2.0 / count) * i;
            double or = r * (i % 2 == 0 ? 1.0 : 0.6);
            float  os = sz * (i % 2 == 0 ? 1.0f : 0.65f);

            double wx = cx + Math.sin(a) * or;
            double wz = cz + Math.cos(a) * or;

            int colorIdx = (int)(((double) i / count) * 360) + (int)(angle * 30);
            Color c1 = ColorUtil.setAlpha(UIColors.gradient(colorIdx),      (int)(255 * opc * appear));
            Color c2 = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 60), (int)(180 * opc * appear * 0.5f));

            drawBillboard(ms, cam, wx, cy, wz, os,        c1);
            drawBillboard(ms, cam, wx, cy, wz, os * 1.8f, c2);
        }
    }

    private void renderCrown(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int n     = rays.getValue().intValue();
        float r   = radius.getValue() * appear;
        float rh  = rayHeight.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        float pulse = 0.75f + 0.25f * (float) Math.sin(angle * 2.5);

        for (int i = 0; i < n; i++) {
            double a  = (Math.PI * 2.0 / n) * i;
            double wx = cx + Math.sin(a) * r;
            double wz = cz + Math.cos(a) * r;

            int colorIdx = (int)(((double) i / n) * 360);
            Color base = UIColors.gradient(colorIdx);

            Color cBase = ColorUtil.setAlpha(base, (int)(200 * opc * appear));
            drawBillboard(ms, cam, wx, cy, wz, sz * 0.9f, cBase);

            double tipY  = cy + rh * pulse;
            Color cTip   = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 120), (int)(255 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * pulse, cTip);

            Color cGlow  = ColorUtil.setAlpha(base, (int)(120 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * 2.0f * pulse, cGlow);
        }
    }

    private void renderPulse(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        float opc = opacity.getValue();

        for (int layer = 0; layer < 3; layer++) {
            double phase = angle * 1.8 + layer * (Math.PI * 2.0 / 3.0);
            float pulse  = 0.6f + 0.4f * (float) Math.sin(phase);
            float sz     = glowSize.getValue() * appear * (1.0f + layer * 0.6f) * pulse;

            int colorIdx = (int)(angle * 40) + layer * 120;
            int alpha    = (int)(255 * opc * appear * (1.0f - layer * 0.25f) * pulse);
            Color c = ColorUtil.setAlpha(UIColors.gradient(colorIdx), alpha);

            drawBillboard(ms, cam, cx, cy, cz, sz, c);
        }
    }

    private void setupGlState() {
        RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX_COLOR);
        RenderSystem.setShaderTexture(0, FileUtil.getImage("particles/glow"));
        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();
        RenderSystem.disableDepthTest();
        RenderSystem.depthMask(false);
    }

    private void restoreGlState() {
        RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA);
        RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
    }

    private void drawBillboard(MatrixStack stack, Vec3d cam,
                               double wx, double wy, double wz,
                               float size, Color color) {
        stack.push();
        stack.translate(wx - cam.x, wy - cam.y, wz - cam.z);

        Camera camera = mc.gameRenderer.getCamera();
        stack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw() + 180.0f));
        stack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(-camera.getPitch() + 180.0f));

        Matrix4f matrix = stack.peek().getPositionMatrix();
        float[]  c      = ColorUtil.normalize(color);

        BufferBuilder buf = Tessellator.getInstance()
                .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);

        buf.vertex(matrix, -size,  size, 0).texture(0f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size,  size, 0).texture(1f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size, -size, 0).texture(1f, 0f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix, -size, -size, 0).texture(0f, 0f).color(c[0], c[1], c[2], c[3]);

        BufferRenderer.drawWithGlobalProgram(buf.end());
        stack.pop();
    }
}
как будто хуйня
 
простенький Numb сделанный за 5 минут с ии
Пожалуйста, авторизуйтесь для просмотра ссылки.

Java:
Expand Collapse Copy
package sweetie.Zero.client.features.modules.render;

import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import lombok.Getter;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.render.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.RotationAxis;
import net.minecraft.util.math.Vec3d;
import org.joml.Matrix4f;
import sweetie.Zero.api.event.EventListener;
import sweetie.Zero.api.event.Listener;
import sweetie.Zero.api.event.events.render.Render3DEvent;
import sweetie.Zero.api.module.Category;
import sweetie.Zero.api.module.Module;
import sweetie.Zero.api.module.ModuleRegister;
import sweetie.Zero.api.module.setting.BooleanSetting;
import sweetie.Zero.api.module.setting.ModeSetting;
import sweetie.Zero.api.module.setting.SliderSetting;
import sweetie.Zero.api.system.files.FileUtil;
import sweetie.Zero.api.utils.animation.AnimationUtil;
import sweetie.Zero.api.utils.animation.Easing;
import sweetie.Zero.api.utils.color.ColorUtil;
import sweetie.Zero.api.utils.color.UIColors;
import sweetie.Zero.api.utils.math.MathUtil;

import java.awt.*;

@ModuleRegister(name = "Numb", category = Category.RENDER)
public class NumbModule extends Module {
    @Getter private static final NumbModule instance = new NumbModule();

    private final ModeSetting mode          = new ModeSetting("Mode").value("Ring").values("Ring", "Crown", "Pulse");
    private final SliderSetting height      = new SliderSetting("Height").value(0.22f).range(0f, 0.6f).step(0.01f);
    private final SliderSetting radius      = new SliderSetting("Radius").value(0.28f).range(0.05f, 0.6f).step(0.01f);
    private final SliderSetting glowSize    = new SliderSetting("Glow size").value(0.18f).range(0.04f, 0.5f).step(0.01f);
    private final SliderSetting speed       = new SliderSetting("Speed").value(1.0f).range(0.2f, 4f).step(0.1f);
    private final SliderSetting opacity     = new SliderSetting("Opacity").value(0.85f).range(0.1f, 1f).step(0.05f);
    private final BooleanSetting self       = new BooleanSetting("Render self").value(true);
    private final BooleanSetting firstPerson = new BooleanSetting("1st person").value(false)
            .setVisible(() -> self.getValue());
    private final BooleanSetting others     = new BooleanSetting("Render others").value(false);

    private final SliderSetting particles   = new SliderSetting("Particles").value(12f).range(4f, 32f).step(1f)
            .setVisible(() -> mode.is("Ring"));
    private final SliderSetting rays        = new SliderSetting("Rays").value(5f).range(3f, 9f).step(1f)
            .setVisible(() -> mode.is("Crown"));
    private final SliderSetting rayHeight   = new SliderSetting("Ray height").value(0.35f).range(0.1f, 0.8f).step(0.05f)
            .setVisible(() -> mode.is("Crown"));

    private double angle = 0.0;
    private final AnimationUtil enableAnim = new AnimationUtil();

    public NumbModule() {
        addSettings(mode, height, radius, glowSize, speed, opacity, self, firstPerson, others, particles, rays, rayHeight);
    }

    @Override
    public void onEnable() {
        angle = 0.0;
        enableAnim.setValue(0.0);
    }

    @Override
    public void toggle() {
        super.toggle();
        if (!isEnabled()) enableAnim.run(0.0, 300, Easing.QUINT_OUT);
    }

    @Override
    public void onEvent() {
        EventListener renderEvent = Render3DEvent.getInstance().subscribe(new Listener<>(event -> {
            if (mc.world == null) return;

            enableAnim.update();
            if (isEnabled() && enableAnim.getValue() < 1.0)
                enableAnim.run(1.0, 500, Easing.QUINT_OUT);

            float appear = (float) enableAnim.getValue();
            if (appear < 0.01f) return;

            angle += 0.04 * speed.getValue();

            MatrixStack ms = event.matrixStack();
            float pt = event.partialTicks();

            // true если сейчас вид от первого лица
            boolean isFirstPerson = mc.options.getPerspective().isFirstPerson();

            for (PlayerEntity player : mc.world.getPlayers()) {
                if (player == mc.player) {
                    if (!self.getValue()) continue;
                    // если вид от первого лица и настройка "1st person" выключена — пропускаем
                    if (isFirstPerson && !firstPerson.getValue()) continue;
                }
                if (player != mc.player && !others.getValue()) continue;
                if (player.isInvisible()) continue;

                renderNumb(ms, player, pt, appear);
            }
        }));

        addEvents(renderEvent);
    }

    private void renderNumb(MatrixStack ms, PlayerEntity player, float pt, float appear) {
        Vec3d cam = mc.getEntityRenderDispatcher().camera.getPos();
        double px = MathUtil.interpolate(player.prevX, player.getX(), pt);
        double py = MathUtil.interpolate(player.prevY, player.getY(), pt);
        double pz = MathUtil.interpolate(player.prevZ, player.getZ(), pt);

        double haloY = py + player.getHeight() + height.getValue() * appear;

        setupGlState();

        switch (mode.getValue()) {
            case "Ring"  -> renderRing(ms, cam, px, haloY, pz, appear);
            case "Crown" -> renderCrown(ms, cam, px, haloY, pz, appear);
            case "Pulse" -> renderPulse(ms, cam, px, haloY, pz, appear);
        }

        restoreGlState();
    }

    private void renderRing(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int count = particles.getValue().intValue();
        float r   = radius.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        for (int i = 0; i < count; i++) {
            double a  = angle + (Math.PI * 2.0 / count) * i;
            double or = r * (i % 2 == 0 ? 1.0 : 0.6);
            float  os = sz * (i % 2 == 0 ? 1.0f : 0.65f);

            double wx = cx + Math.sin(a) * or;
            double wz = cz + Math.cos(a) * or;

            int colorIdx = (int)(((double) i / count) * 360) + (int)(angle * 30);
            Color c1 = ColorUtil.setAlpha(UIColors.gradient(colorIdx),      (int)(255 * opc * appear));
            Color c2 = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 60), (int)(180 * opc * appear * 0.5f));

            drawBillboard(ms, cam, wx, cy, wz, os,        c1);
            drawBillboard(ms, cam, wx, cy, wz, os * 1.8f, c2);
        }
    }

    private void renderCrown(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int n     = rays.getValue().intValue();
        float r   = radius.getValue() * appear;
        float rh  = rayHeight.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        float pulse = 0.75f + 0.25f * (float) Math.sin(angle * 2.5);

        for (int i = 0; i < n; i++) {
            double a  = (Math.PI * 2.0 / n) * i;
            double wx = cx + Math.sin(a) * r;
            double wz = cz + Math.cos(a) * r;

            int colorIdx = (int)(((double) i / n) * 360);
            Color base = UIColors.gradient(colorIdx);

            Color cBase = ColorUtil.setAlpha(base, (int)(200 * opc * appear));
            drawBillboard(ms, cam, wx, cy, wz, sz * 0.9f, cBase);

            double tipY  = cy + rh * pulse;
            Color cTip   = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 120), (int)(255 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * pulse, cTip);

            Color cGlow  = ColorUtil.setAlpha(base, (int)(120 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * 2.0f * pulse, cGlow);
        }
    }

    private void renderPulse(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        float opc = opacity.getValue();

        for (int layer = 0; layer < 3; layer++) {
            double phase = angle * 1.8 + layer * (Math.PI * 2.0 / 3.0);
            float pulse  = 0.6f + 0.4f * (float) Math.sin(phase);
            float sz     = glowSize.getValue() * appear * (1.0f + layer * 0.6f) * pulse;

            int colorIdx = (int)(angle * 40) + layer * 120;
            int alpha    = (int)(255 * opc * appear * (1.0f - layer * 0.25f) * pulse);
            Color c = ColorUtil.setAlpha(UIColors.gradient(colorIdx), alpha);

            drawBillboard(ms, cam, cx, cy, cz, sz, c);
        }
    }

    private void setupGlState() {
        RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX_COLOR);
        RenderSystem.setShaderTexture(0, FileUtil.getImage("particles/glow"));
        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();
        RenderSystem.disableDepthTest();
        RenderSystem.depthMask(false);
    }

    private void restoreGlState() {
        RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA);
        RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
    }

    private void drawBillboard(MatrixStack stack, Vec3d cam,
                               double wx, double wy, double wz,
                               float size, Color color) {
        stack.push();
        stack.translate(wx - cam.x, wy - cam.y, wz - cam.z);

        Camera camera = mc.gameRenderer.getCamera();
        stack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw() + 180.0f));
        stack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(-camera.getPitch() + 180.0f));

        Matrix4f matrix = stack.peek().getPositionMatrix();
        float[]  c      = ColorUtil.normalize(color);

        BufferBuilder buf = Tessellator.getInstance()
                .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);

        buf.vertex(matrix, -size,  size, 0).texture(0f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size,  size, 0).texture(1f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size, -size, 0).texture(1f, 0f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix, -size, -size, 0).texture(0f, 0f).color(c[0], c[1], c[2], c[3]);

        BufferRenderer.drawWithGlobalProgram(buf.end());
        stack.pop();
    }
}
сука какой же это пиздец
 
главный фрик форума решил свое лицо в твоем сообщении поставить. Есть вариант всем форумом его ногами забить?

1777368643874.png
 
простенький Numb сделанный за 5 минут с ии
Пожалуйста, авторизуйтесь для просмотра ссылки.

Java:
Expand Collapse Copy
package sweetie.Zero.client.features.modules.render;

import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import lombok.Getter;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.render.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.RotationAxis;
import net.minecraft.util.math.Vec3d;
import org.joml.Matrix4f;
import sweetie.Zero.api.event.EventListener;
import sweetie.Zero.api.event.Listener;
import sweetie.Zero.api.event.events.render.Render3DEvent;
import sweetie.Zero.api.module.Category;
import sweetie.Zero.api.module.Module;
import sweetie.Zero.api.module.ModuleRegister;
import sweetie.Zero.api.module.setting.BooleanSetting;
import sweetie.Zero.api.module.setting.ModeSetting;
import sweetie.Zero.api.module.setting.SliderSetting;
import sweetie.Zero.api.system.files.FileUtil;
import sweetie.Zero.api.utils.animation.AnimationUtil;
import sweetie.Zero.api.utils.animation.Easing;
import sweetie.Zero.api.utils.color.ColorUtil;
import sweetie.Zero.api.utils.color.UIColors;
import sweetie.Zero.api.utils.math.MathUtil;

import java.awt.*;

@ModuleRegister(name = "Numb", category = Category.RENDER)
public class NumbModule extends Module {
    @Getter private static final NumbModule instance = new NumbModule();

    private final ModeSetting mode          = new ModeSetting("Mode").value("Ring").values("Ring", "Crown", "Pulse");
    private final SliderSetting height      = new SliderSetting("Height").value(0.22f).range(0f, 0.6f).step(0.01f);
    private final SliderSetting radius      = new SliderSetting("Radius").value(0.28f).range(0.05f, 0.6f).step(0.01f);
    private final SliderSetting glowSize    = new SliderSetting("Glow size").value(0.18f).range(0.04f, 0.5f).step(0.01f);
    private final SliderSetting speed       = new SliderSetting("Speed").value(1.0f).range(0.2f, 4f).step(0.1f);
    private final SliderSetting opacity     = new SliderSetting("Opacity").value(0.85f).range(0.1f, 1f).step(0.05f);
    private final BooleanSetting self       = new BooleanSetting("Render self").value(true);
    private final BooleanSetting firstPerson = new BooleanSetting("1st person").value(false)
            .setVisible(() -> self.getValue());
    private final BooleanSetting others     = new BooleanSetting("Render others").value(false);

    private final SliderSetting particles   = new SliderSetting("Particles").value(12f).range(4f, 32f).step(1f)
            .setVisible(() -> mode.is("Ring"));
    private final SliderSetting rays        = new SliderSetting("Rays").value(5f).range(3f, 9f).step(1f)
            .setVisible(() -> mode.is("Crown"));
    private final SliderSetting rayHeight   = new SliderSetting("Ray height").value(0.35f).range(0.1f, 0.8f).step(0.05f)
            .setVisible(() -> mode.is("Crown"));

    private double angle = 0.0;
    private final AnimationUtil enableAnim = new AnimationUtil();

    public NumbModule() {
        addSettings(mode, height, radius, glowSize, speed, opacity, self, firstPerson, others, particles, rays, rayHeight);
    }

    @Override
    public void onEnable() {
        angle = 0.0;
        enableAnim.setValue(0.0);
    }

    @Override
    public void toggle() {
        super.toggle();
        if (!isEnabled()) enableAnim.run(0.0, 300, Easing.QUINT_OUT);
    }

    @Override
    public void onEvent() {
        EventListener renderEvent = Render3DEvent.getInstance().subscribe(new Listener<>(event -> {
            if (mc.world == null) return;

            enableAnim.update();
            if (isEnabled() && enableAnim.getValue() < 1.0)
                enableAnim.run(1.0, 500, Easing.QUINT_OUT);

            float appear = (float) enableAnim.getValue();
            if (appear < 0.01f) return;

            angle += 0.04 * speed.getValue();

            MatrixStack ms = event.matrixStack();
            float pt = event.partialTicks();

            // true если сейчас вид от первого лица
            boolean isFirstPerson = mc.options.getPerspective().isFirstPerson();

            for (PlayerEntity player : mc.world.getPlayers()) {
                if (player == mc.player) {
                    if (!self.getValue()) continue;
                    // если вид от первого лица и настройка "1st person" выключена — пропускаем
                    if (isFirstPerson && !firstPerson.getValue()) continue;
                }
                if (player != mc.player && !others.getValue()) continue;
                if (player.isInvisible()) continue;

                renderNumb(ms, player, pt, appear);
            }
        }));

        addEvents(renderEvent);
    }

    private void renderNumb(MatrixStack ms, PlayerEntity player, float pt, float appear) {
        Vec3d cam = mc.getEntityRenderDispatcher().camera.getPos();
        double px = MathUtil.interpolate(player.prevX, player.getX(), pt);
        double py = MathUtil.interpolate(player.prevY, player.getY(), pt);
        double pz = MathUtil.interpolate(player.prevZ, player.getZ(), pt);

        double haloY = py + player.getHeight() + height.getValue() * appear;

        setupGlState();

        switch (mode.getValue()) {
            case "Ring"  -> renderRing(ms, cam, px, haloY, pz, appear);
            case "Crown" -> renderCrown(ms, cam, px, haloY, pz, appear);
            case "Pulse" -> renderPulse(ms, cam, px, haloY, pz, appear);
        }

        restoreGlState();
    }

    private void renderRing(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int count = particles.getValue().intValue();
        float r   = radius.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        for (int i = 0; i < count; i++) {
            double a  = angle + (Math.PI * 2.0 / count) * i;
            double or = r * (i % 2 == 0 ? 1.0 : 0.6);
            float  os = sz * (i % 2 == 0 ? 1.0f : 0.65f);

            double wx = cx + Math.sin(a) * or;
            double wz = cz + Math.cos(a) * or;

            int colorIdx = (int)(((double) i / count) * 360) + (int)(angle * 30);
            Color c1 = ColorUtil.setAlpha(UIColors.gradient(colorIdx),      (int)(255 * opc * appear));
            Color c2 = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 60), (int)(180 * opc * appear * 0.5f));

            drawBillboard(ms, cam, wx, cy, wz, os,        c1);
            drawBillboard(ms, cam, wx, cy, wz, os * 1.8f, c2);
        }
    }

    private void renderCrown(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int n     = rays.getValue().intValue();
        float r   = radius.getValue() * appear;
        float rh  = rayHeight.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        float pulse = 0.75f + 0.25f * (float) Math.sin(angle * 2.5);

        for (int i = 0; i < n; i++) {
            double a  = (Math.PI * 2.0 / n) * i;
            double wx = cx + Math.sin(a) * r;
            double wz = cz + Math.cos(a) * r;

            int colorIdx = (int)(((double) i / n) * 360);
            Color base = UIColors.gradient(colorIdx);

            Color cBase = ColorUtil.setAlpha(base, (int)(200 * opc * appear));
            drawBillboard(ms, cam, wx, cy, wz, sz * 0.9f, cBase);

            double tipY  = cy + rh * pulse;
            Color cTip   = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 120), (int)(255 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * pulse, cTip);

            Color cGlow  = ColorUtil.setAlpha(base, (int)(120 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * 2.0f * pulse, cGlow);
        }
    }

    private void renderPulse(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        float opc = opacity.getValue();

        for (int layer = 0; layer < 3; layer++) {
            double phase = angle * 1.8 + layer * (Math.PI * 2.0 / 3.0);
            float pulse  = 0.6f + 0.4f * (float) Math.sin(phase);
            float sz     = glowSize.getValue() * appear * (1.0f + layer * 0.6f) * pulse;

            int colorIdx = (int)(angle * 40) + layer * 120;
            int alpha    = (int)(255 * opc * appear * (1.0f - layer * 0.25f) * pulse);
            Color c = ColorUtil.setAlpha(UIColors.gradient(colorIdx), alpha);

            drawBillboard(ms, cam, cx, cy, cz, sz, c);
        }
    }

    private void setupGlState() {
        RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX_COLOR);
        RenderSystem.setShaderTexture(0, FileUtil.getImage("particles/glow"));
        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();
        RenderSystem.disableDepthTest();
        RenderSystem.depthMask(false);
    }

    private void restoreGlState() {
        RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA);
        RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
    }

    private void drawBillboard(MatrixStack stack, Vec3d cam,
                               double wx, double wy, double wz,
                               float size, Color color) {
        stack.push();
        stack.translate(wx - cam.x, wy - cam.y, wz - cam.z);

        Camera camera = mc.gameRenderer.getCamera();
        stack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw() + 180.0f));
        stack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(-camera.getPitch() + 180.0f));

        Matrix4f matrix = stack.peek().getPositionMatrix();
        float[]  c      = ColorUtil.normalize(color);

        BufferBuilder buf = Tessellator.getInstance()
                .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);

        buf.vertex(matrix, -size,  size, 0).texture(0f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size,  size, 0).texture(1f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size, -size, 0).texture(1f, 0f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix, -size, -size, 0).texture(0f, 0f).color(c[0], c[1], c[2], c[3]);

        BufferRenderer.drawWithGlobalProgram(buf.end());
        stack.pop();
    }
}
спасибо тупа
 
главный фрик форума решил свое лицо в твоем сообщении поставить. Есть вариант всем форумом его ногами забить?

Посмотреть вложение 334456
Привет, почему я считаюсь фриком форума? Тема - откровенное дерьмо. Зачем выкладывать что-то, сделанное ИИ, да ещё и реализованное убого? Что насчёт "запинать всем форумом" - уверен, найдутся люди, которые плюнут тебе в лицо. Ты никто. Для начала обоснуй причину своей обиды. Пока что в тебе я вижу лишь обидчивую суку. Есть претензии? Расскажи их моему члену.
 
Последнее редактирование:
простенький Numb сделанный за 5 минут с ии
Пожалуйста, авторизуйтесь для просмотра ссылки.

Java:
Expand Collapse Copy
package sweetie.Zero.client.features.modules.render;

import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import lombok.Getter;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.render.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.RotationAxis;
import net.minecraft.util.math.Vec3d;
import org.joml.Matrix4f;
import sweetie.Zero.api.event.EventListener;
import sweetie.Zero.api.event.Listener;
import sweetie.Zero.api.event.events.render.Render3DEvent;
import sweetie.Zero.api.module.Category;
import sweetie.Zero.api.module.Module;
import sweetie.Zero.api.module.ModuleRegister;
import sweetie.Zero.api.module.setting.BooleanSetting;
import sweetie.Zero.api.module.setting.ModeSetting;
import sweetie.Zero.api.module.setting.SliderSetting;
import sweetie.Zero.api.system.files.FileUtil;
import sweetie.Zero.api.utils.animation.AnimationUtil;
import sweetie.Zero.api.utils.animation.Easing;
import sweetie.Zero.api.utils.color.ColorUtil;
import sweetie.Zero.api.utils.color.UIColors;
import sweetie.Zero.api.utils.math.MathUtil;

import java.awt.*;

@ModuleRegister(name = "Numb", category = Category.RENDER)
public class NumbModule extends Module {
    @Getter private static final NumbModule instance = new NumbModule();

    private final ModeSetting mode          = new ModeSetting("Mode").value("Ring").values("Ring", "Crown", "Pulse");
    private final SliderSetting height      = new SliderSetting("Height").value(0.22f).range(0f, 0.6f).step(0.01f);
    private final SliderSetting radius      = new SliderSetting("Radius").value(0.28f).range(0.05f, 0.6f).step(0.01f);
    private final SliderSetting glowSize    = new SliderSetting("Glow size").value(0.18f).range(0.04f, 0.5f).step(0.01f);
    private final SliderSetting speed       = new SliderSetting("Speed").value(1.0f).range(0.2f, 4f).step(0.1f);
    private final SliderSetting opacity     = new SliderSetting("Opacity").value(0.85f).range(0.1f, 1f).step(0.05f);
    private final BooleanSetting self       = new BooleanSetting("Render self").value(true);
    private final BooleanSetting firstPerson = new BooleanSetting("1st person").value(false)
            .setVisible(() -> self.getValue());
    private final BooleanSetting others     = new BooleanSetting("Render others").value(false);

    private final SliderSetting particles   = new SliderSetting("Particles").value(12f).range(4f, 32f).step(1f)
            .setVisible(() -> mode.is("Ring"));
    private final SliderSetting rays        = new SliderSetting("Rays").value(5f).range(3f, 9f).step(1f)
            .setVisible(() -> mode.is("Crown"));
    private final SliderSetting rayHeight   = new SliderSetting("Ray height").value(0.35f).range(0.1f, 0.8f).step(0.05f)
            .setVisible(() -> mode.is("Crown"));

    private double angle = 0.0;
    private final AnimationUtil enableAnim = new AnimationUtil();

    public NumbModule() {
        addSettings(mode, height, radius, glowSize, speed, opacity, self, firstPerson, others, particles, rays, rayHeight);
    }

    @Override
    public void onEnable() {
        angle = 0.0;
        enableAnim.setValue(0.0);
    }

    @Override
    public void toggle() {
        super.toggle();
        if (!isEnabled()) enableAnim.run(0.0, 300, Easing.QUINT_OUT);
    }

    @Override
    public void onEvent() {
        EventListener renderEvent = Render3DEvent.getInstance().subscribe(new Listener<>(event -> {
            if (mc.world == null) return;

            enableAnim.update();
            if (isEnabled() && enableAnim.getValue() < 1.0)
                enableAnim.run(1.0, 500, Easing.QUINT_OUT);

            float appear = (float) enableAnim.getValue();
            if (appear < 0.01f) return;

            angle += 0.04 * speed.getValue();

            MatrixStack ms = event.matrixStack();
            float pt = event.partialTicks();

            // true если сейчас вид от первого лица
            boolean isFirstPerson = mc.options.getPerspective().isFirstPerson();

            for (PlayerEntity player : mc.world.getPlayers()) {
                if (player == mc.player) {
                    if (!self.getValue()) continue;
                    // если вид от первого лица и настройка "1st person" выключена — пропускаем
                    if (isFirstPerson && !firstPerson.getValue()) continue;
                }
                if (player != mc.player && !others.getValue()) continue;
                if (player.isInvisible()) continue;

                renderNumb(ms, player, pt, appear);
            }
        }));

        addEvents(renderEvent);
    }

    private void renderNumb(MatrixStack ms, PlayerEntity player, float pt, float appear) {
        Vec3d cam = mc.getEntityRenderDispatcher().camera.getPos();
        double px = MathUtil.interpolate(player.prevX, player.getX(), pt);
        double py = MathUtil.interpolate(player.prevY, player.getY(), pt);
        double pz = MathUtil.interpolate(player.prevZ, player.getZ(), pt);

        double haloY = py + player.getHeight() + height.getValue() * appear;

        setupGlState();

        switch (mode.getValue()) {
            case "Ring"  -> renderRing(ms, cam, px, haloY, pz, appear);
            case "Crown" -> renderCrown(ms, cam, px, haloY, pz, appear);
            case "Pulse" -> renderPulse(ms, cam, px, haloY, pz, appear);
        }

        restoreGlState();
    }

    private void renderRing(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int count = particles.getValue().intValue();
        float r   = radius.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        for (int i = 0; i < count; i++) {
            double a  = angle + (Math.PI * 2.0 / count) * i;
            double or = r * (i % 2 == 0 ? 1.0 : 0.6);
            float  os = sz * (i % 2 == 0 ? 1.0f : 0.65f);

            double wx = cx + Math.sin(a) * or;
            double wz = cz + Math.cos(a) * or;

            int colorIdx = (int)(((double) i / count) * 360) + (int)(angle * 30);
            Color c1 = ColorUtil.setAlpha(UIColors.gradient(colorIdx),      (int)(255 * opc * appear));
            Color c2 = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 60), (int)(180 * opc * appear * 0.5f));

            drawBillboard(ms, cam, wx, cy, wz, os,        c1);
            drawBillboard(ms, cam, wx, cy, wz, os * 1.8f, c2);
        }
    }

    private void renderCrown(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        int n     = rays.getValue().intValue();
        float r   = radius.getValue() * appear;
        float rh  = rayHeight.getValue() * appear;
        float sz  = glowSize.getValue() * appear;
        float opc = opacity.getValue();

        float pulse = 0.75f + 0.25f * (float) Math.sin(angle * 2.5);

        for (int i = 0; i < n; i++) {
            double a  = (Math.PI * 2.0 / n) * i;
            double wx = cx + Math.sin(a) * r;
            double wz = cz + Math.cos(a) * r;

            int colorIdx = (int)(((double) i / n) * 360);
            Color base = UIColors.gradient(colorIdx);

            Color cBase = ColorUtil.setAlpha(base, (int)(200 * opc * appear));
            drawBillboard(ms, cam, wx, cy, wz, sz * 0.9f, cBase);

            double tipY  = cy + rh * pulse;
            Color cTip   = ColorUtil.setAlpha(UIColors.gradient(colorIdx + 120), (int)(255 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * pulse, cTip);

            Color cGlow  = ColorUtil.setAlpha(base, (int)(120 * opc * appear * pulse));
            drawBillboard(ms, cam, wx, tipY, wz, sz * 2.0f * pulse, cGlow);
        }
    }

    private void renderPulse(MatrixStack ms, Vec3d cam, double cx, double cy, double cz, float appear) {
        float opc = opacity.getValue();

        for (int layer = 0; layer < 3; layer++) {
            double phase = angle * 1.8 + layer * (Math.PI * 2.0 / 3.0);
            float pulse  = 0.6f + 0.4f * (float) Math.sin(phase);
            float sz     = glowSize.getValue() * appear * (1.0f + layer * 0.6f) * pulse;

            int colorIdx = (int)(angle * 40) + layer * 120;
            int alpha    = (int)(255 * opc * appear * (1.0f - layer * 0.25f) * pulse);
            Color c = ColorUtil.setAlpha(UIColors.gradient(colorIdx), alpha);

            drawBillboard(ms, cam, cx, cy, cz, sz, c);
        }
    }

    private void setupGlState() {
        RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX_COLOR);
        RenderSystem.setShaderTexture(0, FileUtil.getImage("particles/glow"));
        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();
        RenderSystem.disableDepthTest();
        RenderSystem.depthMask(false);
    }

    private void restoreGlState() {
        RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA);
        RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
    }

    private void drawBillboard(MatrixStack stack, Vec3d cam,
                               double wx, double wy, double wz,
                               float size, Color color) {
        stack.push();
        stack.translate(wx - cam.x, wy - cam.y, wz - cam.z);

        Camera camera = mc.gameRenderer.getCamera();
        stack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw() + 180.0f));
        stack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(-camera.getPitch() + 180.0f));

        Matrix4f matrix = stack.peek().getPositionMatrix();
        float[]  c      = ColorUtil.normalize(color);

        BufferBuilder buf = Tessellator.getInstance()
                .begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);

        buf.vertex(matrix, -size,  size, 0).texture(0f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size,  size, 0).texture(1f, 1f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix,  size, -size, 0).texture(1f, 0f).color(c[0], c[1], c[2], c[3]);
        buf.vertex(matrix, -size, -size, 0).texture(0f, 0f).color(c[0], c[1], c[2], c[3]);

        BufferRenderer.drawWithGlobalProgram(buf.end());
        stack.pop();
    }
}
говно
 
Привет, почему я считаюсь фриком форума? Тема - откровенное дерьмо. Зачем выкладывать что-то, сделанное ИИ, да ещё и реализованное убого? Что насчёт "запинать всем форумом" - уверен, найдутся люди, которые плюнут тебе в лицо. Ты никто. Для начала обоснуй причину своей обиды. Пока что в тебе я вижу лишь обидчивую суку. Есть претензии? Расскажи их моему члену.
А можешь сказать что по оптимизации в еваваре дерьмо? я хз где копать
 
Привет, почему я считаюсь фриком форума? Тема - откровенное дерьмо. Зачем выкладывать что-то, сделанное ИИ, да ещё и реализованное убого? Что насчёт "запинать всем форумом" - уверен, найдутся люди, которые плюнут тебе в лицо. Ты никто. Для начала обоснуй причину своей обиды. Пока что в тебе я вижу лишь обидчивую суку. Есть претензии? Расскажи их моему члену.
фрик отвали я тя в дискорде затролирую и в лицо тебе плюну ez
 
Назад
Сверху Снизу