Plugin settings button crashes game
MODKILLER1001 opened this issue ยท 4 comments
Issue Description:
Note: If this bug occurs in a modpack, please report this to the modpack author. Otherwise, delete this line and add your description here. If this is a feature request, this template does not apply to you. Just delete everything.
When going to change setting in plugin menu my game crashes.
What happens:
My game crashes.
What you expected to happen:
to open the plugin menu.
Steps to reproduce:
- go to mods
- hwyla
- go to the 3 lines for settings
- click plugin settings
...
Affected Versions (Do not use "latest"):
- Hwyla: 1.16.2-1.9.23-79.jar
- Minecraft: 1.16.4
- Forge: FABRIC
Possible Conflicting Mods (Provide their version, as well)
I can back this bug up with a Crash Report. On Fabric 0.11.1 Minecraft 1.16.4 there is a crash whenever interacting with the Config in-game
crash-2021-01-16_18.48.43-client.txt
I believe this is the crash I've just encountered, so I've look at the compiled code and followed the stacktrace backwards.
Exception: a NullPointerException (AbstractButtonWidget.message.getString() throws an NPE)
Cause: In GuiConfigWaila, the buttons are created with a Text parameter being null. During the AbstractButtonWidget.<init>, the parameter is saved to message. Now when HWYLA creates the OptionsEntryButton, it calls setMessage with a non-null Text object. At this point, the setMessage compares the Text.getString() method for each of them and checks their equality. This is where the crash happens.
Code snippets:
AbstractButtonWidget:
public void setMessage(Text text) {
if (!Objects.equals(text.getString(), this.message.getString())) {
this.queueNarration(250);
}
this.message = text;
}options.add(new OptionsEntryButton(Util.createTranslationKey("config", new Identifier(Waila.MODID, "general")), new ButtonWidget(0, 0, 100, 20, /* NPE-causing value */ null, w -> { /* ... */ })))
// and a couple more public OptionsEntryButton(String title, ButtonWidget button) {
this.title = I18n.translate(title);
this.button = button;
// This call is the method that throws an NPE, due to the above code.
button.setMessage(new LiteralText(this.title));
}Solution: Set the default button texts in GuiConfigWaila from null to a non-null value (ex. new LiteralText("")). This will result in the AbstractButtonWidget.setMessage(Text) call to not NPE because neither read value will be null.