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

  • Автор темы Автор темы OffiM3n
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
21 Апр 2025
Сообщения
12
Реакции
0

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

можно гайд как сделать кастомную 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
    }
}
прими в дс заявку пж
 
Назад
Сверху Снизу