Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Визуальная часть MainMenu | 3.1

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
5 Окт 2025
Сообщения
20
Реакции
0
Выберите загрузчик игры
  1. Прочие моды
Дарова югейм,
Для вас я сделал MainMenu
С кнопками снизу справа.

Может кому то зайдет,а кому то и нет!


SS:

1763289878974.png





DW:


MainMenu:
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.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.AllArgsConstructor;
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.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;

import java.util.ArrayList;
import java.util.List;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final List<Button> buttons = new ArrayList<>();

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);
        buttons.clear();
        float buttonWidth = 130;
        float buttonHeight = 30;
        float spacing = 6;
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        float x = w - buttonWidth - 16;
        float y = h - (buttonHeight + spacing) * 4 - 16;

        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        DisplayUtils.drawImage(backmenu, 0, 0, w, h, -1);

        KawaseBlur.blur.updateBlur(5.0f, 3);

        for (Button button : buttons) {
            button.render(matrixStack, mouseX, mouseY);
        }

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

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        Vec2i fixed = ClientUtil.getMouse((int) mouseX, (int) mouseY);
        buttons.forEach(b -> b.click(fixed.getX(), fixed.getY(), button));
        Expensive.getInstance().getAltWidget().click(fixed.getX(), fixed.getY(), button);
        return true;
    }

    @Override
    public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
        Expensive.getInstance().getAltWidget().updateScroll((int) mouseX, (int) mouseY, (float) delta);
        return true;
    }

    @Override
    public boolean charTyped(char codePoint, int modifiers) {
        Expensive.getInstance().getAltWidget().onChar(codePoint);
        return true;
    }

    @Override
    public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
        Expensive.getInstance().getAltWidget().onKey(keyCode);
        return true;
    }

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

        public void render(MatrixStack stack, int mouseX, int mouseY) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgb(255, 255, 255));
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgba(0, 0, 0, hovered ? 210 : 180));

            int color = hovered ? ColorUtils.rgb(255, 255, 255) : ColorUtils.rgb(210, 210, 210);
            Fonts.montserrat.drawCenteredText(stack, text, x + width / 2f, y + height / 2f - 4.5f, color, 9f);
        }

        public void click(int mouseX, int mouseY, int button) {
            if (MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }
}
 
Дарова югейм,
Для вас я сделал MainMenu
С кнопками снизу справа.

Может кому то зайдет,а кому то и нет!


SS:

Посмотреть вложение 320135




DW:


MainMenu:
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.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.AllArgsConstructor;
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.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;

import java.util.ArrayList;
import java.util.List;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final List<Button> buttons = new ArrayList<>();

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);
        buttons.clear();
        float buttonWidth = 130;
        float buttonHeight = 30;
        float spacing = 6;
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        float x = w - buttonWidth - 16;
        float y = h - (buttonHeight + spacing) * 4 - 16;

        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        DisplayUtils.drawImage(backmenu, 0, 0, w, h, -1);

        KawaseBlur.blur.updateBlur(5.0f, 3);

        for (Button button : buttons) {
            button.render(matrixStack, mouseX, mouseY);
        }

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

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        Vec2i fixed = ClientUtil.getMouse((int) mouseX, (int) mouseY);
        buttons.forEach(b -> b.click(fixed.getX(), fixed.getY(), button));
        Expensive.getInstance().getAltWidget().click(fixed.getX(), fixed.getY(), button);
        return true;
    }

    @Override
    public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
        Expensive.getInstance().getAltWidget().updateScroll((int) mouseX, (int) mouseY, (float) delta);
        return true;
    }

    @Override
    public boolean charTyped(char codePoint, int modifiers) {
        Expensive.getInstance().getAltWidget().onChar(codePoint);
        return true;
    }

    @Override
    public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
        Expensive.getInstance().getAltWidget().onKey(keyCode);
        return true;
    }

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

        public void render(MatrixStack stack, int mouseX, int mouseY) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgb(255, 255, 255));
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgba(0, 0, 0, hovered ? 210 : 180));

            int color = hovered ? ColorUtils.rgb(255, 255, 255) : ColorUtils.rgb(210, 210, 210);
            Fonts.montserrat.drawCenteredText(stack, text, x + width / 2f, y + height / 2f - 4.5f, color, 9f);
        }

        public void click(int mouseX, int mouseY, int button) {
            if (MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }
}
Дожили блять:roflanEbalo:
 
они фактят, зачем заливать на форум это вообще, в чём проблема просто две цифры на другие поменять?
ну а кто вдруг не знает как раз какие там цифры делать? я для таких сделал
 
Дарова югейм,
Для вас я сделал MainMenu
С кнопками снизу справа.

Может кому то зайдет,а кому то и нет!


SS:

Посмотреть вложение 320135




DW:


MainMenu:
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.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.AllArgsConstructor;
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.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;

import java.util.ArrayList;
import java.util.List;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final List<Button> buttons = new ArrayList<>();

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);
        buttons.clear();
        float buttonWidth = 130;
        float buttonHeight = 30;
        float spacing = 6;
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        float x = w - buttonWidth - 16;
        float y = h - (buttonHeight + spacing) * 4 - 16;

        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        DisplayUtils.drawImage(backmenu, 0, 0, w, h, -1);

        KawaseBlur.blur.updateBlur(5.0f, 3);

        for (Button button : buttons) {
            button.render(matrixStack, mouseX, mouseY);
        }

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

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        Vec2i fixed = ClientUtil.getMouse((int) mouseX, (int) mouseY);
        buttons.forEach(b -> b.click(fixed.getX(), fixed.getY(), button));
        Expensive.getInstance().getAltWidget().click(fixed.getX(), fixed.getY(), button);
        return true;
    }

    @Override
    public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
        Expensive.getInstance().getAltWidget().updateScroll((int) mouseX, (int) mouseY, (float) delta);
        return true;
    }

    @Override
    public boolean charTyped(char codePoint, int modifiers) {
        Expensive.getInstance().getAltWidget().onChar(codePoint);
        return true;
    }

    @Override
    public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
        Expensive.getInstance().getAltWidget().onKey(keyCode);
        return true;
    }

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

        public void render(MatrixStack stack, int mouseX, int mouseY) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgb(255, 255, 255));
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgba(0, 0, 0, hovered ? 210 : 180));

            int color = hovered ? ColorUtils.rgb(255, 255, 255) : ColorUtils.rgb(210, 210, 210);
            Fonts.montserrat.drawCenteredText(stack, text, x + width / 2f, y + height / 2f - 4.5f, color, 9f);
        }

        public void click(int mouseX, int mouseY, int button) {
            if (MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }
}
/del докатились. НАХУЙ такое выкладывать? я молю тебя удали браузер и перегрызи кабель интернета, тупой и никчёмный мудоёб.
ну а кто вдруг не знает как раз какие там цифры делать? я для таких сделал
если не знать какие там "цифры делать", то это уже главный признак умственно отсталого мышления. ты тут даже не показал нихуя, а лишь дал готовый код который никому не всрался блять.
 
Дарова югейм,
Для вас я сделал MainMenu
С кнопками снизу справа.

Может кому то зайдет,а кому то и нет!


SS:

Посмотреть вложение 320135




DW:


MainMenu:
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.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.AllArgsConstructor;
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.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;

import java.util.ArrayList;
import java.util.List;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final List<Button> buttons = new ArrayList<>();

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);
        buttons.clear();
        float buttonWidth = 130;
        float buttonHeight = 30;
        float spacing = 6;
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        float x = w - buttonWidth - 16;
        float y = h - (buttonHeight + spacing) * 4 - 16;

        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        DisplayUtils.drawImage(backmenu, 0, 0, w, h, -1);

        KawaseBlur.blur.updateBlur(5.0f, 3);

        for (Button button : buttons) {
            button.render(matrixStack, mouseX, mouseY);
        }

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

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        Vec2i fixed = ClientUtil.getMouse((int) mouseX, (int) mouseY);
        buttons.forEach(b -> b.click(fixed.getX(), fixed.getY(), button));
        Expensive.getInstance().getAltWidget().click(fixed.getX(), fixed.getY(), button);
        return true;
    }

    @Override
    public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
        Expensive.getInstance().getAltWidget().updateScroll((int) mouseX, (int) mouseY, (float) delta);
        return true;
    }

    @Override
    public boolean charTyped(char codePoint, int modifiers) {
        Expensive.getInstance().getAltWidget().onChar(codePoint);
        return true;
    }

    @Override
    public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
        Expensive.getInstance().getAltWidget().onKey(keyCode);
        return true;
    }

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

        public void render(MatrixStack stack, int mouseX, int mouseY) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgb(255, 255, 255));
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgba(0, 0, 0, hovered ? 210 : 180));

            int color = hovered ? ColorUtils.rgb(255, 255, 255) : ColorUtils.rgb(210, 210, 210);
            Fonts.montserrat.drawCenteredText(stack, text, x + width / 2f, y + height / 2f - 4.5f, color, 9f);
        }

        public void click(int mouseX, int mouseY, int button) {
            if (MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }
}
как всегда дрисня продолжай быть немощем
 
Дарова югейм,
Для вас я сделал MainMenu
С кнопками снизу справа.

Может кому то зайдет,а кому то и нет!


SS:

Посмотреть вложение 320135




DW:


MainMenu:
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.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.AllArgsConstructor;
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.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;

import java.util.ArrayList;
import java.util.List;

public class MainScreen extends Screen implements IMinecraft {

    private final ResourceLocation backmenu = new ResourceLocation("expensive/images/backmenu.png");
    private final List<Button> buttons = new ArrayList<>();

    public MainScreen() {
        super(ITextComponent.getTextComponentOrEmpty(""));
    }

    @Override
    public void init(Minecraft minecraft, int width, int height) {
        super.init(minecraft, width, height);
        buttons.clear();
        float buttonWidth = 130;
        float buttonHeight = 30;
        float spacing = 6;
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        float x = w - buttonWidth - 16;
        float y = h - (buttonHeight + spacing) * 4 - 16;

        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Singleplayer", () -> mc.displayGuiScreen(new WorldSelectionScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Multiplayer", () -> mc.displayGuiScreen(new MultiplayerScreen(this))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Options", () -> mc.displayGuiScreen(new OptionsScreen(this, mc.gameSettings))));
        y += buttonHeight + spacing;
        buttons.add(new Button(x, y, buttonWidth, buttonHeight, "Exit", mc::shutdownMinecraftApplet));
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        MainWindow window = mc.getMainWindow();
        int w = ClientUtil.calc(window.getScaledWidth());
        int h = ClientUtil.calc(window.getScaledHeight());

        DisplayUtils.drawImage(backmenu, 0, 0, w, h, -1);

        KawaseBlur.blur.updateBlur(5.0f, 3);

        for (Button button : buttons) {
            button.render(matrixStack, mouseX, mouseY);
        }

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

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        Vec2i fixed = ClientUtil.getMouse((int) mouseX, (int) mouseY);
        buttons.forEach(b -> b.click(fixed.getX(), fixed.getY(), button));
        Expensive.getInstance().getAltWidget().click(fixed.getX(), fixed.getY(), button);
        return true;
    }

    @Override
    public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
        Expensive.getInstance().getAltWidget().updateScroll((int) mouseX, (int) mouseY, (float) delta);
        return true;
    }

    @Override
    public boolean charTyped(char codePoint, int modifiers) {
        Expensive.getInstance().getAltWidget().onChar(codePoint);
        return true;
    }

    @Override
    public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
        Expensive.getInstance().getAltWidget().onKey(keyCode);
        return true;
    }

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

        public void render(MatrixStack stack, int mouseX, int mouseY) {
            boolean hovered = MathUtil.isHovered(mouseX, mouseY, x, y, width, height);

            Stencil.initStencilToWrite();
            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgb(255, 255, 255));
            Stencil.readStencilBuffer(1);
            KawaseBlur.blur.BLURRED.draw();
            Stencil.uninitStencilBuffer();

            DisplayUtils.drawRoundedRect(x, y, width, height, 5, ColorUtils.rgba(0, 0, 0, hovered ? 210 : 180));

            int color = hovered ? ColorUtils.rgb(255, 255, 255) : ColorUtils.rgb(210, 210, 210);
            Fonts.montserrat.drawCenteredText(stack, text, x + width / 2f, y + height / 2f - 4.5f, color, 9f);
        }

        public void click(int mouseX, int mouseY, int button) {
            if (MathUtil.isHovered(mouseX, mouseY, x, y, width, height)) {
                action.run();
            }
        }
    }
}
в чём сложность заключалась в изменении расположения кнопок?
 
Назад
Сверху Снизу