调用MinecraftClient.getInstance()时Fabric Minecraft模组崩溃求助
Fabric客户端模组崩溃:
MinecraftClient.getInstance()调用导致崩溃 崩溃原因
你在非客户端主线程中调用了MinecraftClient.getInstance()。Fabric框架下,MinecraftClient实例仅在客户端主线程(游戏逻辑/渲染线程)中初始化并可用,跨线程调用会因实例未绑定或线程安全问题触发空指针异常,直接导致游戏崩溃。
从崩溃堆栈来看,你的GetPlayersCommand在命令执行线程(非主线程)中执行第21行代码,此时MinecraftClient.getInstance()返回null,进而引发后续崩溃。
修复方案
1. 将逻辑切换到客户端主线程执行
使用客户端实例的execute()方法,把需要调用客户端API的逻辑包装到主线程中执行:
// 替换原第21行及后续相关代码 MinecraftClient.getInstance().execute(() -> { MinecraftClient minecraftClient = MinecraftClient.getInstance(); // 这里执行你的玩家列表获取、UI交互等操作 });
注意:如果代码是在模组加载阶段调用,需先判断客户端实例是否已初始化,避免空指针。
2. 确保命令仅在客户端上下文执行
如果是自定义命令,注册时需限制仅在客户端环境下生效,避免服务端或非主线程触发:
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { // 跳过服务端环境 if (environment.dedicated()) return; // 注册你的GetPlayersCommand dispatcher.register(/* 你的命令定义 */); });
关键崩溃信息
异常类型:
java.lang.NullPointerException
触发位置:GetPlayersCommand.java:21
核心问题:非主线程调用MinecraftClient.getInstance()返回null,导致后续操作失败。
内容的提问来源于stack exchange,提问作者MARIUCHINAS
相关产品推荐
相关产品推荐

