Skip to content

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.javaUUID 修复服务
com/chenxi/rfmtools/mixin/server/UUIDUtilMixin.javaUUID 生成 Mixin

二、屏障渲染控制

功能

通过 Mixin 注入 ClientLevel.getMarkerParticleTarget(),强制客户端始终将屏障方块渲染为可见状态。

触发条件

  • 玩家副手持有屏障物品
  • 服务器通过 RenderStatePayload 全局强制开启

实现

  • Mixin 注入ClientLevelMixin 修改 getMarkerParticleTarget()
  • 网络同步RenderStatePayloadforceBarrierRender 布尔值)

文件说明
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 startOP启用工具模式
/nfatool stopOP禁用工具模式

注册于 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工具模式常量

注意事项

  1. UUID 修复的 HTTP 请求可能因 Mojang API 限流而失败(1分钟缓存允许重试)
  2. 屏障渲染仅影响客户端视觉,服务端逻辑不变
  3. 工具模式的物品不可丢弃(ItemTossEvent 拦截)
  4. 工具模式放置的屏障有所有权追踪(ToolModeSavedData 记录放置者)
  5. 该模组通过 @Mod 和 Dist 分离实现客户端/服务端隔离

相关文档

最后更新: