Skip to content

XaeroLib Fix ​

一个用于修复 XaeroLib 与 LuckPerms 和 Carpet mod 假玩家兼容性问题的 Fabric 补丁模组。

问题描述 ​

当服务器同时安装以下模组时会出现问题:

  • Xaero's Minimap / World Map (依赖 XaeroLib)
  • LuckPerms (权限管理)
  • Carpet mod (假玩家功能)

当 Carpet mod 创建假玩家(Fake Player)时,XaeroLib 会尝试通过 LuckPerms 获取该玩家的权限信息。由于假玩家没有正常的 UUID 数据加载流程,LuckPerms 无法为其提供用户数据,导致抛出异常:

java.lang.IllegalStateException: Unable to get a user for EntityPlayerMPFake

解决方案 ​

本补丁模组通过 Mixin 技术在 PlayerConfigChannelPermissionUpdater.handle() 方法执行前检测玩家是否为假玩家。如果检测到假玩家,则跳过权限配置更新,避免异常抛出。

假玩家检测方式 ​

通过检查玩家对象的类名来判断:

  • EntityPlayerMPFake - Carpet mod 的假玩家类
  • FakePlayer - 其他可能的假玩家类

兼容性 ​

项目版本
Minecraft1.21+
Fabric Loader0.16.0+
Java21+

安装 ​

  1. 下载最新的 xaerolib-fix-x.x.x.jar 文件
  2. 将其放入服务器的 mods 文件夹
  3. 重启服务器

依赖 ​

本模组为可选依赖:

  • 推荐安装: XaeroLib, LuckPerms
  • 无需硬依赖: 即使没有安装 XaeroLib 或 LuckPerms,本模组也不会导致崩溃

技术细节 ​

Mixin 目标 ​

  • xaero.lib.common.player.config.permission.PlayerConfigChannelPermissionUpdater

工作原理 ​

java
@Inject(method = "handle", at = @At("HEAD"), cancellable = true)
private static void onHandleHead(@Coerce Object player, boolean isOp, CallbackInfo ci) {
    String className = player.getClass().getName();
    if (className.contains("EntityPlayerMPFake") || className.contains("FakePlayer")) {
        ci.cancel(); // 跳过假玩家的权限配置更新
    }
}

构建 ​

bash
./gradlew build

构建产物位于 build/libs/ 目录。

许可证 ​

MIT License

相关链接 ​

原初服务器 - 公益 Minecraft 服务器