Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Визуальная часть MainScreen | Exp 3.1 | Particle Snow

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Сен 2025
Сообщения
3
Реакции
0
Выберите загрузчик игры
  1. Прочие моды
первый раз что-то на юг закидываю надеюсь зайдет.
сс - прикрепил
код:

1766315595943.png

1766315723470.png

кодик снов:
Expand Collapse Copy
package im.expensive.ui.mainmenu;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import im.expensive.Expensive;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.client.IMinecraft;
import im.expensive.utils.client.Vec2i;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.KawaseBlur;
import im.expensive.utils.render.Stencil;
import im.expensive.utils.render.font.Fonts;
import lombok.Getter;
import net.minecraft.client.MainWindow;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.OptionsScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.WorldSelectionScreen;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadLocalRandom;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final ResourceLocation logo = new ResourceLocation("expensive/images/logo.png");
    public static final ResourceLocation buttonTex = new ResourceLocation("expensive/images/button.png");

    private final List<Button> buttons = new ArrayList<>();
    private static final CopyOnWriteArrayList<Particle> particles = new CopyOnWriteArrayList<>();
    private final StopWatch stopWatch = new StopWatch();
    private SnowSettingsScreen snowSettings;

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
        this.snowSettings = new SnowSettingsScreen(this);
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);

        float widthButton = 160;
        float heightButton = 28;
        float x = width / 2f - widthButton / 2f;
        float y = height / 2f + 20;

        buttons.clear();
        buttons.add(new Button(x, y, widthButton, heightButton, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Snow Settings", () -> mc.displayGuiScreen(snowSettings)));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);

        if (snowSettings.isSnowEnabled() && stopWatch.isReached((long)(150 / (snowSettings.getParticleCountMultiplier() + 0.1)))) {
            particles.add(new Particle());
            stopWatch.reset();
        }

        for (Particle p : particles) {
            if (snowSettings.isSnowEnabled()) {
                p.render(matrixStack);
            }
        }

        if (!snowSettings.isSnowEnabled() && !particles.isEmpty()) {
            particles.clear();
        }

        MainWindow mainWindow = mc.getMainWindow();
        float windowWidth = mainWindow.getScaledWidth();
        float windowHeight = mainWindow.getScaledHeight();

        float logoW = 1920 / 4.5f;
        float logoH = 1080 / 4.5f;
        float xLogo = windowWidth / 2f - logoW / 2f;
        float yLogo = windowHeight / 2f - logoH - 10;

        float floating = (float) Math.sin(System.currentTimeMillis() / 1200.0) * 4f;

        mc.gameRenderer.setupOverlayRendering(2);
        DisplayUtils.drawImage(logo, xLogo, yLogo + floating, logoW, logoH, -1);

        buttons.forEach(b -> b.render(matrixStack, mouseX, mouseY, partialTicks));

        Expensive.getInstance().getAltWidget().render(matrixStack, mouseX, mouseY);
        mc.gameRenderer.setupOverlayRendering();
    }

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        buttons.forEach(b -> b.click((int) mouseX, (int) mouseY, button));
        Expensive.getInstance().getAltWidget().click((int) mouseX, (int) mouseY, button);
        return super.mouseClicked(mouseX, mouseY, button);
    }

    private class Particle {
        private final float x;
        private float y;
        private final float speed;
        private final float size;
        private final int color;
        
        public Particle() {
            this.x = ThreadLocalRandom.current().nextFloat() * mc.getMainWindow().getScaledWidth();
            this.y = -10;
            float baseSpeed = ThreadLocalRandom.current().nextFloat(0.5f, 2.0f);
            float baseSize = ThreadLocalRandom.current().nextFloat(1.0f, 3.0f);
            this.speed = baseSpeed * snowSettings.getParticleSpeedMultiplier();
            this.size = baseSize * snowSettings.getParticleSizeMultiplier();
            this.color = snowSettings.getSnowColor();
        }
        
        public void render(MatrixStack stack) {
            y += speed;
            
            if (size > 3.0f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x - size/2, y, size/2, color);
                DisplayUtils.drawCircle(x + size/2, y, size/2, color);
                DisplayUtils.drawCircle(x, y - size/2, size/2, color);
                DisplayUtils.drawCircle(x, y + size/2, size/2, color);
            } else if (size > 1.5f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x + 0.5f, y + 0.5f, size - 0.5f, ColorUtils.rgba(200, 200, 255, 100));
            } else {
                DisplayUtils.drawCircle(x, y, size, color);
            }
            
            if (y > mc.getMainWindow().getScaledHeight()) particles.remove(this);
        }
    }

    private class Button {
        @Getter private final float x, y, width, height;
        private final String text;
        private final Runnable action;
        private float anim = 0;

        public Button(float x, float y, float width, float height, String text, Runnable action) {
            this.x = x; this.y = y; this.width = width; this.height = height;
            this.text = text; this.action = action;
        }

        public void render(MatrixStack stack, int mouseX, int mouseY, float pt) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);
            anim = MathHelper.lerp(pt * 0.1f, anim, hovered ? 1f : 0f);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, -1);
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            int alpha = (int) (150 + (50 * anim));
            int color = ColorUtils.rgba(25, 25, 35, alpha);
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, color);

            int textColor = ColorUtils.interpolateColor(
                    ColorUtils.rgba(220, 220, 220, 255),
                    ColorUtils.rgba(255, 255, 255, 255),
                    anim
            );

            int shadowColor = ColorUtils.rgba(0, 0, 0, 150);
            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f + 0.5f,
                    y + height / 2f - 3.5f,
                    shadowColor,
                    8f
            );

            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f,
                    y + height / 2f - 4f,
                    textColor,
                    8f
            );
        }

        public void click(int mouseX, int mouseY, int button) {
            if (button == 0 && MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }

    public class SnowSettingsScreen extends Screen implements IMinecraft {
        
        private final Screen parent;
        private float particleCountSlider = 0.5f;
        private float particleSizeSlider = 0.5f;
        private float particleSpeedSlider = 0.5f;
        private boolean snowEnabled = true;
        private int snowColor = 0xFFFFFFFF;
        
        public SnowSettingsScreen(Screen parent) {
            super(new StringTextComponent("Snow Settings"));
            this.parent = parent;
        }
        
        @Override
        protected void init() {
            int centerX = this.width / 2;
            int buttonWidth = 200;
            int buttonHeight = 20;
            int startY = this.height / 4;
            
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY, buttonWidth, buttonHeight,
                new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"),
                button -> {
                    snowEnabled = !snowEnabled;
                    button.setMessage(new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"));
                }));
            
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 30, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)),
                button -> {
                    particleCountSlider = (particleCountSlider + 0.25f) % 1.25f;
                    if (particleCountSlider > 1.0f) particleCountSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)));
                }));
            
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 60, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)),
                button -> {
                    particleSizeSlider = (particleSizeSlider + 0.25f) % 1.25f;
                    if (particleSizeSlider > 1.0f) particleSizeSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)));
                }));
            
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 90, buttonWidth, buttonHeight,
                new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)),
                button -> {
                    particleSpeedSlider = (particleSpeedSlider + 0.25f) % 1.25f;
                    if (particleSpeedSlider > 1.0f) particleSpeedSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)));
                }));
            
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 120, buttonWidth, buttonHeight,
                new StringTextComponent("Change Color"),
                button -> {
                    float[] hsv = new float[3];
                    java.awt.Color.RGBtoHSB((snowColor >> 16) & 0xFF, (snowColor >> 8) & 0xFF, snowColor & 0xFF, hsv);
                    hsv[0] = (hsv[0] + 0.1f) % 1.0f;
                    int rgb = java.awt.Color.HSBtoRGB(hsv[0], 0.8f, 1.0f);
                    snowColor = (0xFF << 24) | (rgb & 0x00FFFFFF);
                }));
            
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 150, buttonWidth, buttonHeight,
                new StringTextComponent("Reset to Default"),
                button -> {
                    particleCountSlider = 0.5f;
                    particleSizeSlider = 0.5f;
                    particleSpeedSlider = 0.5f;
                    snowColor = 0xFFFFFFFF;
                }));
            
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - 100, this.height - 30, 200, 20,
                new StringTextComponent("Back"),
                button -> mc.displayGuiScreen(parent)));
        }
        
        @Override
        public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
            renderBackground(matrixStack);
            
            drawCenteredString(matrixStack, this.font, "Snow Settings", this.width / 2, 20, 0xFFFFFF);
            
            int colorBoxX = this.width / 2 + 120;
            int colorBoxY = this.height / 4 + 123;
            DisplayUtils.drawRect(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, snowColor);
            DisplayUtils.drawRectOutline(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, 1, 0xFF000000);
            
            super.render(matrixStack, mouseX, mouseY, partialTicks);
            
            Fonts.montserrat.drawText(matrixStack, "Current Color:", colorBoxX - 80, colorBoxY + 5, 0xFFFFFF, 6f);
        }
        
        public boolean isSnowEnabled() {
            return snowEnabled;
        }
        
        public float getParticleCountMultiplier() {
            return particleCountSlider;
        }
        
        public float getParticleSizeMultiplier() {
            return particleSizeSlider * 4 + 0.5f;
        }
        
        public float getParticleSpeedMultiplier() {
            return particleSpeedSlider * 3 + 0.2f;
        }
        
        public int getSnowColor() {
            return snowColor;
        }
    }
}
 
первый раз что-то на юг закидываю надеюсь зайдет.
сс - прикрепил
код:

Посмотреть вложение 322593
Посмотреть вложение 322594
кодик снов:
Expand Collapse Copy
package im.expensive.ui.mainmenu;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import im.expensive.Expensive;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.client.IMinecraft;
import im.expensive.utils.client.Vec2i;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.KawaseBlur;
import im.expensive.utils.render.Stencil;
import im.expensive.utils.render.font.Fonts;
import lombok.Getter;
import net.minecraft.client.MainWindow;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.OptionsScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.WorldSelectionScreen;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadLocalRandom;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final ResourceLocation logo = new ResourceLocation("expensive/images/logo.png");
    public static final ResourceLocation buttonTex = new ResourceLocation("expensive/images/button.png");

    private final List<Button> buttons = new ArrayList<>();
    private static final CopyOnWriteArrayList<Particle> particles = new CopyOnWriteArrayList<>();
    private final StopWatch stopWatch = new StopWatch();
    private SnowSettingsScreen snowSettings;

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
        this.snowSettings = new SnowSettingsScreen(this);
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);

        float widthButton = 160;
        float heightButton = 28;
        float x = width / 2f - widthButton / 2f;
        float y = height / 2f + 20;

        buttons.clear();
        buttons.add(new Button(x, y, widthButton, heightButton, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Snow Settings", () -> mc.displayGuiScreen(snowSettings)));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);

        if (snowSettings.isSnowEnabled() && stopWatch.isReached((long)(150 / (snowSettings.getParticleCountMultiplier() + 0.1)))) {
            particles.add(new Particle());
            stopWatch.reset();
        }

        for (Particle p : particles) {
            if (snowSettings.isSnowEnabled()) {
                p.render(matrixStack);
            }
        }

        if (!snowSettings.isSnowEnabled() && !particles.isEmpty()) {
            particles.clear();
        }

        MainWindow mainWindow = mc.getMainWindow();
        float windowWidth = mainWindow.getScaledWidth();
        float windowHeight = mainWindow.getScaledHeight();

        float logoW = 1920 / 4.5f;
        float logoH = 1080 / 4.5f;
        float xLogo = windowWidth / 2f - logoW / 2f;
        float yLogo = windowHeight / 2f - logoH - 10;

        float floating = (float) Math.sin(System.currentTimeMillis() / 1200.0) * 4f;

        mc.gameRenderer.setupOverlayRendering(2);
        DisplayUtils.drawImage(logo, xLogo, yLogo + floating, logoW, logoH, -1);

        buttons.forEach(b -> b.render(matrixStack, mouseX, mouseY, partialTicks));

        Expensive.getInstance().getAltWidget().render(matrixStack, mouseX, mouseY);
        mc.gameRenderer.setupOverlayRendering();
    }

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        buttons.forEach(b -> b.click((int) mouseX, (int) mouseY, button));
        Expensive.getInstance().getAltWidget().click((int) mouseX, (int) mouseY, button);
        return super.mouseClicked(mouseX, mouseY, button);
    }

    private class Particle {
        private final float x;
        private float y;
        private final float speed;
        private final float size;
        private final int color;
       
        public Particle() {
            this.x = ThreadLocalRandom.current().nextFloat() * mc.getMainWindow().getScaledWidth();
            this.y = -10;
            float baseSpeed = ThreadLocalRandom.current().nextFloat(0.5f, 2.0f);
            float baseSize = ThreadLocalRandom.current().nextFloat(1.0f, 3.0f);
            this.speed = baseSpeed * snowSettings.getParticleSpeedMultiplier();
            this.size = baseSize * snowSettings.getParticleSizeMultiplier();
            this.color = snowSettings.getSnowColor();
        }
       
        public void render(MatrixStack stack) {
            y += speed;
           
            if (size > 3.0f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x - size/2, y, size/2, color);
                DisplayUtils.drawCircle(x + size/2, y, size/2, color);
                DisplayUtils.drawCircle(x, y - size/2, size/2, color);
                DisplayUtils.drawCircle(x, y + size/2, size/2, color);
            } else if (size > 1.5f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x + 0.5f, y + 0.5f, size - 0.5f, ColorUtils.rgba(200, 200, 255, 100));
            } else {
                DisplayUtils.drawCircle(x, y, size, color);
            }
           
            if (y > mc.getMainWindow().getScaledHeight()) particles.remove(this);
        }
    }

    private class Button {
        @Getter private final float x, y, width, height;
        private final String text;
        private final Runnable action;
        private float anim = 0;

        public Button(float x, float y, float width, float height, String text, Runnable action) {
            this.x = x; this.y = y; this.width = width; this.height = height;
            this.text = text; this.action = action;
        }

        public void render(MatrixStack stack, int mouseX, int mouseY, float pt) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);
            anim = MathHelper.lerp(pt * 0.1f, anim, hovered ? 1f : 0f);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, -1);
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            int alpha = (int) (150 + (50 * anim));
            int color = ColorUtils.rgba(25, 25, 35, alpha);
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, color);

            int textColor = ColorUtils.interpolateColor(
                    ColorUtils.rgba(220, 220, 220, 255),
                    ColorUtils.rgba(255, 255, 255, 255),
                    anim
            );

            int shadowColor = ColorUtils.rgba(0, 0, 0, 150);
            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f + 0.5f,
                    y + height / 2f - 3.5f,
                    shadowColor,
                    8f
            );

            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f,
                    y + height / 2f - 4f,
                    textColor,
                    8f
            );
        }

        public void click(int mouseX, int mouseY, int button) {
            if (button == 0 && MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }

    public class SnowSettingsScreen extends Screen implements IMinecraft {
       
        private final Screen parent;
        private float particleCountSlider = 0.5f;
        private float particleSizeSlider = 0.5f;
        private float particleSpeedSlider = 0.5f;
        private boolean snowEnabled = true;
        private int snowColor = 0xFFFFFFFF;
       
        public SnowSettingsScreen(Screen parent) {
            super(new StringTextComponent("Snow Settings"));
            this.parent = parent;
        }
       
        @Override
        protected void init() {
            int centerX = this.width / 2;
            int buttonWidth = 200;
            int buttonHeight = 20;
            int startY = this.height / 4;
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY, buttonWidth, buttonHeight,
                new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"),
                button -> {
                    snowEnabled = !snowEnabled;
                    button.setMessage(new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 30, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)),
                button -> {
                    particleCountSlider = (particleCountSlider + 0.25f) % 1.25f;
                    if (particleCountSlider > 1.0f) particleCountSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 60, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)),
                button -> {
                    particleSizeSlider = (particleSizeSlider + 0.25f) % 1.25f;
                    if (particleSizeSlider > 1.0f) particleSizeSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 90, buttonWidth, buttonHeight,
                new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)),
                button -> {
                    particleSpeedSlider = (particleSpeedSlider + 0.25f) % 1.25f;
                    if (particleSpeedSlider > 1.0f) particleSpeedSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 120, buttonWidth, buttonHeight,
                new StringTextComponent("Change Color"),
                button -> {
                    float[] hsv = new float[3];
                    java.awt.Color.RGBtoHSB((snowColor >> 16) & 0xFF, (snowColor >> 8) & 0xFF, snowColor & 0xFF, hsv);
                    hsv[0] = (hsv[0] + 0.1f) % 1.0f;
                    int rgb = java.awt.Color.HSBtoRGB(hsv[0], 0.8f, 1.0f);
                    snowColor = (0xFF << 24) | (rgb & 0x00FFFFFF);
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 150, buttonWidth, buttonHeight,
                new StringTextComponent("Reset to Default"),
                button -> {
                    particleCountSlider = 0.5f;
                    particleSizeSlider = 0.5f;
                    particleSpeedSlider = 0.5f;
                    snowColor = 0xFFFFFFFF;
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - 100, this.height - 30, 200, 20,
                new StringTextComponent("Back"),
                button -> mc.displayGuiScreen(parent)));
        }
       
        @Override
        public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
            renderBackground(matrixStack);
           
            drawCenteredString(matrixStack, this.font, "Snow Settings", this.width / 2, 20, 0xFFFFFF);
           
            int colorBoxX = this.width / 2 + 120;
            int colorBoxY = this.height / 4 + 123;
            DisplayUtils.drawRect(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, snowColor);
            DisplayUtils.drawRectOutline(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, 1, 0xFF000000);
           
            super.render(matrixStack, mouseX, mouseY, partialTicks);
           
            Fonts.montserrat.drawText(matrixStack, "Current Color:", colorBoxX - 80, colorBoxY + 5, 0xFFFFFF, 6f);
        }
       
        public boolean isSnowEnabled() {
            return snowEnabled;
        }
       
        public float getParticleCountMultiplier() {
            return particleCountSlider;
        }
       
        public float getParticleSizeMultiplier() {
            return particleSizeSlider * 4 + 0.5f;
        }
       
        public float getParticleSpeedMultiplier() {
            return particleSpeedSlider * 3 + 0.2f;
        }
       
        public int getSnowColor() {
            return snowColor;
        }
    }
}
это пздц:pepe11:
 
первый раз что-то на юг закидываю надеюсь зайдет.
сс - прикрепил
код:

Посмотреть вложение 322593
Посмотреть вложение 322594
кодик снов:
Expand Collapse Copy
package im.expensive.ui.mainmenu;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import im.expensive.Expensive;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.client.IMinecraft;
import im.expensive.utils.client.Vec2i;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.KawaseBlur;
import im.expensive.utils.render.Stencil;
import im.expensive.utils.render.font.Fonts;
import lombok.Getter;
import net.minecraft.client.MainWindow;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.OptionsScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.WorldSelectionScreen;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadLocalRandom;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final ResourceLocation logo = new ResourceLocation("expensive/images/logo.png");
    public static final ResourceLocation buttonTex = new ResourceLocation("expensive/images/button.png");

    private final List<Button> buttons = new ArrayList<>();
    private static final CopyOnWriteArrayList<Particle> particles = new CopyOnWriteArrayList<>();
    private final StopWatch stopWatch = new StopWatch();
    private SnowSettingsScreen snowSettings;

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
        this.snowSettings = new SnowSettingsScreen(this);
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);

        float widthButton = 160;
        float heightButton = 28;
        float x = width / 2f - widthButton / 2f;
        float y = height / 2f + 20;

        buttons.clear();
        buttons.add(new Button(x, y, widthButton, heightButton, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Snow Settings", () -> mc.displayGuiScreen(snowSettings)));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);

        if (snowSettings.isSnowEnabled() && stopWatch.isReached((long)(150 / (snowSettings.getParticleCountMultiplier() + 0.1)))) {
            particles.add(new Particle());
            stopWatch.reset();
        }

        for (Particle p : particles) {
            if (snowSettings.isSnowEnabled()) {
                p.render(matrixStack);
            }
        }

        if (!snowSettings.isSnowEnabled() && !particles.isEmpty()) {
            particles.clear();
        }

        MainWindow mainWindow = mc.getMainWindow();
        float windowWidth = mainWindow.getScaledWidth();
        float windowHeight = mainWindow.getScaledHeight();

        float logoW = 1920 / 4.5f;
        float logoH = 1080 / 4.5f;
        float xLogo = windowWidth / 2f - logoW / 2f;
        float yLogo = windowHeight / 2f - logoH - 10;

        float floating = (float) Math.sin(System.currentTimeMillis() / 1200.0) * 4f;

        mc.gameRenderer.setupOverlayRendering(2);
        DisplayUtils.drawImage(logo, xLogo, yLogo + floating, logoW, logoH, -1);

        buttons.forEach(b -> b.render(matrixStack, mouseX, mouseY, partialTicks));

        Expensive.getInstance().getAltWidget().render(matrixStack, mouseX, mouseY);
        mc.gameRenderer.setupOverlayRendering();
    }

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        buttons.forEach(b -> b.click((int) mouseX, (int) mouseY, button));
        Expensive.getInstance().getAltWidget().click((int) mouseX, (int) mouseY, button);
        return super.mouseClicked(mouseX, mouseY, button);
    }

    private class Particle {
        private final float x;
        private float y;
        private final float speed;
        private final float size;
        private final int color;
       
        public Particle() {
            this.x = ThreadLocalRandom.current().nextFloat() * mc.getMainWindow().getScaledWidth();
            this.y = -10;
            float baseSpeed = ThreadLocalRandom.current().nextFloat(0.5f, 2.0f);
            float baseSize = ThreadLocalRandom.current().nextFloat(1.0f, 3.0f);
            this.speed = baseSpeed * snowSettings.getParticleSpeedMultiplier();
            this.size = baseSize * snowSettings.getParticleSizeMultiplier();
            this.color = snowSettings.getSnowColor();
        }
       
        public void render(MatrixStack stack) {
            y += speed;
           
            if (size > 3.0f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x - size/2, y, size/2, color);
                DisplayUtils.drawCircle(x + size/2, y, size/2, color);
                DisplayUtils.drawCircle(x, y - size/2, size/2, color);
                DisplayUtils.drawCircle(x, y + size/2, size/2, color);
            } else if (size > 1.5f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x + 0.5f, y + 0.5f, size - 0.5f, ColorUtils.rgba(200, 200, 255, 100));
            } else {
                DisplayUtils.drawCircle(x, y, size, color);
            }
           
            if (y > mc.getMainWindow().getScaledHeight()) particles.remove(this);
        }
    }

    private class Button {
        @Getter private final float x, y, width, height;
        private final String text;
        private final Runnable action;
        private float anim = 0;

        public Button(float x, float y, float width, float height, String text, Runnable action) {
            this.x = x; this.y = y; this.width = width; this.height = height;
            this.text = text; this.action = action;
        }

        public void render(MatrixStack stack, int mouseX, int mouseY, float pt) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);
            anim = MathHelper.lerp(pt * 0.1f, anim, hovered ? 1f : 0f);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, -1);
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            int alpha = (int) (150 + (50 * anim));
            int color = ColorUtils.rgba(25, 25, 35, alpha);
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, color);

            int textColor = ColorUtils.interpolateColor(
                    ColorUtils.rgba(220, 220, 220, 255),
                    ColorUtils.rgba(255, 255, 255, 255),
                    anim
            );

            int shadowColor = ColorUtils.rgba(0, 0, 0, 150);
            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f + 0.5f,
                    y + height / 2f - 3.5f,
                    shadowColor,
                    8f
            );

            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f,
                    y + height / 2f - 4f,
                    textColor,
                    8f
            );
        }

        public void click(int mouseX, int mouseY, int button) {
            if (button == 0 && MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }

    public class SnowSettingsScreen extends Screen implements IMinecraft {
       
        private final Screen parent;
        private float particleCountSlider = 0.5f;
        private float particleSizeSlider = 0.5f;
        private float particleSpeedSlider = 0.5f;
        private boolean snowEnabled = true;
        private int snowColor = 0xFFFFFFFF;
       
        public SnowSettingsScreen(Screen parent) {
            super(new StringTextComponent("Snow Settings"));
            this.parent = parent;
        }
       
        @Override
        protected void init() {
            int centerX = this.width / 2;
            int buttonWidth = 200;
            int buttonHeight = 20;
            int startY = this.height / 4;
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY, buttonWidth, buttonHeight,
                new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"),
                button -> {
                    snowEnabled = !snowEnabled;
                    button.setMessage(new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 30, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)),
                button -> {
                    particleCountSlider = (particleCountSlider + 0.25f) % 1.25f;
                    if (particleCountSlider > 1.0f) particleCountSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 60, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)),
                button -> {
                    particleSizeSlider = (particleSizeSlider + 0.25f) % 1.25f;
                    if (particleSizeSlider > 1.0f) particleSizeSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 90, buttonWidth, buttonHeight,
                new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)),
                button -> {
                    particleSpeedSlider = (particleSpeedSlider + 0.25f) % 1.25f;
                    if (particleSpeedSlider > 1.0f) particleSpeedSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 120, buttonWidth, buttonHeight,
                new StringTextComponent("Change Color"),
                button -> {
                    float[] hsv = new float[3];
                    java.awt.Color.RGBtoHSB((snowColor >> 16) & 0xFF, (snowColor >> 8) & 0xFF, snowColor & 0xFF, hsv);
                    hsv[0] = (hsv[0] + 0.1f) % 1.0f;
                    int rgb = java.awt.Color.HSBtoRGB(hsv[0], 0.8f, 1.0f);
                    snowColor = (0xFF << 24) | (rgb & 0x00FFFFFF);
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 150, buttonWidth, buttonHeight,
                new StringTextComponent("Reset to Default"),
                button -> {
                    particleCountSlider = 0.5f;
                    particleSizeSlider = 0.5f;
                    particleSpeedSlider = 0.5f;
                    snowColor = 0xFFFFFFFF;
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - 100, this.height - 30, 200, 20,
                new StringTextComponent("Back"),
                button -> mc.displayGuiScreen(parent)));
        }
       
        @Override
        public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
            renderBackground(matrixStack);
           
            drawCenteredString(matrixStack, this.font, "Snow Settings", this.width / 2, 20, 0xFFFFFF);
           
            int colorBoxX = this.width / 2 + 120;
            int colorBoxY = this.height / 4 + 123;
            DisplayUtils.drawRect(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, snowColor);
            DisplayUtils.drawRectOutline(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, 1, 0xFF000000);
           
            super.render(matrixStack, mouseX, mouseY, partialTicks);
           
            Fonts.montserrat.drawText(matrixStack, "Current Color:", colorBoxX - 80, colorBoxY + 5, 0xFFFFFF, 6f);
        }
       
        public boolean isSnowEnabled() {
            return snowEnabled;
        }
       
        public float getParticleCountMultiplier() {
            return particleCountSlider;
        }
       
        public float getParticleSizeMultiplier() {
            return particleSizeSlider * 4 + 0.5f;
        }
       
        public float getParticleSpeedMultiplier() {
            return particleSpeedSlider * 3 + 0.2f;
        }
       
        public int getSnowColor() {
            return snowColor;
        }
    }
}
как же тяжело зайти в гпт и написать что бы на фон добавили снежинки
 
первый раз что-то на юг закидываю надеюсь зайдет.
сс - прикрепил
код:

Посмотреть вложение 322593
Посмотреть вложение 322594
кодик снов:
Expand Collapse Copy
package im.expensive.ui.mainmenu;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import im.expensive.Expensive;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.client.IMinecraft;
import im.expensive.utils.client.Vec2i;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.KawaseBlur;
import im.expensive.utils.render.Stencil;
import im.expensive.utils.render.font.Fonts;
import lombok.Getter;
import net.minecraft.client.MainWindow;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.OptionsScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.WorldSelectionScreen;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadLocalRandom;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final ResourceLocation logo = new ResourceLocation("expensive/images/logo.png");
    public static final ResourceLocation buttonTex = new ResourceLocation("expensive/images/button.png");

    private final List<Button> buttons = new ArrayList<>();
    private static final CopyOnWriteArrayList<Particle> particles = new CopyOnWriteArrayList<>();
    private final StopWatch stopWatch = new StopWatch();
    private SnowSettingsScreen snowSettings;

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
        this.snowSettings = new SnowSettingsScreen(this);
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);

        float widthButton = 160;
        float heightButton = 28;
        float x = width / 2f - widthButton / 2f;
        float y = height / 2f + 20;

        buttons.clear();
        buttons.add(new Button(x, y, widthButton, heightButton, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Snow Settings", () -> mc.displayGuiScreen(snowSettings)));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);

        if (snowSettings.isSnowEnabled() && stopWatch.isReached((long)(150 / (snowSettings.getParticleCountMultiplier() + 0.1)))) {
            particles.add(new Particle());
            stopWatch.reset();
        }

        for (Particle p : particles) {
            if (snowSettings.isSnowEnabled()) {
                p.render(matrixStack);
            }
        }

        if (!snowSettings.isSnowEnabled() && !particles.isEmpty()) {
            particles.clear();
        }

        MainWindow mainWindow = mc.getMainWindow();
        float windowWidth = mainWindow.getScaledWidth();
        float windowHeight = mainWindow.getScaledHeight();

        float logoW = 1920 / 4.5f;
        float logoH = 1080 / 4.5f;
        float xLogo = windowWidth / 2f - logoW / 2f;
        float yLogo = windowHeight / 2f - logoH - 10;

        float floating = (float) Math.sin(System.currentTimeMillis() / 1200.0) * 4f;

        mc.gameRenderer.setupOverlayRendering(2);
        DisplayUtils.drawImage(logo, xLogo, yLogo + floating, logoW, logoH, -1);

        buttons.forEach(b -> b.render(matrixStack, mouseX, mouseY, partialTicks));

        Expensive.getInstance().getAltWidget().render(matrixStack, mouseX, mouseY);
        mc.gameRenderer.setupOverlayRendering();
    }

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        buttons.forEach(b -> b.click((int) mouseX, (int) mouseY, button));
        Expensive.getInstance().getAltWidget().click((int) mouseX, (int) mouseY, button);
        return super.mouseClicked(mouseX, mouseY, button);
    }

    private class Particle {
        private final float x;
        private float y;
        private final float speed;
        private final float size;
        private final int color;
       
        public Particle() {
            this.x = ThreadLocalRandom.current().nextFloat() * mc.getMainWindow().getScaledWidth();
            this.y = -10;
            float baseSpeed = ThreadLocalRandom.current().nextFloat(0.5f, 2.0f);
            float baseSize = ThreadLocalRandom.current().nextFloat(1.0f, 3.0f);
            this.speed = baseSpeed * snowSettings.getParticleSpeedMultiplier();
            this.size = baseSize * snowSettings.getParticleSizeMultiplier();
            this.color = snowSettings.getSnowColor();
        }
       
        public void render(MatrixStack stack) {
            y += speed;
           
            if (size > 3.0f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x - size/2, y, size/2, color);
                DisplayUtils.drawCircle(x + size/2, y, size/2, color);
                DisplayUtils.drawCircle(x, y - size/2, size/2, color);
                DisplayUtils.drawCircle(x, y + size/2, size/2, color);
            } else if (size > 1.5f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x + 0.5f, y + 0.5f, size - 0.5f, ColorUtils.rgba(200, 200, 255, 100));
            } else {
                DisplayUtils.drawCircle(x, y, size, color);
            }
           
            if (y > mc.getMainWindow().getScaledHeight()) particles.remove(this);
        }
    }

    private class Button {
        @Getter private final float x, y, width, height;
        private final String text;
        private final Runnable action;
        private float anim = 0;

        public Button(float x, float y, float width, float height, String text, Runnable action) {
            this.x = x; this.y = y; this.width = width; this.height = height;
            this.text = text; this.action = action;
        }

        public void render(MatrixStack stack, int mouseX, int mouseY, float pt) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);
            anim = MathHelper.lerp(pt * 0.1f, anim, hovered ? 1f : 0f);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, -1);
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            int alpha = (int) (150 + (50 * anim));
            int color = ColorUtils.rgba(25, 25, 35, alpha);
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, color);

            int textColor = ColorUtils.interpolateColor(
                    ColorUtils.rgba(220, 220, 220, 255),
                    ColorUtils.rgba(255, 255, 255, 255),
                    anim
            );

            int shadowColor = ColorUtils.rgba(0, 0, 0, 150);
            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f + 0.5f,
                    y + height / 2f - 3.5f,
                    shadowColor,
                    8f
            );

            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f,
                    y + height / 2f - 4f,
                    textColor,
                    8f
            );
        }

        public void click(int mouseX, int mouseY, int button) {
            if (button == 0 && MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }

    public class SnowSettingsScreen extends Screen implements IMinecraft {
       
        private final Screen parent;
        private float particleCountSlider = 0.5f;
        private float particleSizeSlider = 0.5f;
        private float particleSpeedSlider = 0.5f;
        private boolean snowEnabled = true;
        private int snowColor = 0xFFFFFFFF;
       
        public SnowSettingsScreen(Screen parent) {
            super(new StringTextComponent("Snow Settings"));
            this.parent = parent;
        }
       
        @Override
        protected void init() {
            int centerX = this.width / 2;
            int buttonWidth = 200;
            int buttonHeight = 20;
            int startY = this.height / 4;
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY, buttonWidth, buttonHeight,
                new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"),
                button -> {
                    snowEnabled = !snowEnabled;
                    button.setMessage(new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 30, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)),
                button -> {
                    particleCountSlider = (particleCountSlider + 0.25f) % 1.25f;
                    if (particleCountSlider > 1.0f) particleCountSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 60, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)),
                button -> {
                    particleSizeSlider = (particleSizeSlider + 0.25f) % 1.25f;
                    if (particleSizeSlider > 1.0f) particleSizeSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 90, buttonWidth, buttonHeight,
                new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)),
                button -> {
                    particleSpeedSlider = (particleSpeedSlider + 0.25f) % 1.25f;
                    if (particleSpeedSlider > 1.0f) particleSpeedSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 120, buttonWidth, buttonHeight,
                new StringTextComponent("Change Color"),
                button -> {
                    float[] hsv = new float[3];
                    java.awt.Color.RGBtoHSB((snowColor >> 16) & 0xFF, (snowColor >> 8) & 0xFF, snowColor & 0xFF, hsv);
                    hsv[0] = (hsv[0] + 0.1f) % 1.0f;
                    int rgb = java.awt.Color.HSBtoRGB(hsv[0], 0.8f, 1.0f);
                    snowColor = (0xFF << 24) | (rgb & 0x00FFFFFF);
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 150, buttonWidth, buttonHeight,
                new StringTextComponent("Reset to Default"),
                button -> {
                    particleCountSlider = 0.5f;
                    particleSizeSlider = 0.5f;
                    particleSpeedSlider = 0.5f;
                    snowColor = 0xFFFFFFFF;
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - 100, this.height - 30, 200, 20,
                new StringTextComponent("Back"),
                button -> mc.displayGuiScreen(parent)));
        }
       
        @Override
        public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
            renderBackground(matrixStack);
           
            drawCenteredString(matrixStack, this.font, "Snow Settings", this.width / 2, 20, 0xFFFFFF);
           
            int colorBoxX = this.width / 2 + 120;
            int colorBoxY = this.height / 4 + 123;
            DisplayUtils.drawRect(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, snowColor);
            DisplayUtils.drawRectOutline(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, 1, 0xFF000000);
           
            super.render(matrixStack, mouseX, mouseY, partialTicks);
           
            Fonts.montserrat.drawText(matrixStack, "Current Color:", colorBoxX - 80, colorBoxY + 5, 0xFFFFFF, 6f);
        }
       
        public boolean isSnowEnabled() {
            return snowEnabled;
        }
       
        public float getParticleCountMultiplier() {
            return particleCountSlider;
        }
       
        public float getParticleSizeMultiplier() {
            return particleSizeSlider * 4 + 0.5f;
        }
       
        public float getParticleSpeedMultiplier() {
            return particleSpeedSlider * 3 + 0.2f;
        }
       
        public int getSnowColor() {
            return snowColor;
        }
    }
}
под чем были модеры когда это принимали /del
 
первый раз что-то на юг закидываю надеюсь зайдет.
сс - прикрепил
код:

Посмотреть вложение 322593
Посмотреть вложение 322594
кодик снов:
Expand Collapse Copy
package im.expensive.ui.mainmenu;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import im.expensive.Expensive;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.client.IMinecraft;
import im.expensive.utils.client.Vec2i;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.KawaseBlur;
import im.expensive.utils.render.Stencil;
import im.expensive.utils.render.font.Fonts;
import lombok.Getter;
import net.minecraft.client.MainWindow;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.OptionsScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.WorldSelectionScreen;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadLocalRandom;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final ResourceLocation logo = new ResourceLocation("expensive/images/logo.png");
    public static final ResourceLocation buttonTex = new ResourceLocation("expensive/images/button.png");

    private final List<Button> buttons = new ArrayList<>();
    private static final CopyOnWriteArrayList<Particle> particles = new CopyOnWriteArrayList<>();
    private final StopWatch stopWatch = new StopWatch();
    private SnowSettingsScreen snowSettings;

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
        this.snowSettings = new SnowSettingsScreen(this);
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);

        float widthButton = 160;
        float heightButton = 28;
        float x = width / 2f - widthButton / 2f;
        float y = height / 2f + 20;

        buttons.clear();
        buttons.add(new Button(x, y, widthButton, heightButton, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Snow Settings", () -> mc.displayGuiScreen(snowSettings)));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);

        if (snowSettings.isSnowEnabled() && stopWatch.isReached((long)(150 / (snowSettings.getParticleCountMultiplier() + 0.1)))) {
            particles.add(new Particle());
            stopWatch.reset();
        }

        for (Particle p : particles) {
            if (snowSettings.isSnowEnabled()) {
                p.render(matrixStack);
            }
        }

        if (!snowSettings.isSnowEnabled() && !particles.isEmpty()) {
            particles.clear();
        }

        MainWindow mainWindow = mc.getMainWindow();
        float windowWidth = mainWindow.getScaledWidth();
        float windowHeight = mainWindow.getScaledHeight();

        float logoW = 1920 / 4.5f;
        float logoH = 1080 / 4.5f;
        float xLogo = windowWidth / 2f - logoW / 2f;
        float yLogo = windowHeight / 2f - logoH - 10;

        float floating = (float) Math.sin(System.currentTimeMillis() / 1200.0) * 4f;

        mc.gameRenderer.setupOverlayRendering(2);
        DisplayUtils.drawImage(logo, xLogo, yLogo + floating, logoW, logoH, -1);

        buttons.forEach(b -> b.render(matrixStack, mouseX, mouseY, partialTicks));

        Expensive.getInstance().getAltWidget().render(matrixStack, mouseX, mouseY);
        mc.gameRenderer.setupOverlayRendering();
    }

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        buttons.forEach(b -> b.click((int) mouseX, (int) mouseY, button));
        Expensive.getInstance().getAltWidget().click((int) mouseX, (int) mouseY, button);
        return super.mouseClicked(mouseX, mouseY, button);
    }

    private class Particle {
        private final float x;
        private float y;
        private final float speed;
        private final float size;
        private final int color;
       
        public Particle() {
            this.x = ThreadLocalRandom.current().nextFloat() * mc.getMainWindow().getScaledWidth();
            this.y = -10;
            float baseSpeed = ThreadLocalRandom.current().nextFloat(0.5f, 2.0f);
            float baseSize = ThreadLocalRandom.current().nextFloat(1.0f, 3.0f);
            this.speed = baseSpeed * snowSettings.getParticleSpeedMultiplier();
            this.size = baseSize * snowSettings.getParticleSizeMultiplier();
            this.color = snowSettings.getSnowColor();
        }
       
        public void render(MatrixStack stack) {
            y += speed;
           
            if (size > 3.0f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x - size/2, y, size/2, color);
                DisplayUtils.drawCircle(x + size/2, y, size/2, color);
                DisplayUtils.drawCircle(x, y - size/2, size/2, color);
                DisplayUtils.drawCircle(x, y + size/2, size/2, color);
            } else if (size > 1.5f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x + 0.5f, y + 0.5f, size - 0.5f, ColorUtils.rgba(200, 200, 255, 100));
            } else {
                DisplayUtils.drawCircle(x, y, size, color);
            }
           
            if (y > mc.getMainWindow().getScaledHeight()) particles.remove(this);
        }
    }

    private class Button {
        @Getter private final float x, y, width, height;
        private final String text;
        private final Runnable action;
        private float anim = 0;

        public Button(float x, float y, float width, float height, String text, Runnable action) {
            this.x = x; this.y = y; this.width = width; this.height = height;
            this.text = text; this.action = action;
        }

        public void render(MatrixStack stack, int mouseX, int mouseY, float pt) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);
            anim = MathHelper.lerp(pt * 0.1f, anim, hovered ? 1f : 0f);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, -1);
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            int alpha = (int) (150 + (50 * anim));
            int color = ColorUtils.rgba(25, 25, 35, alpha);
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, color);

            int textColor = ColorUtils.interpolateColor(
                    ColorUtils.rgba(220, 220, 220, 255),
                    ColorUtils.rgba(255, 255, 255, 255),
                    anim
            );

            int shadowColor = ColorUtils.rgba(0, 0, 0, 150);
            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f + 0.5f,
                    y + height / 2f - 3.5f,
                    shadowColor,
                    8f
            );

            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f,
                    y + height / 2f - 4f,
                    textColor,
                    8f
            );
        }

        public void click(int mouseX, int mouseY, int button) {
            if (button == 0 && MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }

    public class SnowSettingsScreen extends Screen implements IMinecraft {
       
        private final Screen parent;
        private float particleCountSlider = 0.5f;
        private float particleSizeSlider = 0.5f;
        private float particleSpeedSlider = 0.5f;
        private boolean snowEnabled = true;
        private int snowColor = 0xFFFFFFFF;
       
        public SnowSettingsScreen(Screen parent) {
            super(new StringTextComponent("Snow Settings"));
            this.parent = parent;
        }
       
        @Override
        protected void init() {
            int centerX = this.width / 2;
            int buttonWidth = 200;
            int buttonHeight = 20;
            int startY = this.height / 4;
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY, buttonWidth, buttonHeight,
                new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"),
                button -> {
                    snowEnabled = !snowEnabled;
                    button.setMessage(new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 30, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)),
                button -> {
                    particleCountSlider = (particleCountSlider + 0.25f) % 1.25f;
                    if (particleCountSlider > 1.0f) particleCountSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 60, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)),
                button -> {
                    particleSizeSlider = (particleSizeSlider + 0.25f) % 1.25f;
                    if (particleSizeSlider > 1.0f) particleSizeSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 90, buttonWidth, buttonHeight,
                new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)),
                button -> {
                    particleSpeedSlider = (particleSpeedSlider + 0.25f) % 1.25f;
                    if (particleSpeedSlider > 1.0f) particleSpeedSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 120, buttonWidth, buttonHeight,
                new StringTextComponent("Change Color"),
                button -> {
                    float[] hsv = new float[3];
                    java.awt.Color.RGBtoHSB((snowColor >> 16) & 0xFF, (snowColor >> 8) & 0xFF, snowColor & 0xFF, hsv);
                    hsv[0] = (hsv[0] + 0.1f) % 1.0f;
                    int rgb = java.awt.Color.HSBtoRGB(hsv[0], 0.8f, 1.0f);
                    snowColor = (0xFF << 24) | (rgb & 0x00FFFFFF);
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 150, buttonWidth, buttonHeight,
                new StringTextComponent("Reset to Default"),
                button -> {
                    particleCountSlider = 0.5f;
                    particleSizeSlider = 0.5f;
                    particleSpeedSlider = 0.5f;
                    snowColor = 0xFFFFFFFF;
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - 100, this.height - 30, 200, 20,
                new StringTextComponent("Back"),
                button -> mc.displayGuiScreen(parent)));
        }
       
        @Override
        public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
            renderBackground(matrixStack);
           
            drawCenteredString(matrixStack, this.font, "Snow Settings", this.width / 2, 20, 0xFFFFFF);
           
            int colorBoxX = this.width / 2 + 120;
            int colorBoxY = this.height / 4 + 123;
            DisplayUtils.drawRect(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, snowColor);
            DisplayUtils.drawRectOutline(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, 1, 0xFF000000);
           
            super.render(matrixStack, mouseX, mouseY, partialTicks);
           
            Fonts.montserrat.drawText(matrixStack, "Current Color:", colorBoxX - 80, colorBoxY + 5, 0xFFFFFF, 6f);
        }
       
        public boolean isSnowEnabled() {
            return snowEnabled;
        }
       
        public float getParticleCountMultiplier() {
            return particleCountSlider;
        }
       
        public float getParticleSizeMultiplier() {
            return particleSizeSlider * 4 + 0.5f;
        }
       
        public float getParticleSpeedMultiplier() {
            return particleSpeedSlider * 3 + 0.2f;
        }
       
        public int getSnowColor() {
            return snowColor;
        }
    }
}
/del, легче шейдером сделать
 
первый раз что-то на юг закидываю надеюсь зайдет.
сс - прикрепил
код:

Посмотреть вложение 322593
Посмотреть вложение 322594
кодик снов:
Expand Collapse Copy
package im.expensive.ui.mainmenu;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import im.expensive.Expensive;
import im.expensive.utils.client.ClientUtil;
import im.expensive.utils.client.IMinecraft;
import im.expensive.utils.client.Vec2i;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.math.StopWatch;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.KawaseBlur;
import im.expensive.utils.render.Stencil;
import im.expensive.utils.render.font.Fonts;
import lombok.Getter;
import net.minecraft.client.MainWindow;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.MultiplayerScreen;
import net.minecraft.client.gui.screen.OptionsScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.WorldSelectionScreen;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadLocalRandom;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final ResourceLocation logo = new ResourceLocation("expensive/images/logo.png");
    public static final ResourceLocation buttonTex = new ResourceLocation("expensive/images/button.png");

    private final List<Button> buttons = new ArrayList<>();
    private static final CopyOnWriteArrayList<Particle> particles = new CopyOnWriteArrayList<>();
    private final StopWatch stopWatch = new StopWatch();
    private SnowSettingsScreen snowSettings;

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
        this.snowSettings = new SnowSettingsScreen(this);
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);

        float widthButton = 160;
        float heightButton = 28;
        float x = width / 2f - widthButton / 2f;
        float y = height / 2f + 20;

        buttons.clear();
        buttons.add(new Button(x, y, widthButton, heightButton, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Snow Settings", () -> mc.displayGuiScreen(snowSettings)));
        y += heightButton + 8;
        buttons.add(new Button(x, y, widthButton, heightButton, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);

        if (snowSettings.isSnowEnabled() && stopWatch.isReached((long)(150 / (snowSettings.getParticleCountMultiplier() + 0.1)))) {
            particles.add(new Particle());
            stopWatch.reset();
        }

        for (Particle p : particles) {
            if (snowSettings.isSnowEnabled()) {
                p.render(matrixStack);
            }
        }

        if (!snowSettings.isSnowEnabled() && !particles.isEmpty()) {
            particles.clear();
        }

        MainWindow mainWindow = mc.getMainWindow();
        float windowWidth = mainWindow.getScaledWidth();
        float windowHeight = mainWindow.getScaledHeight();

        float logoW = 1920 / 4.5f;
        float logoH = 1080 / 4.5f;
        float xLogo = windowWidth / 2f - logoW / 2f;
        float yLogo = windowHeight / 2f - logoH - 10;

        float floating = (float) Math.sin(System.currentTimeMillis() / 1200.0) * 4f;

        mc.gameRenderer.setupOverlayRendering(2);
        DisplayUtils.drawImage(logo, xLogo, yLogo + floating, logoW, logoH, -1);

        buttons.forEach(b -> b.render(matrixStack, mouseX, mouseY, partialTicks));

        Expensive.getInstance().getAltWidget().render(matrixStack, mouseX, mouseY);
        mc.gameRenderer.setupOverlayRendering();
    }

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        buttons.forEach(b -> b.click((int) mouseX, (int) mouseY, button));
        Expensive.getInstance().getAltWidget().click((int) mouseX, (int) mouseY, button);
        return super.mouseClicked(mouseX, mouseY, button);
    }

    private class Particle {
        private final float x;
        private float y;
        private final float speed;
        private final float size;
        private final int color;
       
        public Particle() {
            this.x = ThreadLocalRandom.current().nextFloat() * mc.getMainWindow().getScaledWidth();
            this.y = -10;
            float baseSpeed = ThreadLocalRandom.current().nextFloat(0.5f, 2.0f);
            float baseSize = ThreadLocalRandom.current().nextFloat(1.0f, 3.0f);
            this.speed = baseSpeed * snowSettings.getParticleSpeedMultiplier();
            this.size = baseSize * snowSettings.getParticleSizeMultiplier();
            this.color = snowSettings.getSnowColor();
        }
       
        public void render(MatrixStack stack) {
            y += speed;
           
            if (size > 3.0f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x - size/2, y, size/2, color);
                DisplayUtils.drawCircle(x + size/2, y, size/2, color);
                DisplayUtils.drawCircle(x, y - size/2, size/2, color);
                DisplayUtils.drawCircle(x, y + size/2, size/2, color);
            } else if (size > 1.5f) {
                DisplayUtils.drawCircle(x, y, size, color);
                DisplayUtils.drawCircle(x + 0.5f, y + 0.5f, size - 0.5f, ColorUtils.rgba(200, 200, 255, 100));
            } else {
                DisplayUtils.drawCircle(x, y, size, color);
            }
           
            if (y > mc.getMainWindow().getScaledHeight()) particles.remove(this);
        }
    }

    private class Button {
        @Getter private final float x, y, width, height;
        private final String text;
        private final Runnable action;
        private float anim = 0;

        public Button(float x, float y, float width, float height, String text, Runnable action) {
            this.x = x; this.y = y; this.width = width; this.height = height;
            this.text = text; this.action = action;
        }

        public void render(MatrixStack stack, int mouseX, int mouseY, float pt) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);
            anim = MathHelper.lerp(pt * 0.1f, anim, hovered ? 1f : 0f);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, -1);
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            int alpha = (int) (150 + (50 * anim));
            int color = ColorUtils.rgba(25, 25, 35, alpha);
            DisplayUtils.drawRoundedRect(x, y, width, height, 4, color);

            int textColor = ColorUtils.interpolateColor(
                    ColorUtils.rgba(220, 220, 220, 255),
                    ColorUtils.rgba(255, 255, 255, 255),
                    anim
            );

            int shadowColor = ColorUtils.rgba(0, 0, 0, 150);
            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f + 0.5f,
                    y + height / 2f - 3.5f,
                    shadowColor,
                    8f
            );

            Fonts.montserrat.drawCenteredText(
                    stack,
                    text,
                    x + width / 2f,
                    y + height / 2f - 4f,
                    textColor,
                    8f
            );
        }

        public void click(int mouseX, int mouseY, int button) {
            if (button == 0 && MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }

    public class SnowSettingsScreen extends Screen implements IMinecraft {
       
        private final Screen parent;
        private float particleCountSlider = 0.5f;
        private float particleSizeSlider = 0.5f;
        private float particleSpeedSlider = 0.5f;
        private boolean snowEnabled = true;
        private int snowColor = 0xFFFFFFFF;
       
        public SnowSettingsScreen(Screen parent) {
            super(new StringTextComponent("Snow Settings"));
            this.parent = parent;
        }
       
        @Override
        protected void init() {
            int centerX = this.width / 2;
            int buttonWidth = 200;
            int buttonHeight = 20;
            int startY = this.height / 4;
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY, buttonWidth, buttonHeight,
                new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"),
                button -> {
                    snowEnabled = !snowEnabled;
                    button.setMessage(new StringTextComponent(snowEnabled ? "Snow: ON" : "Snow: OFF"));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 30, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)),
                button -> {
                    particleCountSlider = (particleCountSlider + 0.25f) % 1.25f;
                    if (particleCountSlider > 1.0f) particleCountSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Count: " + (int)(particleCountSlider * 200)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 60, buttonWidth, buttonHeight,
                new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)),
                button -> {
                    particleSizeSlider = (particleSizeSlider + 0.25f) % 1.25f;
                    if (particleSizeSlider > 1.0f) particleSizeSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Particle Size: " + String.format("%.1f", particleSizeSlider * 4 + 0.5)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 90, buttonWidth, buttonHeight,
                new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)),
                button -> {
                    particleSpeedSlider = (particleSpeedSlider + 0.25f) % 1.25f;
                    if (particleSpeedSlider > 1.0f) particleSpeedSlider = 0.0f;
                    button.setMessage(new StringTextComponent("Fall Speed: " + String.format("%.1f", particleSpeedSlider * 3 + 0.2)));
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 120, buttonWidth, buttonHeight,
                new StringTextComponent("Change Color"),
                button -> {
                    float[] hsv = new float[3];
                    java.awt.Color.RGBtoHSB((snowColor >> 16) & 0xFF, (snowColor >> 8) & 0xFF, snowColor & 0xFF, hsv);
                    hsv[0] = (hsv[0] + 0.1f) % 1.0f;
                    int rgb = java.awt.Color.HSBtoRGB(hsv[0], 0.8f, 1.0f);
                    snowColor = (0xFF << 24) | (rgb & 0x00FFFFFF);
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - buttonWidth/2, startY + 150, buttonWidth, buttonHeight,
                new StringTextComponent("Reset to Default"),
                button -> {
                    particleCountSlider = 0.5f;
                    particleSizeSlider = 0.5f;
                    particleSpeedSlider = 0.5f;
                    snowColor = 0xFFFFFFFF;
                }));
           
            this.addButton(new net.minecraft.client.gui.widget.button.Button(centerX - 100, this.height - 30, 200, 20,
                new StringTextComponent("Back"),
                button -> mc.displayGuiScreen(parent)));
        }
       
        @Override
        public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
            renderBackground(matrixStack);
           
            drawCenteredString(matrixStack, this.font, "Snow Settings", this.width / 2, 20, 0xFFFFFF);
           
            int colorBoxX = this.width / 2 + 120;
            int colorBoxY = this.height / 4 + 123;
            DisplayUtils.drawRect(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, snowColor);
            DisplayUtils.drawRectOutline(colorBoxX, colorBoxY, colorBoxX + 20, colorBoxY + 20, 1, 0xFF000000);
           
            super.render(matrixStack, mouseX, mouseY, partialTicks);
           
            Fonts.montserrat.drawText(matrixStack, "Current Color:", colorBoxX - 80, colorBoxY + 5, 0xFFFFFF, 6f);
        }
       
        public boolean isSnowEnabled() {
            return snowEnabled;
        }
       
        public float getParticleCountMultiplier() {
            return particleCountSlider;
        }
       
        public float getParticleSizeMultiplier() {
            return particleSizeSlider * 4 + 0.5f;
        }
       
        public float getParticleSpeedMultiplier() {
            return particleSpeedSlider * 3 + 0.2f;
        }
       
        public int getSnowColor() {
            return snowColor;
        }
    }
}
что за ужас...
 
как же тяжело зайти в гпт и написать что бы на фон добавили снежинки
так ты прикинь он взял просто пнг картинку и добавил снежинки если да так то это раскумар
 
Назад
Сверху Снизу