Skip to content

Commit 6d41229

Browse files
committed
fix(26.1+): Fix OpenScreenEvent overwriting new screens from other mods #256
1 parent c5fe126 commit 6d41229

4 files changed

Lines changed: 7 additions & 13 deletions

File tree

common/src/main/java/net/blay09/mods/balm/client/platform/event/callback/ScreenCallback.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minecraft.client.gui.screens.Screen;
66
import net.minecraft.client.input.KeyEvent;
77
import net.minecraft.client.input.MouseButtonEvent;
8+
import org.jspecify.annotations.Nullable;
89

910
public interface ScreenCallback {
1011
@FunctionalInterface
@@ -18,7 +19,7 @@ interface Render {
1819

1920
@FunctionalInterface
2021
interface Opening {
21-
Screen modifyScreen(Screen screen);
22+
@Nullable Screen modifyScreen(@Nullable Screen screen);
2223

2324
EventMapper<Opening> EVENT = EventMapper.createUnbound("ScreenCallback.Opening");
2425
}

fabric/src/main/java/net/blay09/mods/balm/fabric/internal/mixin/MinecraftMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class MinecraftMixin {
3131
public ClientLevel level;
3232

3333
@ModifyVariable(method = "setScreen(Lnet/minecraft/client/gui/screens/Screen;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", opcode = Opcodes.GETFIELD, shift = At.Shift.AFTER), argsOnly = true)
34-
public Screen modifyScreen(Screen screen) {
34+
public @Nullable Screen modifyScreen(Screen screen) {
3535
return FabricBalmSupplementalClientEvents.SCREEN_OPEN.invoker().modifyScreen(screen);
3636
}
3737

forge/src/main/java/net/blay09/mods/balm/forge/client/event/internal/ForgeBalmClientEventMappings.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@ public static void bind() {
3232
ScreenCallback.Init.After.EVENT.configureMapping(ForgeBalmSupplementalClientEvents.SCREEN_INIT_POST::register);
3333
ScreenCallback.Opening.EVENT.configureMapping((phase, it)
3434
-> ScreenEvent.Opening.BUS.addListener(mapPriority(phase), (orig) -> {
35-
final var newScreen = it.modifyScreen(orig.getScreen());
36-
if (newScreen != null) {
37-
orig.setNewScreen(newScreen);
38-
}
35+
//noinspection DataFlowIssue // javadocs say "may be null"
36+
orig.setNewScreen(it.modifyScreen(orig.getNewScreen()));
3937
return false;
4038
}));
4139
bindSimple(ScreenCallback.Render.BEFORE, ScreenEvent.Render.Pre.BUS, (event, it) -> it.render(event.getScreen(), event.getGuiGraphics(), event.getMouseX(), event.getMouseY(), event.getPartialTick()));

neoforge/src/main/java/net/blay09/mods/balm/neoforge/client/platform/event/internal/NeoForgeBalmClientEventMappings.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.blay09.mods.balm.neoforge.client.platform.event.internal;
22

3-
import net.blay09.mods.balm.client.platform.event.internal.BalmSupplementalClientEvents;
43
import net.blay09.mods.balm.client.platform.event.callback.*;
4+
import net.blay09.mods.balm.client.platform.event.internal.BalmSupplementalClientEvents;
55
import net.blay09.mods.balm.neoforge.platform.event.internal.NeoForgeBalmEventMappings;
66
import net.minecraft.client.Minecraft;
77
import net.minecraft.client.multiplayer.ClientLevel;
@@ -32,12 +32,7 @@ public static void bind() {
3232

3333
ScreenCallback.Init.Before.EVENT.configureMapping(NeoForgeBalmSupplementalClientEvents.SCREEN_INIT_PRE::register);
3434
ScreenCallback.Init.After.EVENT.configureMapping(NeoForgeBalmSupplementalClientEvents.SCREEN_INIT_POST::register);
35-
bindSimple(ScreenCallback.Opening.EVENT, ScreenEvent.Opening.class, (event, it) -> {
36-
final var newScreen = it.modifyScreen(event.getScreen());
37-
if (newScreen != null) {
38-
event.setNewScreen(newScreen);
39-
}
40-
});
35+
bindSimple(ScreenCallback.Opening.EVENT, ScreenEvent.Opening.class, (event, it) -> event.setNewScreen(it.modifyScreen(event.getNewScreen())));
4136

4237
bindSimple(ScreenCallback.Render.BEFORE, ScreenEvent.Render.Pre.class, (event, it) -> it.render(event.getScreen(), event.getGuiGraphics(), event.getMouseX(), event.getMouseY(), event.getPartialTick()));
4338
bindSimple(ScreenCallback.Render.AFTER_BACKGROUND, ScreenEvent.Render.Background.class, (event, it) -> it.render(event.getScreen(), event.getGuiGraphics(), event.getMouseX(), event.getMouseY(), event.getPartialTick()));

0 commit comments

Comments
 (0)