You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:05:17