• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Гайд Гайд на AltManager + MainMenu 3.1 expensive

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
19 Май 2025
Сообщения
196
Реакции
0
Всем салам!
Делаю для вас гайд на MainMenu и AltManager
приступаем
1:нажимаем CTRL + SHIFT + R и в 1 поле пишем
new MainScreen
и во 2
new MainMenuScreen
от так как на фото
1756589044614.png

шаг
2: Ищем класс MainMenuScreen по пути net.minecraft.client.gui.screen.MainMenuScreen или
тап тут
1756589191125.png
на за лупу
и надо написать в поле MainMenuScreen от так

и тапаем на класс MainMenuScreen.java
и я знаю што щяс начнете а ет куда а у меня такого нету от вам код если че пишите (код у MainMenuScreen вставлять)

Java:
Expand Collapse Copy
package net.minecraft.client.gui.screen;

import com.google.common.util.concurrent.Runnables;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import wtf.star.altmanager.AccountManagement;
import wtf.star.utils.render.DisplayUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.AccessibilityScreen;
import net.minecraft.client.gui.DialogTexts;
import net.minecraft.client.gui.toasts.SystemToast;
import net.minecraft.client.gui.widget.Widget;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.client.renderer.RenderSkybox;
import net.minecraft.client.renderer.RenderSkyboxCube;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.resources.I18n;
import net.minecraft.realms.RealmsBridgeScreen;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SharedConstants;
import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.registry.DynamicRegistries;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.gen.settings.DimensionGeneratorSettings;
import net.minecraft.world.storage.SaveFormat;
import net.minecraft.world.storage.WorldSummary;
import net.optifine.reflect.Reflector;
import net.optifine.reflect.ReflectorForge;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.annotation.Nullable;
import java.io.IOException;
import java.util.Random;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.BiConsumer;

public class MainMenuScreen extends Screen {
    private static final Logger field_238656_b_ = LogManager.getLogger();
    public static final RenderSkyboxCube PANORAMA_RESOURCES = new RenderSkyboxCube(new ResourceLocation("textures/gui/title/background/panorama"));
    private static final ResourceLocation PANORAMA_OVERLAY_TEXTURES = new ResourceLocation("textures/gui/title/background/backmenu.png");
    private static final ResourceLocation CUSTOM_LOGO = new ResourceLocation("minecraft", "textures/gui/title/edition.png");
    // Дорога к лого для тебя пастерок написал (щяс начнете што я тож пастер а мне пох " Я просто делаю свой клиент, я свободный человек, пасщю что хочу"
    private static final ResourceLocation MINECRAFT_TITLE_EDITION = new ResourceLocation("textures/gui/title/edition.png");

    private final boolean showTitleWronglySpelled;
    @Nullable
    private String splashText;
    private Button buttonResetDemo;
    private boolean hasCheckedForRealmsNotification;
    private Screen realmsNotification;
    private int widthCopyright;
    private int widthCopyrightRest;
    private final RenderSkybox panorama = new RenderSkybox(PANORAMA_RESOURCES);
    private final boolean showFadeInAnimation;
    private long firstRenderTime;
    private Screen modUpdateNotification;

    public MainMenuScreen() {
        this(false);
    }

    public MainMenuScreen(boolean fadeIn) {
        super(new TranslationTextComponent("narrator.screen.title"));
        this.showFadeInAnimation = fadeIn;
        this.showTitleWronglySpelled = (double) (new Random()).nextFloat() < 1.0E-4D;
    }

    private boolean areRealmsNotificationsEnabled() {
        return this.minecraft.gameSettings.realmsNotifications && this.realmsNotification != null;
    }

    public void tick() {
        if (this.areRealmsNotificationsEnabled()) {
            this.realmsNotification.tick();
        }
    }

    public static CompletableFuture<Void> loadAsync(TextureManager texMngr, Executor backgroundExecutor) {
        return CompletableFuture.allOf(
                texMngr.loadAsync(CUSTOM_LOGO, backgroundExecutor),
                texMngr.loadAsync(MINECRAFT_TITLE_EDITION, backgroundExecutor),
                texMngr.loadAsync(PANORAMA_OVERLAY_TEXTURES, backgroundExecutor),
                PANORAMA_RESOURCES.loadAsync(texMngr, backgroundExecutor)
        );
    }

    public boolean isPauseScreen() {
        return false;
    }

    public boolean shouldCloseOnEsc() {
        return false;
    }

    protected void init() {
        this.widthCopyright = this.font.getStringWidth("Copyright Mojang AB. Do not distribute!");
        this.widthCopyrightRest = this.width - this.widthCopyright - 2;
        int i = 24;
        int j = this.height / 4 + 48;
        Button button = null;

        if (this.minecraft.isDemo()) {
            this.addDemoButtons(j, 24);
        } else {
            this.addSingleplayerMultiplayerButtons(j, 24);

            if (Reflector.ModListScreen_Constructor.exists()) {
                button = ReflectorForge.makeButtonMods(this, j, 24);
                this.addButton(button);
            }
        }

        this.addButton(new Button(this.width / 2 - 100, j + 72 + 2, 98, 20, new TranslationTextComponent("menu.options"), (p_lambda$init$1_1_) -> {
            this.minecraft.displayGuiScreen(new OptionsScreen(this, this.minecraft.gameSettings));
        }));

        this.addButton(new Button(this.width / 2 - 100, j + 72 + 12 - 35, 200, 20, new TranslationTextComponent("AltManager"), (p_lambda$init$3_1_) -> {
            this.minecraft.displayGuiScreen(new AccountManagement());
        }));

        this.addButton(new Button(this.width / 2 + 2, j + 72 + 2, 98, 20, new TranslationTextComponent("menu.quit"), (p_lambda$init$2_1_) -> {
            this.minecraft.shutdown();
        }));

        this.minecraft.setConnectedToRealms(false);

        if (this.areRealmsNotificationsEnabled()) {
            this.realmsNotification.init(this.minecraft, this.width, this.height);
        }

        if (Reflector.NotificationModUpdateScreen_init.exists()) {
            this.modUpdateNotification = (Screen) Reflector.call(Reflector.NotificationModUpdateScreen_init, this, button);
        }
    }

    private void addSingleplayerMultiplayerButtons(int yIn, int rowHeightIn) {
        this.addButton(new Button(this.width / 2 - 100, yIn, 200, 20, new TranslationTextComponent("menu.singleplayer"), (p_lambda$addSingleplayerMultiplayerButtons$4_1_) -> {
            this.minecraft.displayGuiScreen(new WorldSelectionScreen(this));
        }));

        boolean flag = this.minecraft.isMultiplayerEnabled();
        Button.ITooltip button$itooltip = flag ? Button.field_238486_s_ : (p_lambda$addSingleplayerMultiplayerButtons$5_1_, p_lambda$addSingleplayerMultiplayerButtons$5_2_, p_lambda$addSingleplayerMultiplayerButtons$5_3_, p_lambda$addSingleplayerMultiplayerButtons$5_4_) -> {
            if (!p_lambda$addSingleplayerMultiplayerButtons$5_1_.active) {
                this.renderTooltip(p_lambda$addSingleplayerMultiplayerButtons$5_2_, this.minecraft.fontRenderer.trimStringToWidth(new TranslationTextComponent("title.multiplayer.disabled"), Math.max(this.width / 2 - 43, 170)), p_lambda$addSingleplayerMultiplayerButtons$5_3_, p_lambda$addSingleplayerMultiplayerButtons$5_4_);
            }
        };

        (this.addButton(new Button(this.width / 2 - 100, yIn + rowHeightIn * 1, 200, 20, new TranslationTextComponent("menu.multiplayer"), (p_lambda$addSingleplayerMultiplayerButtons$6_1_) -> {
            Screen screen = (Screen) (this.minecraft.gameSettings.skipMultiplayerWarning ? new MultiplayerScreen(this) : new MultiplayerWarningScreen(this));
            this.minecraft.displayGuiScreen(screen);
        }, button$itooltip))).active = flag;

        if (Reflector.ModListScreen_Constructor.exists() && this.buttons.size() > 0) {
            Widget widget = this.buttons.get(this.buttons.size() - 1);
            widget.x = this.width / 2 + 2;
            widget.setWidth(98);
        }
        float width = Minecraft.getInstance().getMainWindow().getScaledWidth();
        float height = Minecraft.getInstance().getMainWindow().getScaledHeight();

        DisplayUtils.drawImage(new ResourceLocation("star/images/panorama.png"), 0 - 1 , 0 - 1, width + 2, height + 2, -1);
    }

    private void addDemoButtons(int yIn, int rowHeightIn) {
        boolean flag = this.func_243319_k();
        this.addButton(new Button(this.width / 2 - 100, yIn, 200, 20, new TranslationTextComponent("menu.playdemo"), (p_lambda$addDemoButtons$8_2_) -> {
            if (flag) {
                this.minecraft.loadWorld("Demo_World");
            } else {
                DynamicRegistries.Impl dynamicregistries$impl = DynamicRegistries.func_239770_b_();
                this.minecraft.createWorld("Demo_World", MinecraftServer.DEMO_WORLD_SETTINGS, dynamicregistries$impl, DimensionGeneratorSettings.func_242752_a(dynamicregistries$impl));
            }
        }));

        this.buttonResetDemo = this.addButton(new Button(this.width / 2 - 100, yIn + rowHeightIn * 1, 200, 20, new TranslationTextComponent("menu.resetdemo"), (p_lambda$addDemoButtons$9_1_) -> {
            SaveFormat saveformat = this.minecraft.getSaveLoader();

            try (SaveFormat.LevelSave saveformat$levelsave = saveformat.getLevelSave("Demo_World")) {
                WorldSummary worldsummary = saveformat$levelsave.readWorldSummary();

                if (worldsummary != null) {
                    this.minecraft.displayGuiScreen(new ConfirmScreen(this::deleteDemoWorld, new TranslationTextComponent("selectWorld.deleteQuestion"), new TranslationTextComponent("selectWorld.deleteWarning", worldsummary.getDisplayName()), new TranslationTextComponent("selectWorld.deleteButton"), DialogTexts.GUI_CANCEL));
                }
            } catch (IOException ioexception1) {
                SystemToast.func_238535_a_(this.minecraft, "Demo_World");
                field_238656_b_.warn("Failed to access demo world", (Throwable) ioexception1);
            }
        }));
        this.buttonResetDemo.active = flag;
    }

    private boolean func_243319_k() {
        try (SaveFormat.LevelSave saveformat$levelsave = this.minecraft.getSaveLoader().getLevelSave("Demo_World")) {
            return saveformat$levelsave.readWorldSummary() != null;
        } catch (IOException ioexception1) {
            SystemToast.func_238535_a_(this.minecraft, "Demo_World");
            field_238656_b_.warn("Failed to read demo world data", (Throwable) ioexception1);
            return false;
        }
    }

    private void switchToRealms() {
        RealmsBridgeScreen realmsbridgescreen = new RealmsBridgeScreen();
        realmsbridgescreen.func_231394_a_(this);
    }

    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        if (this.firstRenderTime == 0L && this.showFadeInAnimation) {
            this.firstRenderTime = Util.milliTime();
        }

        float f = this.showFadeInAnimation ? (float) (Util.milliTime() - this.firstRenderTime) / 1000.0F : 1.0F;

        this.panorama.render(partialTicks, 1.0F);

        GlStateManager.disableDepthTest();
        fill(matrixStack, 0, 0, this.width, this.height, -1);

        this.minecraft.getTextureManager().bindTexture(PANORAMA_OVERLAY_TEXTURES);
        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
        RenderSystem.color4f(1.0F, 1.0F, 1.0F, this.showFadeInAnimation ? (float) MathHelper.ceil(MathHelper.clamp(f, 0.0F, 1.0F)) : 1.0F);
        blit(matrixStack, 0, 0, this.width, this.height, 0.0F, 0.0F, 16, 128, 16, 128);
        float f1 = this.showFadeInAnimation ? MathHelper.clamp(f - 1.0F, 0.0F, 1.0F) : 1.0F;
        int l = MathHelper.ceil(f1 * 255.0F) << 24;

        if ((l & -67108864) != 0) {
            this.minecraft.getTextureManager().bindTexture(CUSTOM_LOGO);
            RenderSystem.color4f(1.0F, 1.0F, 1.0F, f1);
            int logoWidth = 275;
            int logoHeight = 44;
            blit(matrixStack, this.width / 2 - logoWidth/2, 30, 0, 0, logoWidth, logoHeight, logoWidth, logoHeight);

            String s = "https://t.me/StarClientMinecraft";

            if (Reflector.ForgeHooksClient_renderMainMenu.exists()) {
                Reflector.callVoid(Reflector.ForgeHooksClient_renderMainMenu, this, matrixStack, this.font, this.width, this.height, l);
            }

            if (Reflector.BrandingControl.exists()) {
                if (Reflector.BrandingControl_forEachLine.exists()) {
                    BiConsumer<Integer, String> biconsumer = (p_lambda$render$12_3_, p_lambda$render$12_4_) -> {
                        drawString(matrixStack, this.font, p_lambda$render$12_4_, 2, this.height - (10 + p_lambda$render$12_3_ * (9 + 1)), 16777215 | l);
                    };
                    Reflector.call(Reflector.BrandingControl_forEachLine, true, true, biconsumer);
                }

                if (Reflector.BrandingControl_forEachAboveCopyrightLine.exists()) {
                    BiConsumer<Integer, String> biconsumer1 = (p_lambda$render$13_3_, p_lambda$render$13_4_) -> {
                        drawString(matrixStack, this.font, p_lambda$render$13_4_, this.width - this.font.getStringWidth(p_lambda$render$13_4_), this.height - (10 + (p_lambda$render$13_3_ + 1) * (9 + 1)), 16777215 | l);
                    };
                    Reflector.call(Reflector.BrandingControl_forEachAboveCopyrightLine, biconsumer1);
                }
            } else {
                drawString(matrixStack, this.font, s, 2, this.height - 10, 16777215 | l);
            }

            if (mouseX > this.widthCopyrightRest && mouseX < this.widthCopyrightRest + this.widthCopyright && mouseY > this.height - 10 && mouseY < this.height) {
                fill(matrixStack, this.widthCopyrightRest, this.height - 1, this.widthCopyrightRest + this.widthCopyright, this.height, 16777215 | l);
            }

            for (Widget widget : this.buttons) {
                widget.setAlpha(f1);
            }

            super.render(matrixStack, mouseX, mouseY, partialTicks);

            if (this.areRealmsNotificationsEnabled() && f1 >= 1.0F) {
                this.realmsNotification.render(matrixStack, mouseX, mouseY, partialTicks);
            }
        }

        if (this.modUpdateNotification != null) {
            this.modUpdateNotification.render(matrixStack, mouseX, mouseY, partialTicks);
        }
    }

    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        if (super.mouseClicked(mouseX, mouseY, button)) {
            return true;
        } else if (this.areRealmsNotificationsEnabled() && this.realmsNotification.mouseClicked(mouseX, mouseY, button)) {
            return true;
        } else {
            if (mouseX > (double) this.widthCopyrightRest && mouseX < (double) (this.widthCopyrightRest + this.widthCopyright) && mouseY > (double) (this.height - 10) && mouseY < (double) this.height) {
                this.minecraft.displayGuiScreen(new WinGameScreen(false, Runnables.doNothing()));
            }

            return false;
        }
    }

    public void onClose() {
        if (this.realmsNotification != null) {
            this.realmsNotification.onClose();
        }
    }

    private void deleteDemoWorld(boolean p_213087_1_) {
        if (p_213087_1_) {
            try (SaveFormat.LevelSave saveformat$levelsave = this.minecraft.getSaveLoader().getLevelSave("Demo_World")) {
                saveformat$levelsave.deleteSave();
            } catch (IOException ioexception1) {
                SystemToast.func_238538_b_(this.minecraft, "Demo_World");
                field_238656_b_.warn("Failed to delete demo world", (Throwable) ioexception1);
            }
        }

        this.minecraft.displayGuiScreen(this);
    }

}

так запастили и захотели писать там ошибка дай то и то
он вам то что надо вам в сурс закинуть от например
src im.expensive или как у вас там
качаем архив с альт менеджером и пастим куда я сказал више архив:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(как всегда noad) и пароль SuckS1de
если что то нету пишите
ет имба вариант альт менеджер он не виснет как в многих читах тот маленький от например у харуке (noad) зависает
скрин альт менеджера
1756590341187.png

1756590359962.png

администрация я вас люблю особенно lustman или как его там ток не делитай тему я ее 10 мин писал
 

Вложения

  • 1756589298298.png
    1756589298298.png
    14.4 KB · Просмотры: 92
Последнее редактирование:
ну скорее
 
ну бля у меня мозги скоро гнить начнут от такого контента
 
что делать если нету фона?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ну не очень я лудше зделал и я пишу свою базу 1.16.5 mcp
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
причем тут весенс чит димочки харди мне не нужен я свою базу пишу а ты таки останешся пастер на своем стар клиенте кстати у меня еще експа 3.1 там тоже все дописано гуи худ альт майн меню баритон прокси виа
ты мох спокойно взять код от деф mcp и туда вписать альт менеджер было бы красиво а не через пнг и с другим названием майна
Всем салам!
Делаю для вас гайд на MainMenu и AltManager
приступаем
1:нажимаем CTRL + SHIFT + R и в 1 поле пишем
new MainScreen
и во 2
new MainMenuScreen
от так как на фото
Посмотреть вложение 314617
шаг
2: Ищем класс MainMenuScreen по пути net.minecraft.client.gui.screen.MainMenuScreen или
тап тут Посмотреть вложение 314618 на за лупу
и надо написать в поле MainMenuScreen от так

и тапаем на класс MainMenuScreen.java
и я знаю што щяс начнете а ет куда а у меня такого нету от вам код если че пишите (код у MainMenuScreen вставлять)

Java:
Expand Collapse Copy
package net.minecraft.client.gui.screen;

import com.google.common.util.concurrent.Runnables;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import wtf.star.altmanager.AccountManagement;
import wtf.star.utils.render.DisplayUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.AccessibilityScreen;
import net.minecraft.client.gui.DialogTexts;
import net.minecraft.client.gui.toasts.SystemToast;
import net.minecraft.client.gui.widget.Widget;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.client.renderer.RenderSkybox;
import net.minecraft.client.renderer.RenderSkyboxCube;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.resources.I18n;
import net.minecraft.realms.RealmsBridgeScreen;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SharedConstants;
import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.registry.DynamicRegistries;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.gen.settings.DimensionGeneratorSettings;
import net.minecraft.world.storage.SaveFormat;
import net.minecraft.world.storage.WorldSummary;
import net.optifine.reflect.Reflector;
import net.optifine.reflect.ReflectorForge;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.annotation.Nullable;
import java.io.IOException;
import java.util.Random;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.BiConsumer;

public class MainMenuScreen extends Screen {
    private static final Logger field_238656_b_ = LogManager.getLogger();
    public static final RenderSkyboxCube PANORAMA_RESOURCES = new RenderSkyboxCube(new ResourceLocation("textures/gui/title/background/panorama"));
    private static final ResourceLocation PANORAMA_OVERLAY_TEXTURES = new ResourceLocation("textures/gui/title/background/backmenu.png");
    private static final ResourceLocation CUSTOM_LOGO = new ResourceLocation("minecraft", "textures/gui/title/edition.png");
    // Дорога к лого для тебя пастерок написал (щяс начнете што я тож пастер а мне пох " Я просто делаю свой клиент, я свободный человек, пасщю что хочу"
    private static final ResourceLocation MINECRAFT_TITLE_EDITION = new ResourceLocation("textures/gui/title/edition.png");

    private final boolean showTitleWronglySpelled;
    @Nullable
    private String splashText;
    private Button buttonResetDemo;
    private boolean hasCheckedForRealmsNotification;
    private Screen realmsNotification;
    private int widthCopyright;
    private int widthCopyrightRest;
    private final RenderSkybox panorama = new RenderSkybox(PANORAMA_RESOURCES);
    private final boolean showFadeInAnimation;
    private long firstRenderTime;
    private Screen modUpdateNotification;

    public MainMenuScreen() {
        this(false);
    }

    public MainMenuScreen(boolean fadeIn) {
        super(new TranslationTextComponent("narrator.screen.title"));
        this.showFadeInAnimation = fadeIn;
        this.showTitleWronglySpelled = (double) (new Random()).nextFloat() < 1.0E-4D;
    }

    private boolean areRealmsNotificationsEnabled() {
        return this.minecraft.gameSettings.realmsNotifications && this.realmsNotification != null;
    }

    public void tick() {
        if (this.areRealmsNotificationsEnabled()) {
            this.realmsNotification.tick();
        }
    }

    public static CompletableFuture<Void> loadAsync(TextureManager texMngr, Executor backgroundExecutor) {
        return CompletableFuture.allOf(
                texMngr.loadAsync(CUSTOM_LOGO, backgroundExecutor),
                texMngr.loadAsync(MINECRAFT_TITLE_EDITION, backgroundExecutor),
                texMngr.loadAsync(PANORAMA_OVERLAY_TEXTURES, backgroundExecutor),
                PANORAMA_RESOURCES.loadAsync(texMngr, backgroundExecutor)
        );
    }

    public boolean isPauseScreen() {
        return false;
    }

    public boolean shouldCloseOnEsc() {
        return false;
    }

    protected void init() {
        this.widthCopyright = this.font.getStringWidth("Copyright Mojang AB. Do not distribute!");
        this.widthCopyrightRest = this.width - this.widthCopyright - 2;
        int i = 24;
        int j = this.height / 4 + 48;
        Button button = null;

        if (this.minecraft.isDemo()) {
            this.addDemoButtons(j, 24);
        } else {
            this.addSingleplayerMultiplayerButtons(j, 24);

            if (Reflector.ModListScreen_Constructor.exists()) {
                button = ReflectorForge.makeButtonMods(this, j, 24);
                this.addButton(button);
            }
        }

        this.addButton(new Button(this.width / 2 - 100, j + 72 + 2, 98, 20, new TranslationTextComponent("menu.options"), (p_lambda$init$1_1_) -> {
            this.minecraft.displayGuiScreen(new OptionsScreen(this, this.minecraft.gameSettings));
        }));

        this.addButton(new Button(this.width / 2 - 100, j + 72 + 12 - 35, 200, 20, new TranslationTextComponent("AltManager"), (p_lambda$init$3_1_) -> {
            this.minecraft.displayGuiScreen(new AccountManagement());
        }));

        this.addButton(new Button(this.width / 2 + 2, j + 72 + 2, 98, 20, new TranslationTextComponent("menu.quit"), (p_lambda$init$2_1_) -> {
            this.minecraft.shutdown();
        }));

        this.minecraft.setConnectedToRealms(false);

        if (this.areRealmsNotificationsEnabled()) {
            this.realmsNotification.init(this.minecraft, this.width, this.height);
        }

        if (Reflector.NotificationModUpdateScreen_init.exists()) {
            this.modUpdateNotification = (Screen) Reflector.call(Reflector.NotificationModUpdateScreen_init, this, button);
        }
    }

    private void addSingleplayerMultiplayerButtons(int yIn, int rowHeightIn) {
        this.addButton(new Button(this.width / 2 - 100, yIn, 200, 20, new TranslationTextComponent("menu.singleplayer"), (p_lambda$addSingleplayerMultiplayerButtons$4_1_) -> {
            this.minecraft.displayGuiScreen(new WorldSelectionScreen(this));
        }));

        boolean flag = this.minecraft.isMultiplayerEnabled();
        Button.ITooltip button$itooltip = flag ? Button.field_238486_s_ : (p_lambda$addSingleplayerMultiplayerButtons$5_1_, p_lambda$addSingleplayerMultiplayerButtons$5_2_, p_lambda$addSingleplayerMultiplayerButtons$5_3_, p_lambda$addSingleplayerMultiplayerButtons$5_4_) -> {
            if (!p_lambda$addSingleplayerMultiplayerButtons$5_1_.active) {
                this.renderTooltip(p_lambda$addSingleplayerMultiplayerButtons$5_2_, this.minecraft.fontRenderer.trimStringToWidth(new TranslationTextComponent("title.multiplayer.disabled"), Math.max(this.width / 2 - 43, 170)), p_lambda$addSingleplayerMultiplayerButtons$5_3_, p_lambda$addSingleplayerMultiplayerButtons$5_4_);
            }
        };

        (this.addButton(new Button(this.width / 2 - 100, yIn + rowHeightIn * 1, 200, 20, new TranslationTextComponent("menu.multiplayer"), (p_lambda$addSingleplayerMultiplayerButtons$6_1_) -> {
            Screen screen = (Screen) (this.minecraft.gameSettings.skipMultiplayerWarning ? new MultiplayerScreen(this) : new MultiplayerWarningScreen(this));
            this.minecraft.displayGuiScreen(screen);
        }, button$itooltip))).active = flag;

        if (Reflector.ModListScreen_Constructor.exists() && this.buttons.size() > 0) {
            Widget widget = this.buttons.get(this.buttons.size() - 1);
            widget.x = this.width / 2 + 2;
            widget.setWidth(98);
        }
        float width = Minecraft.getInstance().getMainWindow().getScaledWidth();
        float height = Minecraft.getInstance().getMainWindow().getScaledHeight();

        DisplayUtils.drawImage(new ResourceLocation("star/images/panorama.png"), 0 - 1 , 0 - 1, width + 2, height + 2, -1);
    }

    private void addDemoButtons(int yIn, int rowHeightIn) {
        boolean flag = this.func_243319_k();
        this.addButton(new Button(this.width / 2 - 100, yIn, 200, 20, new TranslationTextComponent("menu.playdemo"), (p_lambda$addDemoButtons$8_2_) -> {
            if (flag) {
                this.minecraft.loadWorld("Demo_World");
            } else {
                DynamicRegistries.Impl dynamicregistries$impl = DynamicRegistries.func_239770_b_();
                this.minecraft.createWorld("Demo_World", MinecraftServer.DEMO_WORLD_SETTINGS, dynamicregistries$impl, DimensionGeneratorSettings.func_242752_a(dynamicregistries$impl));
            }
        }));

        this.buttonResetDemo = this.addButton(new Button(this.width / 2 - 100, yIn + rowHeightIn * 1, 200, 20, new TranslationTextComponent("menu.resetdemo"), (p_lambda$addDemoButtons$9_1_) -> {
            SaveFormat saveformat = this.minecraft.getSaveLoader();

            try (SaveFormat.LevelSave saveformat$levelsave = saveformat.getLevelSave("Demo_World")) {
                WorldSummary worldsummary = saveformat$levelsave.readWorldSummary();

                if (worldsummary != null) {
                    this.minecraft.displayGuiScreen(new ConfirmScreen(this::deleteDemoWorld, new TranslationTextComponent("selectWorld.deleteQuestion"), new TranslationTextComponent("selectWorld.deleteWarning", worldsummary.getDisplayName()), new TranslationTextComponent("selectWorld.deleteButton"), DialogTexts.GUI_CANCEL));
                }
            } catch (IOException ioexception1) {
                SystemToast.func_238535_a_(this.minecraft, "Demo_World");
                field_238656_b_.warn("Failed to access demo world", (Throwable) ioexception1);
            }
        }));
        this.buttonResetDemo.active = flag;
    }

    private boolean func_243319_k() {
        try (SaveFormat.LevelSave saveformat$levelsave = this.minecraft.getSaveLoader().getLevelSave("Demo_World")) {
            return saveformat$levelsave.readWorldSummary() != null;
        } catch (IOException ioexception1) {
            SystemToast.func_238535_a_(this.minecraft, "Demo_World");
            field_238656_b_.warn("Failed to read demo world data", (Throwable) ioexception1);
            return false;
        }
    }

    private void switchToRealms() {
        RealmsBridgeScreen realmsbridgescreen = new RealmsBridgeScreen();
        realmsbridgescreen.func_231394_a_(this);
    }

    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        if (this.firstRenderTime == 0L && this.showFadeInAnimation) {
            this.firstRenderTime = Util.milliTime();
        }

        float f = this.showFadeInAnimation ? (float) (Util.milliTime() - this.firstRenderTime) / 1000.0F : 1.0F;

        this.panorama.render(partialTicks, 1.0F);

        GlStateManager.disableDepthTest();
        fill(matrixStack, 0, 0, this.width, this.height, -1);

        this.minecraft.getTextureManager().bindTexture(PANORAMA_OVERLAY_TEXTURES);
        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
        RenderSystem.color4f(1.0F, 1.0F, 1.0F, this.showFadeInAnimation ? (float) MathHelper.ceil(MathHelper.clamp(f, 0.0F, 1.0F)) : 1.0F);
        blit(matrixStack, 0, 0, this.width, this.height, 0.0F, 0.0F, 16, 128, 16, 128);
        float f1 = this.showFadeInAnimation ? MathHelper.clamp(f - 1.0F, 0.0F, 1.0F) : 1.0F;
        int l = MathHelper.ceil(f1 * 255.0F) << 24;

        if ((l & -67108864) != 0) {
            this.minecraft.getTextureManager().bindTexture(CUSTOM_LOGO);
            RenderSystem.color4f(1.0F, 1.0F, 1.0F, f1);
            int logoWidth = 275;
            int logoHeight = 44;
            blit(matrixStack, this.width / 2 - logoWidth/2, 30, 0, 0, logoWidth, logoHeight, logoWidth, logoHeight);

            String s = "https://t.me/StarClientMinecraft";

            if (Reflector.ForgeHooksClient_renderMainMenu.exists()) {
                Reflector.callVoid(Reflector.ForgeHooksClient_renderMainMenu, this, matrixStack, this.font, this.width, this.height, l);
            }

            if (Reflector.BrandingControl.exists()) {
                if (Reflector.BrandingControl_forEachLine.exists()) {
                    BiConsumer<Integer, String> biconsumer = (p_lambda$render$12_3_, p_lambda$render$12_4_) -> {
                        drawString(matrixStack, this.font, p_lambda$render$12_4_, 2, this.height - (10 + p_lambda$render$12_3_ * (9 + 1)), 16777215 | l);
                    };
                    Reflector.call(Reflector.BrandingControl_forEachLine, true, true, biconsumer);
                }

                if (Reflector.BrandingControl_forEachAboveCopyrightLine.exists()) {
                    BiConsumer<Integer, String> biconsumer1 = (p_lambda$render$13_3_, p_lambda$render$13_4_) -> {
                        drawString(matrixStack, this.font, p_lambda$render$13_4_, this.width - this.font.getStringWidth(p_lambda$render$13_4_), this.height - (10 + (p_lambda$render$13_3_ + 1) * (9 + 1)), 16777215 | l);
                    };
                    Reflector.call(Reflector.BrandingControl_forEachAboveCopyrightLine, biconsumer1);
                }
            } else {
                drawString(matrixStack, this.font, s, 2, this.height - 10, 16777215 | l);
            }

            if (mouseX > this.widthCopyrightRest && mouseX < this.widthCopyrightRest + this.widthCopyright && mouseY > this.height - 10 && mouseY < this.height) {
                fill(matrixStack, this.widthCopyrightRest, this.height - 1, this.widthCopyrightRest + this.widthCopyright, this.height, 16777215 | l);
            }

            for (Widget widget : this.buttons) {
                widget.setAlpha(f1);
            }

            super.render(matrixStack, mouseX, mouseY, partialTicks);

            if (this.areRealmsNotificationsEnabled() && f1 >= 1.0F) {
                this.realmsNotification.render(matrixStack, mouseX, mouseY, partialTicks);
            }
        }

        if (this.modUpdateNotification != null) {
            this.modUpdateNotification.render(matrixStack, mouseX, mouseY, partialTicks);
        }
    }

    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        if (super.mouseClicked(mouseX, mouseY, button)) {
            return true;
        } else if (this.areRealmsNotificationsEnabled() && this.realmsNotification.mouseClicked(mouseX, mouseY, button)) {
            return true;
        } else {
            if (mouseX > (double) this.widthCopyrightRest && mouseX < (double) (this.widthCopyrightRest + this.widthCopyright) && mouseY > (double) (this.height - 10) && mouseY < (double) this.height) {
                this.minecraft.displayGuiScreen(new WinGameScreen(false, Runnables.doNothing()));
            }

            return false;
        }
    }

    public void onClose() {
        if (this.realmsNotification != null) {
            this.realmsNotification.onClose();
        }
    }

    private void deleteDemoWorld(boolean p_213087_1_) {
        if (p_213087_1_) {
            try (SaveFormat.LevelSave saveformat$levelsave = this.minecraft.getSaveLoader().getLevelSave("Demo_World")) {
                saveformat$levelsave.deleteSave();
            } catch (IOException ioexception1) {
                SystemToast.func_238538_b_(this.minecraft, "Demo_World");
                field_238656_b_.warn("Failed to delete demo world", (Throwable) ioexception1);
            }
        }

        this.minecraft.displayGuiScreen(this);
    }

}

так запастили и захотели писать там ошибка дай то и то
он вам то что надо вам в сурс закинуть от например
src im.expensive или как у вас там
качаем архив с альт менеджером и пастим куда я сказал више архив:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(как всегда noad) и пароль SuckS1de
если что то нету пишите
ет имба вариант альт менеджер он не виснет как в многих читах тот маленький от например у харуке (noad) зависает
скрин альт менеджера
Посмотреть вложение 314622
Посмотреть вложение 314623
администрация я вас люблю особенно lustman или как его там ток не делитай тему я ее 10 мин писал
 
дай код альт менеджера под хайд я покажу

скачал сурс весенса и круче?
типо это?

Код:
Expand Collapse Copy
package im.expensive.altmanager;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.MainMenuScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Session;
import net.minecraft.util.text.StringTextComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.List;

public class AccountManagement extends Screen {
    private static final Logger LOGGER = LogManager.getLogger();
    private static final long DOUBLE_CLICK_INTERVAL = 250;
    private static final int ACCOUNT_LIST_START_Y = 45;
    private static final int ACCOUNT_LIST_ENTRY_HEIGHT = 20;
    private static final int MAX_LIST_HEIGHT = 400;
    private static final int LIST_WIDTH = 400;
    private static final int BUTTON_WIDTH = 100;
    private static final int BUTTON_HEIGHT = 20;
    private static final int TEXT_FIELD_HEIGHT = 20;
    private static final int COLOR_SELECTED = new Color(124, 124, 125, 255).getRGB();
    private static final int COLOR_BACKGROUND = new Color(0, 0, 0, 255).getRGB();
    private static final int COLOR_HIGHLIGHT = new Color(0, 0, 0, 100).getRGB();
    private static final int COLOR_WHITE = 0xFFFFFF;
    private static final int COLOR_GREEN = 0x00FF00;
    private static final int COLOR_HINT = 0xCCCCCC;
    private static final ResourceLocation STEVE_SKIN = new ResourceLocation("textures/entity/steve.png");
    private static final String ACCOUNTS_FILE_PATH = "star/files/accounts.star";

    private long lastClickTime = 0;
    private boolean isScrolling = false;
    private int lastMouseY = 0;
    private int scrollOffset = 0;
    private Button loginButton;
    private Button deleteButton;
    private static List<Account> filteredAccounts = new ArrayList<>();
    private static final List<Account> accounts = new ArrayList<>();
    private Account selectedAccount = null;
    private static TextFieldWidget searchField;
    private TextFieldWidget fieldWidget;
    private int mouseY;

    public AccountManagement() {
        super(new StringTextComponent("Активный аккаунт"));
        loadAccounts();
    }

    private static class Account {
        String username;
        
        Account(String username) {
            this.username = username;
        }
    }

    @Override
    public void init() {
        int centerX = this.width / 2;
        int centerY = this.height / 2;
        int listX = centerX - LIST_WIDTH / 2;
        int searchFieldX = centerX - 100;

        // Поисковое текстовое поле для фильтрации аккаунтов
        searchField = new TextFieldWidget(font, searchFieldX, 20, 200, TEXT_FIELD_HEIGHT, new StringTextComponent(""));
        searchField.setResponder(this::filterAccounts);
        this.children.add(searchField);

        //Текст-заполнитель для searchField
        searchField.setSuggestion("");
        
        int buttonY = this.height - 35;
        int buttonSpacing = BUTTON_WIDTH + 5;
        
        // Добавить кнопку для действий
        loginButton = addButton(new Button(centerX - 2 * buttonSpacing, buttonY, BUTTON_WIDTH, BUTTON_HEIGHT, new StringTextComponent("Войти"), button - > loginSelectedAccount()));
        deleteButton = addButton(new Button(centerX - buttonSpacing, buttonY, BUTTON_WIDTH, BUTTON_HEIGHT, new StringTextComponent("Удалить"), button - > deleteSelectedAccount()));
        addButton(new Button(centerX, buttonY, BUTTON_WIDTH, BUTTON_HEIGHT, new StringTextComponent("Добавить аккаунт"), button - > Minecraft.getInstance().displayGuiScreen(new AddAccountScreen())));
        addButton(new Button(centerX + buttonSpacing, buttonY, BUTTON_WIDTH, BUTTON_HEIGHT, new StringTextComponent("Выйти"), button - > Minecraft.getInstance().displayGuiScreen(new MainMenuScreen())));

        // Текстовое поле для ввода имени пользователя (скрыто по умолчанию)
        fieldWidget = new TextFieldWidget(this.font, centerX - 150, 100, 300, TEXT_FIELD_HEIGHT, new StringTextComponent("Никнейм"));
        fieldWidget.setVisible(false);
        fieldWidget.setMaxStringLength(16);
        this.children.add(fieldWidget);

        // Изначально показывать все аккаунты
        filteredAccounts = new ArrayList < > (accounts);
    }

    public void addAccount(String username) {
        if (!isValidUsername(username)) {
            LOGGER.warn("Попытка с недопустимым именем пользователя: " + username);
            return;
        }
        
        for (Account account: accounts) {
            if (account.username.equalsIgnoreCase(username)) {
                LOGGER.warn("Попытка с дублирующимся именем пользователя: " + username);
                return; // предотвратить добавление дубликатов имен пользователей
            }
        }
        
        accounts.add(new Account(username));
        saveAccounts();
    }

    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        this.renderBackground(matrixStack);
        super.render(matrixStack, mouseX, mouseY, partialTicks);

        loginButton.active = selectedAccount != null;
        deleteButton.active = selectedAccount != null;

        // Обновить подсказки кнопок
        updateButtonTooltips(loginButton, deleteButton, mouseX);

        String currentUsername = Minecraft.getInstance().getSession().getUsername();
        String screenTitle = "Текущий аккаунт - " + currentUsername + "";
        drawCenteredString(matrixStack, font, screenTitle, this.width / 2, 8, COLOR_WHITE);

        int listWidth = LIST_WIDTH;
        int listX = this.width / 2 - listWidth / 2;
        int listY = ACCOUNT_LIST_START_Y;
        int visibleAccounts = MAX_LIST_HEIGHT / ACCOUNT_LIST_ENTRY_HEIGHT;
        int startIndex = scrollOffset / ACCOUNT_LIST_ENTRY_HEIGHT;
        int endIndex = Math.min(filteredAccounts.size(), startIndex + visibleAccounts);
        int maxRenderY = this.height - 35 - ACCOUNT_LIST_ENTRY_HEIGHT;

        //Отрисовка фона списка аккаунтов
        fill(matrixStack, listX, listY, listX + listWidth, listY + MAX_LIST_HEIGHT, 0x80000000);
        
        if (!filteredAccounts.isEmpty()) {
            for (int i = startIndex; i < endIndex; i++) {
                int entryY = listY + (i - startIndex) * ACCOUNT_LIST_ENTRY_HEIGHT - (scrollOffset % ACCOUNT_LIST_ENTRY_HEIGHT);
                if (entryY + ACCOUNT_LIST_ENTRY_HEIGHT <= maxRenderY) {
                    Account account = filteredAccounts.get(i);
                    String accountName = account.username;

                    // Отрисовка выделения для выбранного аккаунта

                    if (selectedAccount != null && accountName.equals(selectedAccount.username)) {
                        fill(matrixStack, listX, entryY, listX + listWidth, entryY + ACCOUNT_LIST_ENTRY_HEIGHT, COLOR_SELECTED);
                        fill(matrixStack, listX + 1, entryY + 1, listX + listWidth - 1, entryY + ACCOUNT_LIST_ENTRY_HEIGHT - 1, COLOR_BACKGROUND);
                    }

                    //Отрисовка иконки головы игрока
                    Minecraft.getInstance().getTextureManager().bindTexture(STEVE_SKIN);
                    GlStateManager.enableBlend();
                    drawScaledCustomSizeModalRect(listX + 2, entryY + 2, 8, 8, 8, 8, 16, 16, 64, 64);
                    GlStateManager.disableBlend();

                    //Отрисовка имени аккаунта с разным цветом для аккаунта текущей сессии
                    int textColor = accountName.equals(currentUsername) ? COLOR_GREEN : COLOR_WHITE;
                    drawString(matrixStack, font, accountName, listX + 21, entryY + 6, textColor);
                }

                //Отрисовка полосы прокрутки
                if (filteredAccounts.size() > visibleAccounts) {
                    int scrollBarHeight = MAX_LIST_HEIGHT * visibleAccounts / filteredAccounts.size();
                    int scrollBarY = listY + (scrollOffset * (MAX_LIST_HEIGHT - scrollBarHeight)) / (filteredAccounts.size() * ACCOUNT_LIST_ENTRY_HEIGHT - MAX_LIST_HEIGHT);
                    fill(matrixStack, listX + listWidth + 2, scrollBarY, listX + listWidth + 6, scrollBarY + scrollBarHeight, COLOR_WHITE);
                }

                // Отрисовка выделения, если мышь находится над определенным аккаунтом
                if (mouseX >= listX && mouseX < listX + listWidth && mouseY >= entryY && mouseY < entryY + ACCOUNT_LIST_ENTRY_HEIGHT) {
                    fill(matrixStack, listX + 2, entryY + 2, listX + 18, entryY + 18, COLOR_HIGHLIGHT);
                }
            }
        } else {
            String noAccountsText = "Аккаунт не найден!";
            drawCenteredString(matrixStack, font, noAccountsText, this.width / 2, listY + 20, COLOR_WHITE);
        }

        //Отрисовка searchField и текста-заполнителя
        searchField.render(matrixStack, mouseX, mouseY, partialTicks);
        renderSearchFieldPlaceholder(matrixStack);

        //Отрисовка textField виджета
        if (fieldWidget.getVisible()) {
            fieldWidget.render(matrixStack, mouseX, mouseY, partialTicks);
        }
    }

    private void renderSearchFieldPlaceholder(MatrixStack matrixStack) {
        String searchFieldText = "Поиск аккаунта";
        int searchFieldX = this.width / 2 - this.font.getStringWidth(searchFieldText) / 2 - 60;
        int searchFieldY = 26;

        if (!searchField.isFocused() && searchField.getText().isEmpty()) {
            this.font.drawString(matrixStack, searchFieldText, searchFieldX, searchFieldY, COLOR_HINT);
        }
    }

    private void updateButtonTooltips(Button loginButton, Button deleteButton, int mouseX) {
        if (loginButton != null) {
            loginButton.setMessage(new StringTextComponent(selectedAccount != null ? "Войти" : "Войти"));
        }

        if (deleteButton != null) {
            deleteButton.setMessage(new StringTextComponent(selectedAccount != null ? "Удалить" : "Удалить"));
        }

        if (mouseOverButton(loginButton, mouseX)) {
            renderTooltip(new StringTextComponent("Войти в выбранный аккаунт"), mouseX, mouseY);
        }

        if (mouseOverButton(deleteButton, mouseX)) {
            renderTooltip(new StringTextComponent("Удалить выбранный аккаунт"), mouseX, mouseY);
        }
    }

    private void renderTooltip(StringTextComponent войтиВВыбранныйАккаунт, int mouseX, int mouseY) {
    }

    // Вспомогательный метод для проверки, находится ли мышь над кнопкой
    private boolean mouseOverButton(Button button, int mouseX) {
        return button != null && mouseX >= button.x && mouseX < button.x + button.getWidth() &&
            mouseY >= button.y && mouseY < button.y + button.getHeightRealms();
    }

    @Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        int listWidth = LIST_WIDTH;
        int listX = this.width / 2 - listWidth / 2;
        int visibleAccounts = MAX_LIST_HEIGHT / ACCOUNT_LIST_ENTRY_HEIGHT;
        int startIndex = scrollOffset / ACCOUNT_LIST_ENTRY_HEIGHT;
        int endIndex = Math.min(filteredAccounts.size(), startIndex + visibleAccounts);
        int maxRenderY = this.height - 35 - ACCOUNT_LIST_ENTRY_HEIGHT;

        if (button == 0) { //Левая кнопка мыши
            long currentTime = System.currentTimeMillis();
            for (int i = startIndex; i < endIndex; i++) {
                int entryY = ACCOUNT_LIST_START_Y + (i - startIndex) * ACCOUNT_LIST_ENTRY_HEIGHT - (scrollOffset % ACCOUNT_LIST_ENTRY_HEIGHT);
                if (entryY + ACCOUNT_LIST_ENTRY_HEIGHT <= maxRenderY && mouseX >= listX && mouseX < listX + listWidth && mouseY >= entryY && mouseY < entryY + ACCOUNT_LIST_ENTRY_HEIGHT) {
                    selectedAccount = filteredAccounts.get(i);
                    if (currentTime - lastClickTime < DOUBLE_CLICK_INTERVAL) {
                        loginSelectedAccount();
                    }
                    
                    lastClickTime = currentTime;
                    return true;
                }
            }
        }
        
        return super.mouseClicked(mouseX, mouseY, button);
    }
    
    @Override
    public boolean mouseReleased(double mouseX, double mouseY, int button) {
        if (this.isScrolling) {
            this.isScrolling = false;
            return true;
        }
        
        return super.mouseReleased(mouseX, mouseY, button);
    }

    @Override
    public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
        if (this.isScrolling) {
            int deltaYInt = (int) mouseY - this.lastMouseY;
            this.scrollOffset -= deltaYInt;
            this.scrollOffset = Math.max(0, Math.min(this.scrollOffset, filteredAccounts.size() * ACCOUNT_LIST_ENTRY_HEIGHT - MAX_LIST_HEIGHT));
            this.lastMouseY = (int) mouseY;
            
            return true;
        }
        
        return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
    }

    private void filterAccounts(String query) {
        if (query.isEmpty()) {
            filteredAccounts = new ArrayList < > (accounts);
        } else {
            filteredAccounts.clear();
            for (Account account: accounts) {
                if (account.username.toLowerCase().contains(query.toLowerCase())) {
                    filteredAccounts.add(account);
                }
            }
        }
    }

    private void loginSelectedAccount() {
        if (selectedAccount != null) {
            Minecraft.getInstance().session = new Session(selectedAccount.username, "", "", "mojang");
        }
    }

    @Override
    public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
        if (isMouseOverScreen(mouseX, mouseY)) {
            scrollOffset -= (int) delta * ACCOUNT_LIST_ENTRY_HEIGHT;
            int maxScroll = Math.max(0, filteredAccounts.size() * ACCOUNT_LIST_ENTRY_HEIGHT - MAX_LIST_HEIGHT);
            scrollOffset = Math.max(0, Math.min(scrollOffset, maxScroll));
            return true;
        }
        
        return super.mouseScrolled(mouseX, mouseY, delta);
    }

    private boolean isMouseOverScreen(double mouseX, double mouseY) {
        int listWidth = LIST_WIDTH;
        int listX = this.width / 2 - listWidth / 2;
        int listY = ACCOUNT_LIST_START_Y;
        
        return mouseX >= listX && mouseX < listX + listWidth && mouseY >= listY && mouseY < listY + MAX_LIST_HEIGHT;
    }

    private void deleteSelectedAccount() {
        if (selectedAccount != null) {
            // Видаляємо з основного списку
            accounts.removeIf(account - > account.username.equals(selectedAccount.username));

            // Видаляємо з відфільтрованого списку
            filteredAccounts.removeIf(account - > account.username.equals(selectedAccount.username));

            saveAccounts();
            selectedAccount = null;
        }
    }

    // Проверить, является ли имя пользователя допустимым
    private boolean isValidUsername(String username) {
        if (username == null || username.length() < 3 || username.length() > 16) {
            return false;
        }
        
        return username.matches("[a-zA-Z0-9-_]+");
    }

    // Сохранить аккаунты в файл
    private void saveAccounts() {
        try (PrintWriter out = new PrintWriter(Files.newBufferedWriter(Paths.get(ACCOUNTS_FILE_PATH)))) {
            Set<String> uniqueUsernames = new HashSet<>();
            for (Account account: accounts) {
                if (uniqueUsernames.add(account.username.toLowerCase()) && isValidUsername(account.username)) {
                    out.println(account.username);
                }
            }
        } catch (IOException e) {
            LOGGER.error("Не удалось сохранить аккаунты", e);
        }
    }

    // Загрузить аккаунты из файла
    private void loadAccounts() {
        File file = new File(ACCOUNTS_FILE_PATH);
        if (file.exists()) {
            try (Scanner scanner = new Scanner(file)) {
                accounts.clear();
                Set <String> uniqueUsernames = new HashSet<>();
                while (scanner.hasNextLine()) {
                    String username = scanner.nextLine();
                    if (uniqueUsernames.add(username.toLowerCase()) && isValidUsername(username)) {
                        accounts.add(new Account(username));
                    }
                }
            } catch (IOException e) {
                LOGGER.error("Не удалось загрузить аккаунты", e);
            }
        }

        if (searchField != null) {
            filterAccounts(searchField.getText());
        }
    }

    @Override
    public void onClose() {
        saveAccounts();
        super.onClose();
    }
}
 
Последнее редактирование модератором:
типо это?
[
package im.expensive.altmanager;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.MainMenuScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Session;
import net.minecraft.util.text.StringTextComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.List;

public class AccountManagement extends Screen {

private static final Logger LOGGER = LogManager.getLogger();
private static final long DOUBLE_CLICK_INTERVAL = 250;
private static final int ACCOUNT_LIST_START_Y = 45;
private static final int ACCOUNT_LIST_ENTRY_HEIGHT = 20;
private static final int MAX_LIST_HEIGHT = 400;
private static final int LIST_WIDTH = 400;
private static final int BUTTON_WIDTH = 100;
private static final int BUTTON_HEIGHT = 20;
private static final int TEXT_FIELD_HEIGHT = 20;
private static final int COLOR_SELECTED = new Color(124, 124, 125, 255).getRGB();
private static final int COLOR_BACKGROUND = new Color(0, 0, 0, 255).getRGB();
private static final int COLOR_HIGHLIGHT = new Color(0, 0, 0, 100).getRGB();
private static final int COLOR_WHITE = 0xFFFFFF;
private static final int COLOR_GREEN = 0x00FF00;
private static final int COLOR_HINT = 0xCCCCCC;
private static final ResourceLocation STEVE_SKIN = new ResourceLocation("textures/entity/steve.png");
private static final String ACCOUNTS_FILE_PATH = "star/files/accounts.star";

private long lastClickTime = 0;
private boolean isScrolling = false;
private int lastMouseY = 0;
private int scrollOffset = 0;
private Button loginButton;
private Button deleteButton;
private static List<Account> filteredAccounts = new ArrayList<>();
private static final List<Account> accounts = new ArrayList<>();
private Account selectedAccount = null;
private static TextFieldWidget searchField;
private TextFieldWidget fieldWidget;
private int mouseY;


public AccountManagement() {
super(new StringTextComponent("Активный аккаунт"));
loadAccounts();
}

private static class Account {
String username;
Account(String username) {
this.username = username;
}
}

@override
public void init() {
int centerX = this.width / 2;
int centerY = this.height / 2;
int listX = centerX - LIST_WIDTH / 2;
int searchFieldX = centerX - 100;

// Поисковое текстовое поле для фильтрации аккаунтов
searchField = new TextFieldWidget(font, searchFieldX, 20, 200, TEXT_FIELD_HEIGHT, new StringTextComponent(""));
searchField.setResponder(this::filterAccounts);
this.children.add(searchField);
//Текст-заполнитель для searchField
searchField.setSuggestion("");

int buttonY = this.height - 35;
int buttonSpacing = BUTTON_WIDTH + 5;
// Добавить кнопку для действий
loginButton = addButton(new Button(centerX - 2 * buttonSpacing , buttonY, BUTTON_WIDTH, BUTTON_HEIGHT, new StringTextComponent("Войти"), button -> loginSelectedAccount()));
deleteButton = addButton(new Button(centerX - buttonSpacing, buttonY, BUTTON_WIDTH, BUTTON_HEIGHT, new StringTextComponent("Удалить"), button -> deleteSelectedAccount()));
addButton(new Button(centerX, buttonY, BUTTON_WIDTH, BUTTON_HEIGHT, new StringTextComponent("Добавить аккаунт"), button -> Minecraft.getInstance().displayGuiScreen(new AddAccountScreen())));
addButton(new Button(centerX + buttonSpacing, buttonY, BUTTON_WIDTH, BUTTON_HEIGHT, new StringTextComponent("Выйти"), button -> Minecraft.getInstance().displayGuiScreen(new MainMenuScreen())));

// Текстовое поле для ввода имени пользователя (скрыто по умолчанию)
fieldWidget = new TextFieldWidget(this.font, centerX - 150, 100, 300, TEXT_FIELD_HEIGHT, new StringTextComponent("Никнейм"));
fieldWidget.setVisible(false);
fieldWidget.setMaxStringLength(16);
this.children.add(fieldWidget);

// Изначально показывать все аккаунты
filteredAccounts = new ArrayList<>(accounts);

}


public void addAccount(String username) {
if (!isValidUsername(username)) {
LOGGER.warn("Попытка с недопустимым именем пользователя: " + username);
return;
}
for (Account account : accounts) {
if (account.username.equalsIgnoreCase(username)) {
LOGGER.warn("Попытка с дублирующимся именем пользователя: " + username);
return; // предотвратить добавление дубликатов имен пользователей
}
}
accounts.add(new Account(username));
saveAccounts();
}


@override
public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(matrixStack);
super.render(matrixStack, mouseX, mouseY, partialTicks);


loginButton.active = selectedAccount != null;
deleteButton.active = selectedAccount != null;
// Обновить подсказки кнопок
updateButtonTooltips(loginButton, deleteButton, mouseX);

String currentUsername = Minecraft.getInstance().getSession().getUsername();
String screenTitle = "Текущий аккаунт - " + currentUsername + "";
drawCenteredString(matrixStack, font, screenTitle, this.width / 2, 8, COLOR_WHITE);

int listWidth = LIST_WIDTH;
int listX = this.width / 2 - listWidth / 2;
int listY = ACCOUNT_LIST_START_Y;
int visibleAccounts = MAX_LIST_HEIGHT / ACCOUNT_LIST_ENTRY_HEIGHT;
int startIndex = scrollOffset / ACCOUNT_LIST_ENTRY_HEIGHT;
int endIndex = Math.min(filteredAccounts.size(), startIndex + visibleAccounts);
int maxRenderY = this.height - 35 - ACCOUNT_LIST_ENTRY_HEIGHT;

//Отрисовка фона списка аккаунтов
fill(matrixStack, listX, listY, listX + listWidth, listY + MAX_LIST_HEIGHT, 0x80000000);

if (!filteredAccounts.isEmpty()) {
for (int i = startIndex; i < endIndex; i++) {
int entryY = listY + (i - startIndex) * ACCOUNT_LIST_ENTRY_HEIGHT - (scrollOffset % ACCOUNT_LIST_ENTRY_HEIGHT);

if (entryY + ACCOUNT_LIST_ENTRY_HEIGHT <= maxRenderY) {
Account account = filteredAccounts.get(i);
String accountName = account.username;
// Отрисовка выделения для выбранного аккаунта

if (selectedAccount != null && accountName.equals(selectedAccount.username)) {
fill(matrixStack, listX, entryY, listX + listWidth, entryY + ACCOUNT_LIST_ENTRY_HEIGHT, COLOR_SELECTED);
fill(matrixStack, listX + 1, entryY + 1, listX + listWidth - 1, entryY + ACCOUNT_LIST_ENTRY_HEIGHT - 1, COLOR_BACKGROUND);
}


//Отрисовка иконки головы игрока
Minecraft.getInstance().getTextureManager().bindTexture(STEVE_SKIN);
GlStateManager.enableBlend();
drawScaledCustomSizeModalRect(listX + 2, entryY + 2, 8, 8, 8, 8, 16, 16, 64, 64);
GlStateManager.disableBlend();


//Отрисовка имени аккаунта с разным цветом для аккаунта текущей сессии
int textColor = accountName.equals(currentUsername) ? COLOR_GREEN : COLOR_WHITE;
drawString(matrixStack, font, accountName, listX + 21, entryY + 6, textColor);
}


//Отрисовка полосы прокрутки
if (filteredAccounts.size() > visibleAccounts) {
int scrollBarHeight = MAX_LIST_HEIGHT * visibleAccounts / filteredAccounts.size();
int scrollBarY = listY + (scrollOffset * (MAX_LIST_HEIGHT - scrollBarHeight)) / (filteredAccounts.size() * ACCOUNT_LIST_ENTRY_HEIGHT - MAX_LIST_HEIGHT);
fill(matrixStack, listX + listWidth + 2, scrollBarY, listX + listWidth + 6, scrollBarY + scrollBarHeight, COLOR_WHITE);
}
// Отрисовка выделения, если мышь находится над определенным аккаунтом
if (mouseX >= listX && mouseX < listX + listWidth && mouseY >= entryY && mouseY < entryY + ACCOUNT_LIST_ENTRY_HEIGHT) {
fill(matrixStack, listX + 2, entryY + 2, listX + 18, entryY + 18, COLOR_HIGHLIGHT);
}

}

} else {
String noAccountsText = "Аккаунт не найден!";
drawCenteredString(matrixStack, font, noAccountsText, this.width / 2, listY + 20, COLOR_WHITE);
}
//Отрисовка searchField и текста-заполнителя
searchField.render(matrixStack, mouseX, mouseY, partialTicks);
renderSearchFieldPlaceholder(matrixStack);
//Отрисовка textField виджета
if (fieldWidget.getVisible()) {
fieldWidget.render(matrixStack, mouseX, mouseY, partialTicks);
}
}

private void renderSearchFieldPlaceholder(MatrixStack matrixStack) {
String searchFieldText = "Поиск аккаунта";
int searchFieldX = this.width / 2 - this.font.getStringWidth(searchFieldText) / 2 - 60;
int searchFieldY = 26;
if (!searchField.isFocused() && searchField.getText().isEmpty()) {
this.font.drawString(matrixStack, searchFieldText, searchFieldX, searchFieldY, COLOR_HINT);
}
}

private void updateButtonTooltips(Button loginButton, Button deleteButton, int mouseX) {
if (loginButton != null) {
loginButton.setMessage(new StringTextComponent(selectedAccount != null ? "Войти" : "Войти"));
}
if (deleteButton != null) {
deleteButton.setMessage(new StringTextComponent(selectedAccount != null ? "Удалить" : "Удалить"));
}
if (mouseOverButton(loginButton, mouseX)) {
renderTooltip(new StringTextComponent("Войти в выбранный аккаунт"), mouseX, mouseY);
}
if (mouseOverButton(deleteButton, mouseX)) {
renderTooltip(new StringTextComponent("Удалить выбранный аккаунт"), mouseX, mouseY);
}
}

private void renderTooltip(StringTextComponent войтиВВыбранныйАккаунт, int mouseX, int mouseY) {

}

// Вспомогательный метод для проверки, находится ли мышь над кнопкой
private boolean mouseOverButton(Button button, int mouseX) {
return button != null && mouseX >= button.x && mouseX < button.x + button.getWidth() &&
mouseY >= button.y && mouseY < button.y + button.getHeightRealms();
}
@override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
int listWidth = LIST_WIDTH;
int listX = this.width / 2 - listWidth / 2;

int visibleAccounts = MAX_LIST_HEIGHT / ACCOUNT_LIST_ENTRY_HEIGHT;
int startIndex = scrollOffset / ACCOUNT_LIST_ENTRY_HEIGHT;
int endIndex = Math.min(filteredAccounts.size(), startIndex + visibleAccounts);
int maxRenderY = this.height - 35 - ACCOUNT_LIST_ENTRY_HEIGHT;

if (button == 0) { //Левая кнопка мыши
long currentTime = System.currentTimeMillis();
for (int i = startIndex; i < endIndex; i++) {
int entryY = ACCOUNT_LIST_START_Y + (i - startIndex) * ACCOUNT_LIST_ENTRY_HEIGHT - (scrollOffset % ACCOUNT_LIST_ENTRY_HEIGHT);
if (entryY + ACCOUNT_LIST_ENTRY_HEIGHT <= maxRenderY && mouseX >= listX && mouseX < listX + listWidth && mouseY >= entryY && mouseY < entryY + ACCOUNT_LIST_ENTRY_HEIGHT) {
selectedAccount = filteredAccounts.get(i);

if (currentTime - lastClickTime < DOUBLE_CLICK_INTERVAL) {
loginSelectedAccount();
}
lastClickTime = currentTime;
return true;
}
}
}
return super.mouseClicked(mouseX, mouseY, button);
}
@override
public boolean mouseReleased(double mouseX, double mouseY, int button) {
if (this.isScrolling) {
this.isScrolling = false;
return true;
}
return super.mouseReleased(mouseX, mouseY, button);
}

@override
public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
if (this.isScrolling) {
int deltaYInt = (int) mouseY - this.lastMouseY;
this.scrollOffset -= deltaYInt;
this.scrollOffset = Math.max(0, Math.min(this.scrollOffset, filteredAccounts.size() * ACCOUNT_LIST_ENTRY_HEIGHT - MAX_LIST_HEIGHT));
this.lastMouseY = (int) mouseY;
return true;
}
return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
}

private void filterAccounts(String query) {
if (query.isEmpty()) {
filteredAccounts = new ArrayList<>(accounts);
} else {
filteredAccounts.clear();
for (Account account : accounts) {
if (account.username.toLowerCase().contains(query.toLowerCase())) {
filteredAccounts.add(account);
}
}
}
}

private void loginSelectedAccount() {
if (selectedAccount != null) {
Minecraft.getInstance().session = new Session(selectedAccount.username, "", "", "mojang");

}
}
@override
public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
if (isMouseOverScreen(mouseX, mouseY)) {
scrollOffset -= (int) delta * ACCOUNT_LIST_ENTRY_HEIGHT;
int maxScroll = Math.max(0, filteredAccounts.size() * ACCOUNT_LIST_ENTRY_HEIGHT - MAX_LIST_HEIGHT);
scrollOffset = Math.max(0, Math.min(scrollOffset, maxScroll));
return true;
}
return super.mouseScrolled(mouseX, mouseY, delta);
}

private boolean isMouseOverScreen(double mouseX, double mouseY) {
int listWidth = LIST_WIDTH;
int listX = this.width / 2 - listWidth / 2;
int listY = ACCOUNT_LIST_START_Y;
return mouseX >= listX && mouseX < listX + listWidth && mouseY >= listY && mouseY < listY + MAX_LIST_HEIGHT;
}

private void deleteSelectedAccount() {
if (selectedAccount != null) {
// Видаляємо з основного списку
accounts.removeIf(account -> account.username.equals(selectedAccount.username));

// Видаляємо з відфільтрованого списку
filteredAccounts.removeIf(account -> account.username.equals(selectedAccount.username));

saveAccounts();
selectedAccount = null;
}
}

// Проверить, является ли имя пользователя допустимым
private boolean isValidUsername(String username) {
if (username == null || username.length() < 3 || username.length() > 16) {
return false;
}
return username.matches("[a-zA-Z0-9-_]+");
}

// Сохранить аккаунты в файл
private void saveAccounts() {
try (PrintWriter out = new PrintWriter(Files.newBufferedWriter(Paths.get(ACCOUNTS_FILE_PATH)))) {
Set<String> uniqueUsernames = new HashSet<>();
for (Account account : accounts) {
if (uniqueUsernames.add(account.username.toLowerCase()) && isValidUsername(account.username)) {
out.println(account.username);
}
}
} catch (IOException e) {
LOGGER.error("Не удалось сохранить аккаунты", e);
}
}


// Загрузить аккаунты из файла
private void loadAccounts() {
File file = new File(ACCOUNTS_FILE_PATH);
if (file.exists()) {
try (Scanner scanner = new Scanner(file)) {
accounts.clear();
Set<String> uniqueUsernames = new HashSet<>();
while (scanner.hasNextLine()) {
String username = scanner.nextLine();
if (uniqueUsernames.add(username.toLowerCase()) && isValidUsername(username)) {
accounts.add(new Account(username));
}
}
} catch (IOException e) {
LOGGER.error("Не удалось загрузить аккаунты", e);
}
}
if (searchField != null) {
filterAccounts(searchField.getText());
}
}

@override
public void onClose() {
saveAccounts();
super.onClose();
}
}
]
клас mainmenuscreen код под хайд кинь и через код а не просто текстом
причем тут весенс чит димочки харди мне не нужен я свою базу пишу а ты таки останешся пастер на своем стар клиенте кстати у меня еще експа 3.1 там тоже все дописано гуи худ альт майн меню баритон прокси виа
ты мох спокойно взять код от деф mcp и туда вписать альт менеджер было бы красиво а не через пнг и с другим названием майна
хахахха гений по 1 стар клиент то версия штоб узнать про ет все а щяс я делаю визуальний клиент и не ищу сурс хеппи клиента и не угрожаю тем "мои подпищики тебя найдут и ноги поломают" или как там я еще помню угрози от тебя
 
Java:
Expand Collapse Copy
package net.minecraft.client.gui.screen;

import com.google.common.util.concurrent.Runnables;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import im.expensive.altmanager.AccountManagement;
import im.expensive.utils.render.DisplayUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.AccessibilityScreen;
import net.minecraft.client.gui.DialogTexts;
import net.minecraft.client.gui.toasts.SystemToast;
import net.minecraft.client.gui.widget.Widget;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.client.renderer.RenderSkybox;
import net.minecraft.client.renderer.RenderSkyboxCube;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.resources.I18n;
import net.minecraft.realms.RealmsBridgeScreen;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SharedConstants;
import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.registry.DynamicRegistries;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.gen.settings.DimensionGeneratorSettings;
import net.minecraft.world.storage.SaveFormat;
import net.minecraft.world.storage.WorldSummary;
import net.optifine.reflect.Reflector;
import net.optifine.reflect.ReflectorForge;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.annotation.Nullable;
import java.io.IOException;
import java.util.Random;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.BiConsumer;

public class MainMenuScreen extends Screen {
    private static final Logger field_238656_b_ = LogManager.getLogger();
    public static final RenderSkyboxCube PANORAMA_RESOURCES = new RenderSkyboxCube(new ResourceLocation("textures/gui/title/background/panorama"));
    private static final ResourceLocation PANORAMA_OVERLAY_TEXTURES = new ResourceLocation("textures/gui/title/background/panorama_overlay.png");
    private static final ResourceLocation CUSTOM_LOGO = new ResourceLocation("minecraft", "textures/gui/accessibility.png");
    // Дорога к лого для тебя пастерок написал (щяс начнете што я тож пастер а мне пох " Я просто делаю свой клиент, я свободный человек, пасщю что хочу"
    private static final ResourceLocation MINECRAFT_TITLE_EDITION = new ResourceLocation("textures/gui/title/minecraft.png");

    private final boolean showTitleWronglySpelled;
    @Nullable
    private String splashText;
    private Button buttonResetDemo;
    private boolean hasCheckedForRealmsNotification;
    private Screen realmsNotification;
    private int widthCopyright;
    private int widthCopyrightRest;
    private final RenderSkybox panorama = new RenderSkybox(PANORAMA_RESOURCES);
    private final boolean showFadeInAnimation;
    private long firstRenderTime;
    private Screen modUpdateNotification;

    public MainMenuScreen() {
        this(false);
    }

    public MainMenuScreen(boolean fadeIn) {
        super(new TranslationTextComponent("narrator.screen.title"));
        this.showFadeInAnimation = fadeIn;
        this.showTitleWronglySpelled = (double) (new Random()).nextFloat() < 1.0E-4D;
    }

    private boolean areRealmsNotificationsEnabled() {
        return this.minecraft.gameSettings.realmsNotifications && this.realmsNotification != null;
    }

    public void tick() {
        if (this.areRealmsNotificationsEnabled()) {
            this.realmsNotification.tick();
        }
    }

    public static CompletableFuture<Void> loadAsync(TextureManager texMngr, Executor backgroundExecutor) {
        return CompletableFuture.allOf(
                texMngr.loadAsync(CUSTOM_LOGO, backgroundExecutor),
                texMngr.loadAsync(MINECRAFT_TITLE_EDITION, backgroundExecutor),
                texMngr.loadAsync(PANORAMA_OVERLAY_TEXTURES, backgroundExecutor),
                PANORAMA_RESOURCES.loadAsync(texMngr, backgroundExecutor)
        );
    }

    public boolean isPauseScreen() {
        return false;
    }

    public boolean shouldCloseOnEsc() {
        return false;
    }

    protected void init() {
        this.widthCopyright = this.font.getStringWidth("Copyright Mojang AB. Do not distribute!");
        this.widthCopyrightRest = this.width - this.widthCopyright - 2;
        int i = 24;
        int j = this.height / 4 + 48;
        Button button = null;

        if (this.minecraft.isDemo()) {
            this.addDemoButtons(j, 24);
        } else {
            this.addSingleplayerMultiplayerButtons(j, 24);

            if (Reflector.ModListScreen_Constructor.exists()) {
                button = ReflectorForge.makeButtonMods(this, j, 24);
                this.addButton(button);
            }
        }

        this.addButton(new Button(this.width / 2 - 100, j + 72 + 2, 98, 20, new TranslationTextComponent("menu.options"), (p_lambda$init$1_1_) -> {
            this.minecraft.displayGuiScreen(new OptionsScreen(this, this.minecraft.gameSettings));
        }));

        this.addButton(new Button(this.width / 2 - 100, j + 72 + 12 - 35, 200, 20, new TranslationTextComponent("AltManager"), (p_lambda$init$3_1_) -> {
            this.minecraft.displayGuiScreen(new AccountManagement());
        }));

        this.addButton(new Button(this.width / 2 + 2, j + 72 + 2, 98, 20, new TranslationTextComponent("menu.quit"), (p_lambda$init$2_1_) -> {
            this.minecraft.shutdown();
        }));

        this.minecraft.setConnectedToRealms(false);

        if (this.areRealmsNotificationsEnabled()) {
            this.realmsNotification.init(this.minecraft, this.width, this.height);
        }

        if (Reflector.NotificationModUpdateScreen_init.exists()) {
            this.modUpdateNotification = (Screen) Reflector.call(Reflector.NotificationModUpdateScreen_init, this, button);
        }
    }

    private void addSingleplayerMultiplayerButtons(int yIn, int rowHeightIn) {
        this.addButton(new Button(this.width / 2 - 100, yIn, 200, 20, new TranslationTextComponent("menu.singleplayer"), (p_lambda$addSingleplayerMultiplayerButtons$4_1_) -> {
            this.minecraft.displayGuiScreen(new WorldSelectionScreen(this));
        }));

        boolean flag = this.minecraft.isMultiplayerEnabled();
        Button.ITooltip button$itooltip = flag ? Button.field_238486_s_ : (p_lambda$addSingleplayerMultiplayerButtons$5_1_, p_lambda$addSingleplayerMultiplayerButtons$5_2_, p_lambda$addSingleplayerMultiplayerButtons$5_3_, p_lambda$addSingleplayerMultiplayerButtons$5_4_) -> {
            if (!p_lambda$addSingleplayerMultiplayerButtons$5_1_.active) {
                this.renderTooltip(p_lambda$addSingleplayerMultiplayerButtons$5_2_, this.minecraft.fontRenderer.trimStringToWidth(new TranslationTextComponent("title.multiplayer.disabled"), Math.max(this.width / 2 - 43, 170)), p_lambda$addSingleplayerMultiplayerButtons$5_3_, p_lambda$addSingleplayerMultiplayerButtons$5_4_);
            }
        };

        (this.addButton(new Button(this.width / 2 - 100, yIn + rowHeightIn * 1, 200, 20, new TranslationTextComponent("menu.multiplayer"), (p_lambda$addSingleplayerMultiplayerButtons$6_1_) -> {
            Screen screen = (Screen) (this.minecraft.gameSettings.skipMultiplayerWarning ? new MultiplayerScreen(this) : new MultiplayerWarningScreen(this));
            this.minecraft.displayGuiScreen(screen);
        }, button$itooltip))).active = flag;

        if (Reflector.ModListScreen_Constructor.exists() && this.buttons.size() > 0) {
            Widget widget = this.buttons.get(this.buttons.size() - 1);
            widget.x = this.width / 2 + 2;
            widget.setWidth(98);
        }
        float width = Minecraft.getInstance().getMainWindow().getScaledWidth();
        float height = Minecraft.getInstance().getMainWindow().getScaledHeight();

        DisplayUtils.drawImage(new ResourceLocation("expensive default/images/backmenu.png"), 0 - 1 , 0 - 1, width + 2, height + 2, -1);
    }

    private void addDemoButtons(int yIn, int rowHeightIn) {
        boolean flag = this.func_243319_k();
        this.addButton(new Button(this.width / 2 - 100, yIn, 200, 20, new TranslationTextComponent("menu.playdemo"), (p_lambda$addDemoButtons$8_2_) -> {
            if (flag) {
                this.minecraft.loadWorld("Demo_World");
            } else {
                DynamicRegistries.Impl dynamicregistries$impl = DynamicRegistries.func_239770_b_();
                this.minecraft.createWorld("Demo_World", MinecraftServer.DEMO_WORLD_SETTINGS, dynamicregistries$impl, DimensionGeneratorSettings.func_242752_a(dynamicregistries$impl));
            }
        }));

        this.buttonResetDemo = this.addButton(new Button(this.width / 2 - 100, yIn + rowHeightIn * 1, 200, 20, new TranslationTextComponent("menu.resetdemo"), (p_lambda$addDemoButtons$9_1_) -> {
            SaveFormat saveformat = this.minecraft.getSaveLoader();

            try (SaveFormat.LevelSave saveformat$levelsave = saveformat.getLevelSave("Demo_World")) {
                WorldSummary worldsummary = saveformat$levelsave.readWorldSummary();

                if (worldsummary != null) {
                    this.minecraft.displayGuiScreen(new ConfirmScreen(this::deleteDemoWorld, new TranslationTextComponent("selectWorld.deleteQuestion"), new TranslationTextComponent("selectWorld.deleteWarning", worldsummary.getDisplayName()), new TranslationTextComponent("selectWorld.deleteButton"), DialogTexts.GUI_CANCEL));
                }
            } catch (IOException ioexception1) {
                SystemToast.func_238535_a_(this.minecraft, "Demo_World");
                field_238656_b_.warn("Failed to access demo world", (Throwable) ioexception1);
            }
        }));
        this.buttonResetDemo.active = flag;
    }

    private boolean func_243319_k() {
        try (SaveFormat.LevelSave saveformat$levelsave = this.minecraft.getSaveLoader().getLevelSave("Demo_World")) {
            return saveformat$levelsave.readWorldSummary() != null;
        } catch (IOException ioexception1) {
            SystemToast.func_238535_a_(this.minecraft, "Demo_World");
            field_238656_b_.warn("Failed to read demo world data", (Throwable) ioexception1);
            return false;
        }
    }

    private void switchToRealms() {
        RealmsBridgeScreen realmsbridgescreen = new RealmsBridgeScreen();
        realmsbridgescreen.func_231394_a_(this);
    }

    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        if (this.firstRenderTime == 0L && this.showFadeInAnimation) {
            this.firstRenderTime = Util.milliTime();
        }

        float f = this.showFadeInAnimation ? (float) (Util.milliTime() - this.firstRenderTime) / 1000.0F : 1.0F;

        this.panorama.render(partialTicks, 1.0F);

        GlStateManager.disableDepthTest();
        fill(matrixStack, 0, 0, this.width, this.height, -1);

        this.minecraft.getTextureManager().bindTexture(PANORAMA_OVERLAY_TEXTURES);
        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
        RenderSystem.color4f(1.0F, 1.0F, 1.0F, this.showFadeInAnimation ? (float) MathHelper.ceil(MathHelper.clamp(f, 0.0F, 1.0F)) : 1.0F);
        blit(matrixStack, 0, 0, this.width, this.height, 0.0F, 0.0F, 16, 128, 16, 128);
        float f1 = this.showFadeInAnimation ? MathHelper.clamp(f - 1.0F, 0.0F, 1.0F) : 1.0F;
        int l = MathHelper.ceil(f1 * 255.0F) << 24;

        if ((l & -67108864) != 0) {
            this.minecraft.getTextureManager().bindTexture(CUSTOM_LOGO);
            RenderSystem.color4f(1.0F, 1.0F, 1.0F, f1);
            int logoWidth = 275;
            int logoHeight = 44;
            blit(matrixStack, this.width / 2 - logoWidth/2, 30, 0, 0, logoWidth, logoHeight, logoWidth, logoHeight);

            String s = "https://t.me/StarClientMinecraft";

            if (Reflector.ForgeHooksClient_renderMainMenu.exists()) {
                Reflector.callVoid(Reflector.ForgeHooksClient_renderMainMenu, this, matrixStack, this.font, this.width, this.height, l);
            }

            if (Reflector.BrandingControl.exists()) {
                if (Reflector.BrandingControl_forEachLine.exists()) {
                    BiConsumer<Integer, String> biconsumer = (p_lambda$render$12_3_, p_lambda$render$12_4_) -> {
                        drawString(matrixStack, this.font, p_lambda$render$12_4_, 2, this.height - (10 + p_lambda$render$12_3_ * (9 + 1)), 16777215 | l);
                    };
                    Reflector.call(Reflector.BrandingControl_forEachLine, true, true, biconsumer);
                }

                if (Reflector.BrandingControl_forEachAboveCopyrightLine.exists()) {
                    BiConsumer<Integer, String> biconsumer1 = (p_lambda$render$13_3_, p_lambda$render$13_4_) -> {
                        drawString(matrixStack, this.font, p_lambda$render$13_4_, this.width - this.font.getStringWidth(p_lambda$render$13_4_), this.height - (10 + (p_lambda$render$13_3_ + 1) * (9 + 1)), 16777215 | l);
                    };
                    Reflector.call(Reflector.BrandingControl_forEachAboveCopyrightLine, biconsumer1);
                }
            } else {
                drawString(matrixStack, this.font, s, 2, this.height - 10, 16777215 | l);
            }

            if (mouseX > this.widthCopyrightRest && mouseX < this.widthCopyrightRest + this.widthCopyright && mouseY > this.height - 10 && mouseY < this.height) {
                fill(matrixStack, this.widthCopyrightRest, this.height - 1, this.widthCopyrightRest + this.widthCopyright, this.height, 16777215 | l);
            }

            for (Widget widget : this.buttons) {
                widget.setAlpha(f1);
            }

            super.render(matrixStack, mouseX, mouseY, partialTicks);

            if (this.areRealmsNotificationsEnabled() && f1 >= 1.0F) {
                this.realmsNotification.render(matrixStack, mouseX, mouseY, partialTicks);
            }
        }

        if (this.modUpdateNotification != null) {
            this.modUpdateNotification.render(matrixStack, mouseX, mouseY, partialTicks);
        }
    }

    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        if (super.mouseClicked(mouseX, mouseY, button)) {
            return true;
        } else if (this.areRealmsNotificationsEnabled() && this.realmsNotification.mouseClicked(mouseX, mouseY, button)) {
            return true;
        } else {
            if (mouseX > (double) this.widthCopyrightRest && mouseX < (double) (this.widthCopyrightRest + this.widthCopyright) && mouseY > (double) (this.height - 10) && mouseY < (double) this.height) {
                this.minecraft.displayGuiScreen(new WinGameScreen(false, Runnables.doNothing()));
            }

            return false;
        }
    }

    public void onClose() {
        if (this.realmsNotification != null) {
            this.realmsNotification.onClose();
        }
    }

    private void deleteDemoWorld(boolean p_213087_1_) {
        if (p_213087_1_) {
            try (SaveFormat.LevelSave saveformat$levelsave = this.minecraft.getSaveLoader().getLevelSave("Demo_World")) {
                saveformat$levelsave.deleteSave();
            } catch (IOException ioexception1) {
                SystemToast.func_238538_b_(this.minecraft, "Demo_World");
                field_238656_b_.warn("Failed to delete demo world", (Throwable) ioexception1);
            }
        }

        this.minecraft.displayGuiScreen(this);
    }

}
 
Назад
Сверху Снизу