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

Вопрос Click Gui 1.21.4

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
1 Мар 2024
Сообщения
3
Реакции
0
Всем привет!
Хочу выучить java,хочу написать свой софт на майнкрафт 1.21.4.
Ранее доводилось писать только софт на станок 2,но там то C# , это было легко.
Пытался по гайдам с ютуба,ушло 9 часов ниче не смог сделать. Нейронки делают херню. Кто может скинуть полноценный гайд на очень качественную красивую гуи? Ну и объяснить что да как работает,буду благодарен


дс - p1cya

(пока писал код заплакал 2 раза)
 
смотри, создаешь мейн класс гуи который наследует класс Screen, сделай его публичным создай второй класс где уже будешь рендерить саму менюшку (в главном классе применяешь анимацию к примеру), создавай модуль компонент который будет отвечать за рендер модулей и его сеттингов, сделай категории сделай абстрактный класс компонент и делай сеттинги для того же модулькомпонента, вот не большой пример (рендерит обычный квадрат)

MenuScreen:
Expand Collapse Copy
public class MenuScreen extends Screen {
    private final Menu menu;
    private boolean close = false;

    public MenuScreen() {
        super(Text.empty());

        // центрирование
        menu = new Menu((mw.getScaledWidth() - 250) / 2f, (mw.getScaledHeight() - 250) / 2f, 250, 250);
    }

    @Override
    public void render(DrawContext context, int mouseX, int mouseY, float delta) {
        // здесь к примеру можешь добавить учет анимации (close && animation.getValue() <= 0.1)
        if (close) {
            super.close();
            return;
        }

        // так же здесь можно применить для открытии гуи анимацию с помощью matrixstack получить его можно из DrawContext (context.getMatricies())

        menu.render(context, mouseX, mouseY, delta);
    }

    // тут я думаю логически понятно для чего это нужно
    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        menu.mouseClicked(mouseX, mouseY, button);
        return super.mouseClicked(mouseX, mouseY, button);
    }

    @Override
    public boolean mouseReleased(double mouseX, double mouseY, int button) {
        menu.mouseReleased(mouseX, mouseY, button);
        return super.mouseReleased(mouseX, mouseY, button);
    }

    @Override
    public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) {
        menu.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount);
        return super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount);
    }

    @Override
    public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
        menu.keyPressed(keyCode, scanCode, modifiers);
        return super.keyPressed(keyCode, scanCode, modifiers);
    }

    @Override
    public boolean charTyped(char chr, int modifiers) {
        menu.charTyped(chr, modifiers);
        return super.charTyped(chr, modifiers);
    }

    @Override
    public void close() {
        if (!close) {
            close = true;
        }
    }

    // на всякий случай обьясняю: true - при открытии гуи в одиночном мире игра будет замораживаться false - не будет
    @Override
    public boolean shouldPause() {
        return false;
    }
}

Menu:
Expand Collapse Copy
public class Menu {
    @Getter
    @Setter
    private float x, y, width, height;

    public Menu(float x, float y, float width, float height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public void render(DrawContext context, int mouseX, int mouseY, float delta) {
        // здесь твой рендер (оставил свой просто как пример)

        MatrixStack matrix = context.getMatrices();
        Draw2D.rectangle(matrix, x, y, width, height, 4, new Color(0, 0, 0));
    }

    // здесь обрабатываешь нажатия из внешних классов (клавиши миши и тд)
    public void mouseClicked(double mouseX, double mouseY, int button) {
    }

    public void mouseReleased(double mouseX, double mouseY, int button) {
    }

    public void mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) {
    }

    public void keyPressed(int keyCode, int scanCode, int modifiers) {
    }

    public void keyReleased(int keyCode, int scanCode, int modifiers) {
    }

    public void charTyped(char chr, int modifiers) {
    }
}
 
Назад
Сверху Снизу