角色扮演聊天

角色扮演聊天

这个模组允许玩家在角色扮演(RP)环境中使用不同范围进行各种类型的消息交流。

社交

Roleplay Chat

[!WARNING] 下文描述的大部分功能(RP 身份系统、名牌可见性、介绍系统)需要 2.0 或更高版本以及 Minecraft 1.21.6。更早的版本仅包含邻近聊天系统。

一个用于角色扮演服务器的 Minecraft Fabric 模组(1.21.6)。它用基于邻近范围的系统取代了原版聊天,为每位玩家分配一个匿名的十六进制代码身份,并赋予他们一个仅对被介绍过的玩家可见的 RP 名称。


邻近聊天

每条聊天消息仅发送给配置范围内的玩家。范围取决于消息类型,由前缀字符或斜杠命令触发。

类型 颜色 范围 前缀 命令
低语 🟪 紫罗兰 #CC33CC 4 格 « 或 " /whisper <message>
动作 🟩 绿色 #33CC33 25 格 * /action <message>
掷骰 🟩 绿色 #33CC33 25 格 — /roll [notation]
说话 ⬜ 白色 #FFFFFF 30 格 (默认) /speak <message>
OOC 🩶 灰色 #AEC1D5 60 格 ( /ooc <message>
喊叫 🟥 红色 #CC3300 80 格 ! /shout <message>
全局 OOC 🩶 灰色 #AEC1D5 无限制 [ /globalOoc <message>
支持 🩷 粉色 #FF99CC 无限制 ? /support <message>

支持消息仅对服务器管理员(权限等级 ≥ 2)和发送者可见。

颜色、范围和前缀字符均可配置 — 请参阅配置。

随距离的颜色渐变

当接收者远离发送者时,消息颜色会逐渐变暗趋向黑色,在最大范围处达到全黑。范围之外的玩家不会收到任何内容。

Speak radius display

聊天消息示例

Speak
Speak
Whisper
Whisper
Shout
Shout
Action
Action
OOC
OOC
Global OOC
Global OOC

掷骰

/roll 将掷骰结果广播给附近的玩家(范围与动作相同,默认 25 格)。

语法: /roll [NdF[±bonus]]

示例 含义
/roll 掷 1d20(默认)
/roll d6 掷 1d6
/roll 1d20+3 掷 1d20,加 3
/roll d8-1 掷 1d8,减 1
* Alice [1d20+3] → 17  (14+3)
* Bob [1d6] → 4  (Critical Failure)

掷出最大值时以粗体显示 (大成功);掷出 1 时以粗体显示 (大失败)。


RP 身份系统

匿名十六进制代码

每位玩家在首次连接时会被分配一个唯一的 6 位十六进制代码(例如 #15AACF)。该代码:

  • 显示在其名牌上(灰色斜体,位于其 RP 名称下方)。
  • 在他们拥有 RP 名称之前,在聊天中替代其 Minecraft 用户名。
  • 一旦他们拥有 RP 名称,会在聊天中作为其名字的悬停提示显示。
  • 可在所有原版命令中作为目标使用(/kick、/ban、/op、/tp、/give、/kill、/damage 等)— 输入 # 后自动补全会建议代码。

RP 名称

首次连接时,玩家会看到一个用于选择其 RP 名称的界面:

RP name input screen
Name input
RP name input screen with error
Validation error

该界面无法用 Escape 键绕过 — 按下 Escape 会打开暂停菜单,当玩家返回游戏时界面会重新出现。

规则:

  • 必须非空。
  • 必须不超过 32 个字符。
  • 必须唯一(不区分大小写)。

设置后,RP 名称可随时通过 /rpname <name> 更改。

RP 名称聊天示例

一旦玩家拥有 RP 名称,它会在聊天中替代其十六进制代码显示:

RP name in chat


名牌可见性

介绍系统

默认情况下,其他玩家的 RP 名称是隐藏的 — 其名牌显示 ?。要向特定玩家揭示你的身份:

/rp present #15AACF

这会向该玩家发送一条通知,并永久记录这次介绍。重新连接后,介绍关系会自动恢复。

名牌状态

Nametag with known RP name
Known player
Nametag showing ?
Not yet introduced
Nametag hex code only
No RP name yet

视线遮挡

RP 名称无法穿墙可见。如果有固体方块挡在你的视角与另一位玩家之间,他们的整个名牌都会消失 — 即使他们已向你介绍过自己。创造模式会绕过此检查。

Nametag visible
Clear line of sight
Nametag hidden by wall
Wall between players
Nametag visible through wall in creative
Creative mode — wall ignored

隐藏身份的头部装备

在头盔槽位佩戴带有 roleplay-chat:conceals_identity 标签物品的玩家,对所有人都会显示为 ? — 即使是他们已介绍过自己的人。他们的十六进制代码仍然可见,以便工作人员仍能识别他们。

Nametag hidden by headgear
Concealing helmet worn
Nametag visible in creative despite headgear
Creative mode — concealment ignored

该模组默认将 minecraft:leather_helmet 包含在此标签中。要添加更多物品,请创建一个数据包文件:

data/roleplay-chat/tags/items/conceals_identity.json

{
  "replace": false,
  "values": [
    "minecraft:leather_helmet",
    "yourmod:hood",
    "yourmod:balaclava"
  ]
}

"replace": false 会将你的列表与模组默认值合并,而不是替换它们。


配置(服务器管理员)

设置位于 config/roleplay-chat.json(位于你的服务器或 .minecraft 文件夹旁)。该文件在首次运行时以默认值创建。请以 UTF-8 编辑以保留特殊前缀字符(例如 «)。

每种消息类型有三个字段:

字段 含义
radius 范围(格)。0 = 无限制(发送给所有在线玩家)。
color RGB 颜色,以十进制整数(16777215)或十六进制字符串("#FFFFFF")表示。
characters 触发此类型的前缀字符串。speak 使用 [](无前缀)。

无需重启即可重载: /roleplaychat reload(管理员等级 4)在服务器运行时重新读取文件。如果文件无效,则保留当前设置并记录错误。

支持的键: speak、whisper、shout、action、ooc、globalOoc、support、roll。

示例(节选):

{
  "speak": {
    "radius": 30,
    "color": 16777215,
    "characters": []
  },
  "whisper": {
    "radius": 4,
    "color": "#CC33CC",
    "characters": ["«", "\""]
  },
  "shout": {
    "radius": 80,
    "color": 13369344,
    "characters": ["!"]
  }
}