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- 其他可能的假玩家类
兼容性
| 项目 | 版本 |
|---|---|
| Minecraft | 1.21+ |
| Fabric Loader | 0.16.0+ |
| Java | 21+ |
安装
- 下载最新的
xaerolib-fix-x.x.x.jar文件 - 将其放入服务器的
mods文件夹 - 重启服务器
依赖
本模组为可选依赖:
- 推荐安装: 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