Fabric 1.21.5模组加载世界触发"Screen cannot be null"崩溃求助
Fabric 1.21.5模组开发:世界加载完成后崩溃(Screen cannot be null)
开发场景与核心代码
使用Fabric 1.21.5及最新API开发剧情类模组,制作了覆盖原版按钮的假单人游戏按钮,点击后打开过渡用的BlackScreen界面,计划在100tick后加载世界。核心tick逻辑代码如下:
@Override public void tick() { ticks++; if (!loadingStarted && ticks >= 100) { loadingStarted = true; System.out.println("[RealityTerminated] Loading world 'MyWorld' from BlackScreen..."); MinecraftClient.getInstance().createIntegratedServerLoader().start("RealityTerminated", () -> { System.out.println("[RealityTerminated] World 'MyWorld' load triggered from BlackScreen."); worldLoaded = true; MinecraftClient.getInstance().setScreen(new TitleScreen()); }); } }
崩溃现象与日志
点击按钮后BlackScreen正常显示,100tick后开始加载世界,进度到100%时崩溃,报错Screen cannot be null。
错误日志
[15:25:09] [Render thread/INFO]: Loaded 1373 recipes [15:25:09] [Render thread/INFO]: Loaded 1484 advancements [15:25:09] [Render thread/INFO]: Applied 0 biome modifications to 0 of 65 new biomes in 944.5 μs [15:25:09] [Server thread/INFO]: Starting integrated minecraft server version 1.21.5 [15:25:09] [Server thread/INFO]: Generating keypair [15:25:10] [Server thread/INFO]: Preparing start region for dimension minecraft:overworld [15:25:10] [Render thread/INFO]: Preparing spawn area: 0% [15:25:10] [Render thread/INFO]: Preparing spawn area: 0% [15:25:10] [Render thread/INFO]: Time elapsed: 662 ms [15:25:10] [Server thread/INFO]: Changing view distance to 32, from 10 [15:25:10] [Server thread/INFO]: Changing simulation distance to 32, from 0 [15:25:11] [Render thread/ERROR]: Reported exception thrown! net.minecraft.class_148: Ticking screen at knot/net.minecraft.class_310.method_1574(class_310.java:1863) ~[client-intermediary.jar:?] at knot/net.minecraft.class_310.method_1523(class_310.java:1314) ~[client-intermediary.jar:?] at knot/net.minecraft.class_310.method_1514(class_310.java:936) [client-intermediary.jar:?] at knot/net.minecraft.client.main.Main.main(Main.java:265) [client-intermediary.jar:?] at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480) [fabric-loader-0.16.14.jar:?] at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.16.14.jar:?] at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) [fabric-loader-0.16.14.jar:?] Caused by: java.lang.NullPointerException: Screen cannot be null at java.base/java.util.Objects.requireNonNull(Objects.java:259) ~[?:?] at knot/net.fabricmc.fabric.api.client.screen.v1.ScreenEvents.afterTick(ScreenEvents.java:157) ~[fabric-screen-api-v1-2.0.46+86c3a9f149-ee3a4c1c53d3bb27.jar:?] at knot/net.minecraft.class_310.handler$znm000$fabric-screen-api-v1$afterScreenTick(class_310.java:5598) ~[client-intermediary.jar:?] at knot/net.minecraft.class_310.method_1574(class_310.java:1859) ~[client-intermediary.jar:?] ... 6 more [15:25:12] [Server thread/INFO]: Stopping server [15:25:12] [Server thread/INFO]: Saving players [15:25:12] [Server thread/INFO]: Saving worlds [15:25:12] [Server thread/INFO]: Saving chunks for level 'ServerLevel[RealityTerminated]'/minecraft:overworld [15:25:12] [Server thread/INFO]: Saving chunks for level 'ServerLevel[RealityTerminated]'/minecraft:the_nether [15:25:12] [Server thread/INFO]: Saving chunks for level 'ServerLevel[RealityTerminated]'/minecraft:the_end [15:25:12] [Server thread/INFO]: ThreadedAnvilChunkStorage (RealityTerminated): All chunks are saved [15:25:12] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved [15:25:12] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved [15:25:12] [Server thread/INFO]: ThreadedAnvilChunkStorage: All dimensions are saved
崩溃报告
Time: 2025-06-13 15:25:12 Description: Ticking screen java.lang.NullPointerException: Screen cannot be null at java.base/java.util.Objects.requireNonNull(Objects.java:259) at knot//net.fabricmc.fabric.api.client.screen.v1.ScreenEvents.afterTick(ScreenEvents.java:157) at knot//net.minecraft.class_310.handler$znm000$fabric-screen-api-v1$afterScreenTick(class_310.java:5598) at knot//net.minecraft.class_310.method_1574(class_310.java:1859) at knot//net.minecraft.class_310.method_1523(class_310.java:1314) at knot//net.minecraft.class_310.method_1514(class_310.java:936) at knot//net.minecraft.client.main.Main.main(Main.java:265) at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480) at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) A detailed walkthrough of the error, its code path and all known details is as follows: Head Thread: Render thread Stacktrace: at java.base/java.util.Objects.requireNonNull(Objects.java:259) at knot//net.fabricmc.fabric.api.client.screen.v1.ScreenEvents.afterTick(ScreenEvents.java:157) at knot//net.minecraft.class_310.handler$znm000$fabric-screen-api-v1$afterScreenTick(class_310.java:5598) -- Affected screen -- Details: Screen name: net.minecraft.class_3928 Stacktrace: at knot//net.minecraft.class_310.method_1574(class_310.java:1859) at knot//net.minecraft.class_310.method_1523(class_310.java:1314) at knot//net.minecraft.class_310.method_1514(class_310.java:936) at knot//net.minecraft.client.main.Main.main(Main.java:265) at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480) at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
已尝试的解决方案
- 循环设置屏幕为自定义DummyScreen或TitleScreen
- 自定义tick方法加载世界
以上方案均无效,世界加载完成后仍会保存并崩溃,求可行的解决方法。
内容的提问来源于stack exchange,提问作者Aedan
相关产品推荐
相关产品推荐

