Краш при выборе сервера в GuiMultiplayer

Версия Minecraft
1.7.10

will0376

Токсичная личность
2,085
55
585
Добра всем. Пытаюсь перекинуть GuiMultiplayer к себе в мод(у класса название custGuiMultiplayer), для модифицирования класса.НО при выборе любого сервера происходит краш.
Краш:
Код:
[18:29:07] [Client thread/INFO] [FML]: [info,debug_on]Frame: 2
[18:29:08] [Client thread/FATAL]: Reported exception thrown!
net.minecraft.util.ReportedException: Updating screen events
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1745) ~[Minecraft.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) ~[Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_161]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_161]
    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/:?]
Caused by: java.lang.NullPointerException
    at net.minecraft.client.gui.GuiMultiplayer.func_146790_a(GuiMultiplayer.java:391) ~[GuiMultiplayer.class:?]
    at net.minecraft.client.gui.ServerListEntryNormal.mousePressed(ServerListEntryNormal.java:244) ~[ServerListEntryNormal.class:?]
    at net.minecraft.client.gui.GuiListExtended.func_148179_a(GuiListExtended.java:51) ~[GuiListExtended.class:?]
    at ru.will0376.api.event.custGuiMultiplayer.mouseClicked(custGuiMultiplayer.java:440) ~[custGuiMultiplayer.class:?]
    at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:344) ~[GuiScreen.class:?]
    at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:313) ~[GuiScreen.class:?]
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1731) ~[Minecraft.class:?]
    ... 11 more
[18:29:08] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: ---- Minecraft Crash Report ----
// Everything's going to plan. No, really, that was supposed to happen.

Time: 02.07.18 18:29
Description: Updating screen events

java.lang.NullPointerException: Updating screen events
    at net.minecraft.client.gui.GuiMultiplayer.func_146790_a(GuiMultiplayer.java:391)
    at net.minecraft.client.gui.ServerListEntryNormal.mousePressed(ServerListEntryNormal.java:244)
    at net.minecraft.client.gui.GuiListExtended.func_148179_a(GuiListExtended.java:51)
    at ru.will0376.api.event.custGuiMultiplayer.mouseClicked(custGuiMultiplayer.java:440)
    at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:344)
    at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:313)
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1731)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
    at net.minecraft.client.Minecraft.run(Minecraft.java:962)
    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 net.minecraft.client.gui.GuiMultiplayer.func_146790_a(GuiMultiplayer.java:391)
    at net.minecraft.client.gui.ServerListEntryNormal.mousePressed(ServerListEntryNormal.java:244)
    at net.minecraft.client.gui.GuiListExtended.func_148179_a(GuiListExtended.java:51)
    at ru.will0376.api.event.custGuiMultiplayer.mouseClicked(custGuiMultiplayer.java:440)
    at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:344)
    at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:313)

-- Affected screen --
Details:
    Screen name: ru.will0376.api.event.custGuiMultiplayer
Stacktrace:
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1731)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
    at net.minecraft.client.Minecraft.run(Minecraft.java:962)
    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)
Код гуишки как в сурсах майна

Java:
 public void func_146790_a(int p_146790_1_)
    {
        this.field_146803_h.func_148192_c(p_146790_1_); <-- Краш выходит вот в этом месте
        GuiListExtended.IGuiListEntry iguilistentry = p_146790_1_ < 0 ? null : this.field_146803_h.getListEntry(p_146790_1_);
        this.field_146809_s.enabled = false;
        this.field_146810_r.enabled = false;
        this.field_146808_t.enabled = false;

        if (iguilistentry != null && !(iguilistentry instanceof ServerListEntryLanScan))
        {
            this.field_146809_s.enabled = true;

            if (iguilistentry instanceof ServerListEntryNormal)
            {
                this.field_146810_r.enabled = true;
                this.field_146808_t.enabled = true;
            }
        }
    }
Код эвента:
Код:
    @SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true) //   не работает выбор серверов.
    public void OpenGuiMultiplayer(GuiOpenEvent event)
    {
        if (event.gui  instanceof GuiMultiplayer)
        {
            event.gui = new custGuiMultiplayer(new custGuiMainMenu());
        }   
        
        
    }
Что делать то?
 
344
1
47
Попробуй снести и просто прокопируй классы (изменяя названия), там же измени импорты на свои классы. (В моем случае я тупо всю клиент часть гуи скопировал в отдельный пакет) и не парился.

Ты скорее всего когда исправлял ошибочки поставил нал где-либо. А при нажатии у тебя нул и вызывается.

p.s у меня все работает
 

will0376

Токсичная личность
2,085
55
585
Java:
@SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true)
    public void OpenGuiMultiplayer(GuiOpenEvent event) {
        if (event.gui  instanceof GuiMultiplayer) {
            event.gui = new custGuiMultiplayer(new custGuiMainMenu(((GuiMultiplayer)event.gui).field_146798_g));
        }
    }
The constructor custGuiMainMenu(GuiScreen) is undefined Разобрался. Но все-равно крашит. =0
Java:
[23:43:29] [Client thread/FATAL]: Reported exception thrown!
net.minecraft.util.ReportedException: Updating screen events
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1745) ~[Minecraft.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) ~[Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_161]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_161]
    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/:?]
Caused by: java.lang.NullPointerException
    at net.minecraft.client.gui.GuiMultiplayer.func_146790_a(GuiMultiplayer.java:391) ~[GuiMultiplayer.class:?]
    at net.minecraft.client.gui.ServerListEntryNormal.mousePressed(ServerListEntryNormal.java:244) ~[ServerListEntryNormal.class:?]
    at net.minecraft.client.gui.GuiListExtended.func_148179_a(GuiListExtended.java:51) ~[GuiListExtended.class:?]
    at ru.will0376.api.event.custGuiMultiplayer.mouseClicked(custGuiMultiplayer.java:440) ~[custGuiMultiplayer.class:?]
    at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:344) ~[GuiScreen.class:?]
    at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:313) ~[GuiScreen.class:?]
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1731) ~[Minecraft.class:?]
    ... 11 more
[23:43:29] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: ---- Minecraft Crash Report ----
// Oops.

Time: 02.07.18 23:43
Description: Updating screen events

java.lang.NullPointerException: Updating screen events
    at net.minecraft.client.gui.GuiMultiplayer.func_146790_a(GuiMultiplayer.java:391)
    at net.minecraft.client.gui.ServerListEntryNormal.mousePressed(ServerListEntryNormal.java:244)
    at net.minecraft.client.gui.GuiListExtended.func_148179_a(GuiListExtended.java:51)
    at ru.will0376.api.event.custGuiMultiplayer.mouseClicked(custGuiMultiplayer.java:440)
    at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:344)
    at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:313)
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1731)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
    at net.minecraft.client.Minecraft.run(Minecraft.java:962)
    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)
Код:
    public void func_146790_a(int p_146790_1_)
    {
        this.serverListSelector.func_148192_c(p_146790_1_); <====
        GuiListExtended.IGuiListEntry iguilistentry = p_146790_1_ < 0 ? null : this.serverListSelector.getListEntry(p_146790_1_);
        this.field_146809_s.enabled = false;
        this.field_146810_r.enabled = false;
        this.field_146808_t.enabled = false;

        if (iguilistentry != null && !(iguilistentry instanceof ServerListEntryLanScan))
        {
            this.field_146809_s.enabled = true;

            if (iguilistentry instanceof ServerListEntryNormal)
            {
                this.field_146810_r.enabled = true;
                this.field_146808_t.enabled = true;
            }
        }
    }
 
Последнее редактирование:

timaxa007

Модератор
5,831
409
672
344
1
47
бредово выглядит, не правда ли? =\ Я вот уж никак не хочу потом компилировать и отдельно кидать в сурсы кубача

Дело трех минут? Ну если вас устраивает, то можете разбирать велосипед, который вы сотворили. Это быстрей )))
 

will0376

Токсичная личность
2,085
55
585
Если снова будет краш то тут разбираться будет нужно, в чём проблема.
Он самый.
Java:
[23:59:56] [Client thread/FATAL]: Reported exception thrown!
net.minecraft.util.ReportedException: Ticking screen
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1766) ~[Minecraft.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) ~[Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_161]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_161]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_161]
    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/:?]
Caused by: java.lang.NullPointerException
    at net.minecraft.client.gui.GuiMultiplayer.updateScreen(GuiMultiplayer.java:102) ~[GuiMultiplayer.class:?]
    at ru.will0376.api.event.custGuiMultiplayer.updateScreen(custGuiMultiplayer.java:114) ~[custGuiMultiplayer.class:?]
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1752) ~[Minecraft.class:?]
    ... 11 more
[23:59:56] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: ---- Minecraft Crash Report ----
// Shall we play a game?

Time: 02.07.18 23:59
Description: Ticking screen

java.lang.NullPointerException: Ticking screen
    at net.minecraft.client.gui.GuiMultiplayer.updateScreen(GuiMultiplayer.java:102)
    at ru.will0376.api.event.custGuiMultiplayer.updateScreen(custGuiMultiplayer.java:114)
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1752)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
    at net.minecraft.client.Minecraft.run(Minecraft.java:962)
    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)
Код:
 public void updateScreen()
    {
        super.updateScreen(); <=========

        if (this.field_146799_A.getWasUpdated())
        {
            List list = this.field_146799_A.getLanServers();
            this.field_146799_A.setWasNotUpdated();
            this.serverListSelector.func_148194_a(list);
        }

        this.field_146797_f.func_147223_a();
    }
 

will0376

Токсичная личность
2,085
55
585
Забил на всё и тупо переопределил метод кнопок.
З.ы. может кому пригодится - Код:
Java:
public class custGuiMultiplayer extends GuiMultiplayer {

    //private GuiButton field_146810_r;
//private ServerSelectionList field_146803_h;
    GuiButton field_146810_r = null;
    GuiButton field_146809_s = null;
    GuiButton field_146808_t = null;
    GuiMultiplayer gmm = new GuiMultiplayer(new GuiMainMenu());
    public custGuiMultiplayer(GuiScreen back) {
        super(back);
    }
    @Override
     public void func_146794_g()
        {   
        
    
        try {
            Field field2 = gmm.getClass().getDeclaredField("field_146810_r");
            Field field3 = gmm.getClass().getDeclaredField("field_146809_s");
            Field field4 = gmm.getClass().getDeclaredField("field_146808_t");
            
            field2.setAccessible(true);
            field3.setAccessible(true);
            field4.setAccessible(true);
            
            field_146810_r =  (GuiButton) field2.get(gmm);
            field_146809_s =  (GuiButton) field3.get(gmm);
            field_146808_t =  (GuiButton) field4.get(gmm);
        } catch (NoSuchFieldException e) {
            
            e.printStackTrace();
        }
         catch (SecurityException e) {
                
                e.printStackTrace();
            }
         catch (IllegalArgumentException e) {
                
                e.printStackTrace();
            }
         catch (IllegalAccessException e) {
                
                e.printStackTrace();
            }
          
            this.buttonList.add(field_146810_r = new GuiButton(7, this.width / 2 - 154, this.height - 28, 70, 20, I18n.format("selectServer.edit", new Object[0])));
            this.buttonList.add(field_146808_t = new GuiButton(2, this.width / 2 - 74, this.height - 28, 70, 20, I18n.format("selectServer.delete", new Object[0])));
            this.buttonList.add(field_146809_s = new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, I18n.format("selectServer.select", new Object[0])));
            this.buttonList.add(new GuiButton(4, this.width / 2 - 50, this.height - 52, 100, 20, I18n.format("selectServer.direct", new Object[0])));
            this.buttonList.add(new GuiButton(3, this.width / 2 + 4 + 50, this.height - 52, 100, 20, I18n.format("selectServer.add", new Object[0])));
            this.buttonList.add(new GuiButton(8, this.width / 2 + 4, this.height - 28, 70, 20, I18n.format("selectServer.refresh", new Object[0])));
            this.buttonList.add(new GuiButton(0, this.width / 2 + 4 + 76, this.height - 28, 75, 20, I18n.format("gui.cancel", new Object[0])));
            this.func_146790_a(field_146803_h.func_148193_k());
        }
    @Override
     public void func_146790_a(int p_146790_1_)
        {   
               field_146803_h.func_148192_c(p_146790_1_);
            
           GuiListExtended.IGuiListEntry iguilistentry = p_146790_1_ < 0 ? null : field_146803_h.getListEntry(p_146790_1_);
    
            this.field_146809_s.enabled = false;
            this.field_146810_r.enabled = false;
            this.field_146808_t.enabled = false;

            if (iguilistentry != null && !(iguilistentry instanceof ServerListEntryLanScan))
            {
                this.field_146809_s.enabled = true;
            }
             /* if (iguilistentry instanceof ServerListEntryNormal)
                {
                    this.field_146810_r.enabled = true;
                    this.field_146808_t.enabled = true;
                }
            }*/
        }

}
И при помощи АТ нужно сделать публичной переменную ServerSelectionList field_146803_h;

public net.minecraft.client.gui.GuiMultiplayer field_146803_h
 
Последнее редактирование:
Сверху