• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос MainMenu Fabric 1.21 [РЕШЕНО]

  • Автор темы Автор темы OffiM3n
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
21 Апр 2025
Сообщения
12
Реакции
0
можно гайд как сделать кастомную MainMenu? очень хочется сделать чтоб красиво было
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
гпт братан
 
сам класс замены:
Expand Collapse Copy
package com.example.client.screen; //смени на своё расположение 

import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
import net.minecraft.client.gui.screen.option.OptionsScreen;
import net.minecraft.client.gui.screen.world.SelectWorldScreen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;

public class CustomMainMenuScreen extends Screen {

    //дайте пж базу с рендер и шрифт системой на 1.21.5, или документацию хотя бы
    public CustomMainMenuScreen() {
        super(Text.literal("Helpanite, render systemu na 1.21.5 fabric hochu!!!"));
    }

    [USER=1367676]@override[/USER]
    //кнопки
    protected void init() {
        super.init();
        this.addDrawableChild(ButtonWidget.builder(Text.literal("Singleplayer"), button -> {
            if (this.client != null) {
                this.client.setScreen(new SelectWorldScreen(this));
            }
        }).dimensions(this.width / 2 - 100, this.height / 4 + 24, 200, 20).build());

        this.addDrawableChild(ButtonWidget.builder(Text.literal("Multiplayer"), button -> {
            if (this.client != null) {
                this.client.setScreen(new MultiplayerScreen(this));
            }
        }).dimensions(this.width / 2 - 100, this.height / 4 + 48, 200, 20).build());

        this.addDrawableChild(ButtonWidget.builder(Text.literal("Options..."), button -> {
            if (this.client != null) {
                this.client.setScreen(new OptionsScreen(this, this.client.options));
            }
        }).dimensions(this.width / 2 - 100, this.height / 4 + 72, 98, 20).build());

        this.addDrawableChild(ButtonWidget.builder(Text.literal("Quit Game"), button -> {
            if (this.client != null) {
                this.client.scheduleStop();
            }
        }).dimensions(this.width / 2 + 2, this.height / 4 + 72, 98, 20).build());
    }
    //если надо что то ещё дс " sxdpandora "

    [USER=1367676]@override[/USER]
    public boolean shouldCloseOnEsc() {
        return false;
    }
}


сам миксин (перехват, хук) дефолтного main menu маина, его замена, и отмена:
Expand Collapse Copy
package com.example.mixin.client;

import com.example.client.screen.CustomMainMenuScreen; //на своё расположение смени, я ради тебя 1.21 скачал, надеюсь на спасибо :3
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleScreen.class)
public abstract class TitleScreenMixin extends Screen {
    protected TitleScreenMixin(Text title) {
        super(title);
    }

    @Inject(method = "init", at = @At("HEAD"), cancellable = true)
    private void onInit(CallbackInfo ci) {
        MinecraftClient.getInstance().setScreen(new CustomMainMenuScreen());
        ci.cancel();
    }
}


ну и зарегай миксин, в миксин регистрации, в resources находится файл .json, вот его надо:
Expand Collapse Copy
{
    "required": true,
    "package": "com.example.mixin.client",
    "compatibilityLevel": "JAVA_21",
    "client": [
        "ExampleClientMixin",
        "TitleScreenMixin"
    ],
    "injectors": {
        "defaultRequire": 1
    }
}
 
Последнее редактирование:
сам класс замены:
Expand Collapse Copy
package com.example.client.screen; //смени на своё расположение

import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
import net.minecraft.client.gui.screen.option.OptionsScreen;
import net.minecraft.client.gui.screen.world.SelectWorldScreen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;

public class CustomMainMenuScreen extends Screen {

    //дайте пж базу с рендер и шрифт системой на 1.21.5, или документацию хотя бы
    public CustomMainMenuScreen() {
        super(Text.literal("Helpanite, render systemu na 1.21.5 fabric hochu!!!"));
    }

    [USER=1367676]@override[/USER]
    //кнопки
    protected void init() {
        super.init();
        this.addDrawableChild(ButtonWidget.builder(Text.literal("Singleplayer"), button -> {
            if (this.client != null) {
                this.client.setScreen(new SelectWorldScreen(this));
            }
        }).dimensions(this.width / 2 - 100, this.height / 4 + 24, 200, 20).build());

        this.addDrawableChild(ButtonWidget.builder(Text.literal("Multiplayer"), button -> {
            if (this.client != null) {
                this.client.setScreen(new MultiplayerScreen(this));
            }
        }).dimensions(this.width / 2 - 100, this.height / 4 + 48, 200, 20).build());

        this.addDrawableChild(ButtonWidget.builder(Text.literal("Options..."), button -> {
            if (this.client != null) {
                this.client.setScreen(new OptionsScreen(this, this.client.options));
            }
        }).dimensions(this.width / 2 - 100, this.height / 4 + 72, 98, 20).build());

        this.addDrawableChild(ButtonWidget.builder(Text.literal("Quit Game"), button -> {
            if (this.client != null) {
                this.client.scheduleStop();
            }
        }).dimensions(this.width / 2 + 2, this.height / 4 + 72, 98, 20).build());
    }
    //если надо что то ещё дс " sxdpandora "

    [USER=1367676]@override[/USER]
    public boolean shouldCloseOnEsc() {
        return false;
    }
}


сам миксин (перехват, хук) дефолтного main menu маина, его замена, и отмена:
Expand Collapse Copy
package com.example.mixin.client;

import com.example.client.screen.CustomMainMenuScreen; //на своё расположение смени, я ради тебя 1.21 скачал, надеюсь на спасибо :3
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleScreen.class)
public abstract class TitleScreenMixin extends Screen {
    protected TitleScreenMixin(Text title) {
        super(title);
    }

    @Inject(method = "init", at = @At("HEAD"), cancellable = true)
    private void onInit(CallbackInfo ci) {
        MinecraftClient.getInstance().setScreen(new CustomMainMenuScreen());
        ci.cancel();
    }
}


ну и зарегай миксин, в миксин регистрации, в resources находится файл .json, вот его надо:
Expand Collapse Copy
{
    "required": true,
    "package": "com.example.mixin.client",
    "compatibilityLevel": "JAVA_21",
    "client": [
        "ExampleClientMixin",
        "TitleScreenMixin"
    ],
    "injectors": {
        "defaultRequire": 1
    }
}
спасеба
сам класс замены:
Expand Collapse Copy
package com.example.client.screen; //смени на своё расположение

import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
import net.minecraft.client.gui.screen.option.OptionsScreen;
import net.minecraft.client.gui.screen.world.SelectWorldScreen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;

public class CustomMainMenuScreen extends Screen {

    //дайте пж базу с рендер и шрифт системой на 1.21.5, или документацию хотя бы
    public CustomMainMenuScreen() {
        super(Text.literal("Helpanite, render systemu na 1.21.5 fabric hochu!!!"));
    }

    [USER=1367676]@override[/USER]
    //кнопки
    protected void init() {
        super.init();
        this.addDrawableChild(ButtonWidget.builder(Text.literal("Singleplayer"), button -> {
            if (this.client != null) {
                this.client.setScreen(new SelectWorldScreen(this));
            }
        }).dimensions(this.width / 2 - 100, this.height / 4 + 24, 200, 20).build());

        this.addDrawableChild(ButtonWidget.builder(Text.literal("Multiplayer"), button -> {
            if (this.client != null) {
                this.client.setScreen(new MultiplayerScreen(this));
            }
        }).dimensions(this.width / 2 - 100, this.height / 4 + 48, 200, 20).build());

        this.addDrawableChild(ButtonWidget.builder(Text.literal("Options..."), button -> {
            if (this.client != null) {
                this.client.setScreen(new OptionsScreen(this, this.client.options));
            }
        }).dimensions(this.width / 2 - 100, this.height / 4 + 72, 98, 20).build());

        this.addDrawableChild(ButtonWidget.builder(Text.literal("Quit Game"), button -> {
            if (this.client != null) {
                this.client.scheduleStop();
            }
        }).dimensions(this.width / 2 + 2, this.height / 4 + 72, 98, 20).build());
    }
    //если надо что то ещё дс " sxdpandora "

    [USER=1367676]@override[/USER]
    public boolean shouldCloseOnEsc() {
        return false;
    }
}


сам миксин (перехват, хук) дефолтного main menu маина, его замена, и отмена:
Expand Collapse Copy
package com.example.mixin.client;

import com.example.client.screen.CustomMainMenuScreen; //на своё расположение смени, я ради тебя 1.21 скачал, надеюсь на спасибо :3
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleScreen.class)
public abstract class TitleScreenMixin extends Screen {
    protected TitleScreenMixin(Text title) {
        super(title);
    }

    @Inject(method = "init", at = @At("HEAD"), cancellable = true)
    private void onInit(CallbackInfo ci) {
        MinecraftClient.getInstance().setScreen(new CustomMainMenuScreen());
        ci.cancel();
    }
}


ну и зарегай миксин, в миксин регистрации, в resources находится файл .json, вот его надо:
Expand Collapse Copy
{
    "required": true,
    "package": "com.example.mixin.client",
    "compatibilityLevel": "JAVA_21",
    "client": [
        "ExampleClientMixin",
        "TitleScreenMixin"
    ],
    "injectors": {
        "defaultRequire": 1
    }
}
прими в дс заявку пж
 
Назад
Сверху Снизу