Изменить кнопку в чужом Gui

Версия Minecraft
1.7.10
API
Forge
34
2
4
Всем привет, моя задача сделать не активно кнопку "Открыть мир для сети", отключить вроде можно с помощью button.disabled, но как получить кнопку в том меню котором мне нужно(которое при нажатие esc)
 
Решение
Получить лист кнопок в гуи можно в эвенте после его инициализации, а дальше можно либо проитерировать все кнопки и по айди найти нужную или просто пересоздать все кнопки без ненужной

Java:
@SubscribeEvent
    public void onGuiPostInit(GuiScreenEvent.InitGuiEvent.Post event){
        if(event.gui instanceof GuiIngameMenu){
            GuiIngameMenu gui = ((GuiIngameMenu) event.gui);
            //через event.buttonList можно получить список кнопок после инициализации гуи
            //А дальше можно сделать что угодно, например так
         
  
            event.buttonList.forEach(button -> {
                if(button instanceof GuiButton)
                    if(((GuiButton) button).id==7){
                        ((GuiButton)...
126
6
33
Получить лист кнопок в гуи можно в эвенте после его инициализации, а дальше можно либо проитерировать все кнопки и по айди найти нужную или просто пересоздать все кнопки без ненужной

Java:
@SubscribeEvent
    public void onGuiPostInit(GuiScreenEvent.InitGuiEvent.Post event){
        if(event.gui instanceof GuiIngameMenu){
            GuiIngameMenu gui = ((GuiIngameMenu) event.gui);
            //через event.buttonList можно получить список кнопок после инициализации гуи
            //А дальше можно сделать что угодно, например так
         
  
            event.buttonList.forEach(button -> {
                if(button instanceof GuiButton)
                    if(((GuiButton) button).id==7){
                        ((GuiButton) button).enabled=false;
                    }
            });
         
            //Или так
         
            event.buttonList.clear();
            byte b0 = -16;
            event.buttonList.add(new GuiButton(1, gui.width / 2 - 100, gui.height / 4 + 120 + b0, I18n.format("menu.returnToMenu", new Object[0])));

            if (!Minecraft.getMinecraft().isIntegratedServerRunning())
            {
                ((GuiButton)event.buttonList.get(0)).displayString = I18n.format("menu.disconnect", new Object[0]);
            }

            event.buttonList.add(new GuiButton(4, gui.width / 2 - 100, gui.height / 4 + 24 + b0, I18n.format("menu.returnToGame", new Object[0])));
            event.buttonList.add(new GuiButton(0, gui.width / 2 - 100, gui.height / 4 + 96 + b0, 98, 20, I18n.format("menu.options", new Object[0])));
            event.buttonList.add(new GuiButton(12, gui.width / 2 + 2, gui.height / 4 + 96 + b0, 98, 20, "Mod Options..."));

            event.buttonList.add(new GuiButton(5, gui.width / 2 - 100, gui.height / 4 + 48 + b0, 98, 20, I18n.format("gui.achievements", new Object[0])));
            event.buttonList.add(new GuiButton(6, gui.width / 2 + 2, gui.height / 4 + 48 + b0, 98, 20, I18n.format("gui.stats", new Object[0])));
        }
    }
 
Последнее редактирование:
126
6
33
lan.png
Запустил на 1.12.2, от 1.7.10 отличается лишь наличием геттеров и регистрации класса эвентов через аннотации.
1.12.2:
@Mod.EventBusSubscriber(Side.CLIENT)
public class ClientEvents {
    @SubscribeEvent
    public static void onPostInitGui(GuiScreenEvent.InitGuiEvent.Post event){
        if(event.getGui() instanceof GuiIngameMenu){
            event.getButtonList().forEach(button -> {
                if(button.id==7){
                    button.enabled=false;
                }
            });
        }
    }
}
Эвент хоть зарегистрирован?
 
34
2
4
Запустил на 1.12.2, от 1.7.10 отличается лишь наличием геттеров и регистрации класса эвентов через аннотации.
Ошибка тут, фиксил двумя способами, не помогает
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    14.1 KB · Просмотры: 11
126
6
33
А. В 1.7.10 же по дефолту жаба 6, а лямбды только с жабы 8. Тут 2 варианта:
  • Установить в проекте Java 8;
  • Заменить лямбду на:
Java:
for(Object obj:event.buttonList)){
    GuiButton button = (GuiButton)obj;
    if(button.id==7){
        button.enabled=false;
    }
}
 
31
0
@NotYuki
[17:59:09] [Client thread/ERROR] [FML]: Exception caught during firing event net.minecraftforge.client.event.GuiScreenEvent[imath]InitGuiEvent[/imath]Post@3603cbfd:
java.lang.IncompatibleClassChangeError: Expecting non-static method com.example.examplemod.Event.onPostInitGui(Lnet/minecraftforge/client/event/GuiScreenEvent[imath]InitGuiEvent[/imath]Post;)V
at cpw.mods.fml.common.eventhandler.ASMEventHandler_6_Event_onPostInitGui_Post.invoke(.dynamic) ~[?:?]
at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) ~[ASMEventHandler.class:?]
at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
at net.minecraft.client.gui.GuiScreen.setWorldAndResolution(GuiScreen.java:296) [GuiScreen.class:?]
at net.minecraft.client.Minecraft.displayGuiScreen(Minecraft.java:865) [Minecraft.class:?]
at net.minecraft.client.Minecraft.startGame(Minecraft.java:607) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:942) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_291]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_291]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_291]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_291]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
at GradleStart.main(Unknown Source) [start/:?]
[17:59:09] [Client thread/ERROR] [FML]: Index: 1 Listeners:
[17:59:09] [Client thread/ERROR] [FML]: 0: NORMAL
[17:59:09] [Client thread/ERROR] [FML]: 1: ASM: com.example.examplemod.Event@7957385c onPostInitGui(Lnet/minecraftforge/client/event/GuiScreenEvent[imath]InitGuiEvent[/imath]Post;)V
[17:59:09] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: ---- Minecraft Crash Report ----
// Don't do that.

Time: 07.07.21 17:59
Description: Initializing game

java.lang.IncompatibleClassChangeError: Expecting non-static method com.example.examplemod.Event.onPostInitGui(Lnet/minecraftforge/client/event/GuiScreenEvent[imath]InitGuiEvent[/imath]Post;)V
at cpw.mods.fml.common.eventhandler.ASMEventHandler_6_Event_onPostInitGui_Post.invoke(.dynamic)
at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54)
at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140)
at net.minecraft.client.gui.GuiScreen.setWorldAndResolution(GuiScreen.java:296)
at net.minecraft.client.Minecraft.displayGuiScreen(Minecraft.java:865)
at net.minecraft.client.Minecraft.startGame(Minecraft.java:607)
at net.minecraft.client.Minecraft.run(Minecraft.java:942)
at net.minecraft.client.main.Main.main(Main.java:164)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
at GradleStart.main(Unknown Source)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
at cpw.mods.fml.common.eventhandler.ASMEventHandler_6_Event_onPostInitGui_Post.invoke(.dynamic)
at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54)
at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140)
at net.minecraft.client.gui.GuiScreen.setWorldAndResolution(GuiScreen.java:296)
at net.minecraft.client.Minecraft.displayGuiScreen(Minecraft.java:865)
at net.minecraft.client.Minecraft.startGame(Minecraft.java:607)

-- Initialization --
Details:
Stacktrace:
at net.minecraft.client.Minecraft.run(Minecraft.java:942)
at net.minecraft.client.main.Main.main(Main.java:164)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
at GradleStart.main(Unknown Source)

-- System Details --
Details:
Minecraft Version: 1.7.10
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_291, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 711369416 bytes (678 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1614 4 mods loaded, 4 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCHIJA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
UCHIJA FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1614-1.7.10.jar)
UCHIJA Forge{10.13.4.1614} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1614-1.7.10.jar)
UCHIJA examplemod{1.0} [Example Mod] (bin)
GL info: ' Vendor: 'NVIDIA Corporation' Version: '4.6.0 NVIDIA 466.27' Renderer: 'NVIDIA GeForce GT 630/PCIe/SSE2'
Launched Version: 1.7.10
LWJGL: 2.9.1
OpenGL: NVIDIA GeForce GT 630/PCIe/SSE2 GL version 4.6.0 NVIDIA 466.27, NVIDIA Corporation
GL Caps: Using GL 1.3 multitexturing.
Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
Anisotropic filtering is supported and maximum anisotropy is 16.
Shaders are available because OpenGL 2.1 is supported.

Is Modded: Definitely; Client brand changed to 'fml,forge'
Type: Client (map_client.txt)
Resource Packs: []
Current Language: English (US)
Profiler Position: N/A (disabled)
Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
Anisotropic Filtering: Off (1)
[17:59:09] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:398]: #@!@# Game crashed! Crash report saved to: #@!@# E:\Desktop\modsCreating\guiFixLeave\eclipse\.\crash-reports\crash-2021-07-07_17.59.09-client.txt
AL lib: (EE) alc_cleanup: 1 device not closed
 
Сверху