Appearance
RFM_Tools
文档版本:基于 2026-06-01 代码分析
面向对象:开发者 | 本文档描述RFM_Tools工具模组的独立架构。
概述
RFM_Tools(Mod ID:rfmtools)是逃走中MOD体系的独立工具模组,提供三个核心功能:UUID修复(离线模式通过 Mojang API 获取正版 UUID)、屏障渲染控制(强制客户端渲染屏障方块)和工具模式(为管理员提供特殊工具栏用于快速建造)。
该模组独立运行,不依赖 chenxi_rfm 核心模组。
架构设计
mermaid
graph TB
subgraph Tools["RFM_Tools"]
UUID["GlobalUuidFixService<br/>UUID修复"]
Barrier["ClientLevelMixin<br/>屏障渲染控制"]
ToolMode["ToolModeService<br/>工具模式"]
end
subgraph External["外部系统"]
Mojang["Mojang API<br/>api.mojang.com"]
MC["Minecraft Server/Client"]
end
UUID -->|"HTTP请求"| Mojang
UUID -->|"Mixin注入"| MC
Barrier -->|"Mixin注入"| MC
ToolMode -->|"工具栏管理"| MC一、UUID 修复
功能
当服务器运行在离线模式(online-mode=false)时,Minecraft 使用基于玩家名的 MD5 生成 UUID(离线 UUID)。UUID 修复功能通过向 Mojang API 发起 HTTP 请求,将离线 UUID 替换为玩家的正版 UUID。
实现
- Mixin 注入:
UUIDUtilMixin拦截UUIDUtil.createOfflinePlayerUUID(String) - HTTP 请求:
GET https://api.mojang.com/users/profiles/minecraft/{name} - 缓存:成功结果缓存 10 分钟,未命中缓存 1 分钟
- 仅在专用服务器上启用(
MinecraftServer.isDedicatedServer())
类
| 文件 | 说明 |
|---|---|
com/chenxi/rfmtools/server/service/GlobalUuidFixService.java | UUID 修复服务 |
com/chenxi/rfmtools/mixin/server/UUIDUtilMixin.java | UUID 生成 Mixin |
二、屏障渲染控制
功能
通过 Mixin 注入 ClientLevel.getMarkerParticleTarget(),强制客户端始终将屏障方块渲染为可见状态。
触发条件
- 玩家副手持有屏障物品
- 服务器通过
RenderStatePayload全局强制开启
实现
- Mixin 注入:
ClientLevelMixin修改getMarkerParticleTarget() - 网络同步:
RenderStatePayload(forceBarrierRender布尔值)
类
| 文件 | 说明 |
|---|---|
com/chenxi/rfmtools/mixin/client/ClientLevelMixin.java | 屏障渲染 Mixin |
com/chenxi/rfmtools/common/state/ClientRenderState.java | 客户端渲染状态 |
com/chenxi/rfmtools/common/network/RenderStatePayload.java | 渲染状态同步 |
com/chenxi/rfmtools/common/network/NetworkHandler.java | 网络注册 |
三、工具模式
功能
工具模式是一个全局开关,启用后为所有在线玩家提供特殊工具栏:
| 快捷栏位置 | 物品 | 功能 |
|---|---|---|
| 第 0 格 | 特殊屏障(Items.BARRIER) | 放置后追踪位置的屏障方块 |
| 第 3 格 | 关闭工具栏纸 | 隐藏工具栏和渲染 |
| 第 4 格 | 关闭渲染纸 | 仅隐藏屏障渲染 |
| 第 8 格 | 操作纸 | 构建——将追踪的屏障位置向上扩展 5 格 |
所有工具物品通过 CustomData 组件标记(special_barrier / build / close_render / close_toolbar / open_toolbar)。
指令
| 指令 | 权限 | 说明 |
|---|---|---|
/nfatool start | OP | 启用工具模式 |
/nfatool stop | OP | 禁用工具模式 |
注册于 NfaToolCommand。
生命周期
- 服务器启动时从
ToolModeSavedData加载状态 - 启用时:为所有在线玩家填充工具栏 + 同步渲染状态
- 新玩家登录时:自动同步工具栏
- 禁用时:清空工具栏 + 停止渲染
类
| 文件 | 说明 |
|---|---|
com/chenxi/rfmtools/server/service/ToolModeService.java | 工具模式核心服务 |
com/chenxi/rfmtools/server/config/ToolModeSavedData.java | 工具模式持久化 |
com/chenxi/rfmtools/server/event/ToolServerEvents.java | 事件处理(tick/登录/投掷/放置/破坏) |
com/chenxi/rfmtools/server/command/NfaToolCommand.java | /nfatool 指令 |
com/chenxi/rfmtools/server/command/CommandRegistrar.java | 指令注册入口 |
com/chenxi/rfmtools/common/RfmToolsConstants.java | 工具模式常量 |
注意事项
- UUID 修复的 HTTP 请求可能因 Mojang API 限流而失败(1分钟缓存允许重试)
- 屏障渲染仅影响客户端视觉,服务端逻辑不变
- 工具模式的物品不可丢弃(
ItemTossEvent拦截) - 工具模式放置的屏障有所有权追踪(
ToolModeSavedData记录放置者) - 该模组通过
@Mod和 Dist 分离实现客户端/服务端隔离