名称绑定

名称绑定

我的世界1.21.1 fabric角色名模组

NameBound 是一个仅服务端的 Fabric 模组,适用于 Minecraft 1.21.1,它为每个经过身份验证的 Minecraft 账户赋予一次生命、一个角色身份。

账户名为 Maxello1 的玩家可以创建名为 John Smith 的角色。在默认的姓氏模式下,普通玩家在玩家头顶、玩家列表以及签名聊天中看到的是 John S.。死亡会发布匿名消息 Someone died.,删除该角色,并在重生后要求创建一个新角色。

该模组仅使用原版界面和数据包。玩家可以使用未修改的 Minecraft 1.21.1 客户端加入游戏。

重要限制

这仅掩盖界面,不会匿名化协议

NameBound 从不更改玩家的已认证 GameProfile、Minecraft 用户名、UUID、皮肤属性、聊天会话、公钥或认证数据。这些值在登录、封禁、白名单、权限、选择器和服务器管理方面仍然具有权威性。

原版网络传输必然会在玩家信息数据中发送真实的配置文件名称和 UUID,并且用于隐藏名牌的私有计分板队伍也包含真实的配置文件名称。NameBound 会替换未修改客户端通常渲染的可选显示名称组件,但经过修改的客户端、能感知协议的代理或能够检查会话的网络观察者仍然可以恢复 Minecraft 用户名。NameBound 提供的是面向角色扮演的 UI 掩盖,而非密码学匿名。 不要将其用作安全边界,也不要向玩家承诺账户名称不会出现在数据包中。

原版计分板队伍是硬性兼容边界

一个玩家只能属于一个原版计分板队伍。NameBound 需要为每个账户设置一个私有队伍,以便在发送针对特定观看者的虚拟标签之前隐藏原始玩家名牌。

existingTeamBehaviour 控制与非 NameBound 队伍冲突时的处理方式:

  • WARN_AND_OVERRIDE(默认)记录警告并将账户移入其 NameBound 队伍。先前的队伍成员身份及其附加的任何机制都将丢失。
  • WARN_AND_SKIP 记录警告并保持现有队伍不变。这样 NameBound 将无法隐藏原版名牌。客户端可能会同时显示虚拟角色标签和原始用户名,导致双重标签和用户名泄露。

请谨慎选择。依赖计分板队伍来实现派系、颜色、碰撞、友军伤害、小游戏或权限的服务器,在部署前需要测试此交互。

特性

  • 每个经过身份验证的 UUID 只能有一个活跃角色;没有玩家重命名或角色切换指令。
  • 跨维度持久化的全局角色状态,包括角色生成历史、活跃名称所有权、姓氏模式、可选的旧名保留以及管理员偏好。
  • 强制使用原版 GUI 流程:名字铁砧、姓氏铁砧,然后是确认箱子。
  • 创建锁定,阻止正常聊天、无关指令、破坏方块、攻击以及方块/实体/物品使用。它还可以提供暂时无敌,并重新打开已关闭的创建界面。
  • 支持 Unicode 码点的全名长度限制:名字 + 一个空格 + 姓氏最多 16 个码点。
  • 不区分大小写的活跃名称唯一性、可配置黑名单、标题大小写规范化,以及可选的 Unicode/撇号/连字符支持。
  • 全局 SHORTENED(John S.)和 FULL(John Smith)姓氏显示模式,持久化保存在世界存档中。
  • 在头顶仅数据包的文本显示、玩家列表和签名聊天装饰中,为不同观看者显示特定名称。
  • 授权管理员可以私下选择角色名称或真实用户名,而不会改变其他观看者的显示。
  • 精确的死亡消息替换,保持原版死亡处理流程不变,随后删除角色并记录私有服务器日志。
  • 管理检查、重置、设置、重载、标签清理和身份查询指令。

要求与安装

NameBound 是为以下确切的项目版本构建的:

组件 要求
Minecraft Java 版服务器 1.21.1
Java 21 或更新版本
Fabric Loader 0.16.14 或更新版本
Fabric API 基于 0.116.13+1.21.1 构建和测试
多人游戏客户端模组 加入专用服务器时无需安装

在专用服务器上安装:

  1. 为专用的 Minecraft 1.21.1 服务器安装 Fabric Loader。
  2. 将 Fabric API 0.116.13+1.21.1 和 namebound-1.0.1.jar 放入服务器的 mods 目录。
  3. 使用 Java 21 启动服务器。NameBound 在首次运行时创建 config/namebound.json。
  4. 停止服务器,检查生成的配置——尤其是 existingTeamBehaviour——然后重新启动。
  5. 在现有服务器上首次使用前备份世界。角色状态存储在主世界的持久世界数据中。

加入专用 NameBound 服务器的客户端不需要安装该模组。但是,要在单人游戏中试用或测试 NameBound,请在该客户端配置文件中安装 NameBound 和 Fabric API:Minecraft 在客户端进程中运行单人游戏的集成服务器,因此 Fabric 必须在那里加载 jar 文件。NameBound 仍然不包含任何客户端功能代码,所有用户交互均使用原版客户端功能。

一条命工作流程

  1. 玩家加入。NameBound 在全局世界状态中查找已认证的账户 UUID。
  2. 如果不存在活跃角色,玩家将进入创建锁定状态。玩家列表显示 Creating Character…,稍作延迟后打开第一个原版铁砧界面。
  3. 玩家输入名字,然后输入姓氏。每一步都会验证其输入。
  4. 一个确认箱子显示完整和公开名称,以及身份无法更改且死亡会删除它的警告。玩家可以确认或重新开始。
  5. 确认会重新验证整个名称,并在服务器线程上原子地创建记录。重复点击不会创建第二个活跃记录。
  6. 恢复正常游戏。针对特定观看者的角色名称会发送到聊天、玩家列表和附近的虚拟名牌。
  7. 一次完整的死亡会在原版死亡处理之后发出一条配置的通用消息并删除活跃角色。图腾激活不算,因为玩家没有完成死亡。
  8. 重生或下次重新连接会再次开始创建。账户的角色生成次数会增加。维度传送不会删除角色。

未完成的创建会话仅存在于内存中。在创建过程中断开连接会导致下次加入时重新开始该流程。

名称规则

默认设置强制执行以下所有规则:

  • 名字和姓氏各至少 2 个码点。
  • 完整的规范化名称(包括其分隔空格)不超过 16 个 Unicode 码点。
  • 接受 ASCII 字母;除非配置,否则禁用 Unicode 字母。
  • 仅当启用时,撇号和连字符才允许出现在名称内部。
  • 拒绝两个名称部分内部的空格、开头或结尾的标点符号、§、控制/格式字符、换行符、制表符、零宽字符和文本组件格式。
  • 名称会进行规范化和标题大小写处理(o'connor 变为 O'Connor;smith-jones 变为 Smith-Jones)。
  • 在规范化、不区分大小写的比较下,活跃的完整名称是唯一的。
  • 黑名单条目是规范化的完整名称。

/character create <firstName> <lastName> 是当原版 GUI 不可用时的后备方案。它只对没有活跃角色的玩家有效。