AFK增强

AFK增强

新AFK管理模组,全面处理AFK时间/时长/原因;完整支持Placeholder API格式化。也适用于单人游戏;并可通过Placeholder API将这个信息提供给其他模组。支持Luck Permissions。

管理

AfkPlus Fabric 模组(适用于 Minecraft)

workflow

Example

加入 Sakura 的 RyokoCraft Discord

基本描述:

  • 基于 beabfc 的 AfkDisplay 的分支项目。他已允许我继续创建此模组,请查看我的“已归档问题”窗格。
  • 在玩家列表中显示哪些玩家处于 AFK 状态,并查看原因、持续时间和时间。
  • 完全可配置,并支持 Placeholder API,其中包括所有 Placeholder API 格式节点,例如:原生支持黄色或粗体。(您甚至可以在 AFK 原因中包含 URL!)
  • 该模组现在可用于单人游戏和集成服务器(对局域网开放)。
  • [新功能] 截至 2024 年 12 月,该模组已基本重写;作为基于 Fallen-Breath 的 Template Mod 架构的多版本项目。
  • [新功能] 该模组现在依赖于我的新库模组 CoreLib,并且 More Color 系统也已分叉到我的 More Color API 模组中。
    • 它们都包含在 AfkPlus 的 JAR 文件中。

模组重写与新特性

  • 整个模组生态系统已迁移到多版本架构,以便更快速地将模组同时移植到 1.19.2-1.21.4+ 版本,并使用单一分支。
  • 配置不再使用 TOML,已转换为基于数据驱动的 CoreLib JSON 配置系统;其工作方式类似于 Pat 的模组生态系统。
  • 大多数玩家/服务器事件现在由 CoreLib 接口管理;仅有少数 AFK 特定例外。
  • 所有命令现在均由 CoreLib 接口注册和管理。
  • 所有抽象文本占位符 API 格式以及额外颜色标签现在由 More Color API 管理。请参阅 /morecolors 命令。
  • 所有新的抽象时间日期/持续时间格式接口均由 CoreLib 管理。
  • 完全重写了基于抽象的 AfkPlayer / AFK 玩家列表系统;不再通过 Mixin 类进行管理。这有助于解决严格的模组兼容性问题;并摆脱丑陋的代码。
  • 从 CoreLib 到 AfkPlus 的整个模组生态系统都拥有 API / 事件系统,供其他模组实现并在其模组中兼容。
  • AfkPlus 为 Vanish、Carpet Mod 和 Styled Player List 添加了 API 兼容处理。每个模组的集成方式根据其兼容需求而有所不同。
  • 增加了几个 message 选项,并将 afkKick 和 disableDamage 系统分叉到它们自己的配置类别中。有关更多默认信息,请参阅下面的配置。
  • 根据请求添加了其他几个烦扰问题、错误修复和功能;例如通过多种配置选项完全配置“Gone for: XXX”消息的能力。

功能特性

  • 添加了占位符 %afkplus:afk%,为您提供基本的 '[AFK]' 标签,标记给处于 AFK 状态的玩家。
  • 添加了占位符 %afkplus:name%/%afkplus:display_name%,以便您可以在其他模组(例如 Styled Playerlist)下使用它作为 '%player:displayname%' 占位符的替代品。 注意,此方法旨在完全兼容 Styled Playerlist 下的 LuckPerms 前缀,因为标准的玩家列表更新方法会失败,或者如果您愿意,也可以直接使用 %afkplus:afk% 为现有名称添加格式。
  • 添加了占位符 %afkplus:duration%,以便您可以获取某人进入 AFK 状态以来的时间,并支持配置格式前缀。
  • 添加了占位符 %afkplus:time%,以便您可以获取某人进入 AFK 状态的时间/日期,并支持配置格式前缀。
  • 添加了占位符 %afkplus:reason%,以便您可以获取某人进入 AFK 状态的原因,并支持配置格式前缀。
  • 添加了占位符 %afkplus:invulnerable%,以便您可以显示所有用户的“禁用伤害”状态,类似于“[AFK]”占位符标签,但或多或少是一个“附加组件”。
  • 有一个特殊的配置选项 'prettyDuration',用于以更人性化的可读格式配置 AFK 持续时间,而不是默认的 (HH:mm:ss.mss) 格式。每种方法都有其优势。(这里想到的是 Styled Nicknames 或 Styled Chat)
  • 为管理员提供了几个模组/数据包冲突警告,以帮助他们更好地决定要安装哪些模组。
  • 添加了 “disableDamage” 配置,使 AFK 玩家在 15 秒冷却时间后对伤害免疫。发生这种情况时,默认会强制执行一条新的可配置的全服广播消息。
  • 添加了 “disableDamageCooldown” 配置,允许管理员调整玩家进入 AFK 状态后应用的默认“计时器”。
  • 添加了 “whenDamageDisabled” 配置,以便您可以自定义当玩家被标记为无敌时显示的消息。
  • 添加了 “whenDamageEnabled” 配置,以便您可以自定义当玩家的无敌状态被取消时显示的消息。
  • 现在还检查玩家是否处于旁观模式,而不仅仅是创造模式,用于管理您的 AFK/禁用伤害状态。
  • 添加了几个玩家可以在 AFK 原因中使用的颜色节点。有关显示示例,请参阅 /afkex。
    • 棕色、青色、深棕色、深粉色、浅蓝色、浅棕色、浅灰色、浅粉色、青柠色、品红色、紫色、鲑鱼色、
    • bluetiful、burnt_orange、canary、cool_mint、copper、powder_blue、royal_purple、shamrock、tickle_me_pink、ultramarine_blue
  • 添加了 “bypassSleepCount” 配置,以便您可以允许标记为 AFK 的玩家绕过睡眠人数要求。
  • 添加了 “bypassInsomnia” 配置,以便您可以允许标记为 AFK 的玩家阻止幻翼生成。
  • 添加了 “/noafk” 命令,供玩家取消自身的 AFK 标记状态。
  • 添加了 “displayDuration” 配置选项,以便您可以启用/禁用在 whenReturn 期间显示“已离开 XX 分钟,XX 秒”。
  • 添加了额外处理,允许将 “afkTimeoutString” 设置为 "",并将 “defaultReason” 传递为 "",以获得更多的“原始” AfkDisplay 体验。
  • 添加了 “AFK 踢出” 系统,可在配置的时间后自动将处于 AFK 状态的玩家从服务器中踢出。它有几个配置选项:
    • afkKickEnabled - (true/false) 启用 AFK 自动踢出管理器。
    • afkKickNonSurvival - (true/false) 允许踢出创造/旁观模式的玩家。
    • afkKickTimer - 玩家被移出服务器时超出 timeoutSeconds 的时间(累加),因此如果 timeoutSeconds 为 240,afkKickTimer 设置为 3600,那么他们实际被踢出的时间是在 3840,即最长 64 分钟。
    • afkKickSafePermissions - (权限等级 3) 默认标记为“安全”,不会被自动踢出的权限等级。(Luck Perms: afkplus.kick.safe)
      • 注意;如果玩家拥有 afkPlusCommandPermissions (Luck Perms: afkplus.afkplus),他们也将被标记为自动踢出安全,但此新配置允许您单独配置这些权限。
    • afkKickMessage - 发送给被踢出的玩家的消息,作为其被移出的原因。(当 displayDuration 启用时,会附加持续时间)
    • whenKicked - 当玩家因 AFK 被踢出时,广播给服务器的消息。(当 displayDuration 启用时,会附加持续时间)
    • 注意:此功能 不会 自动踢出 Carpet Mod 机器人,因为服务器不会对‘假’玩家进行 tick。
      • 此功能 不 适用于单人游戏/对局域网开放,并且需要专用服务器环境才能正常运行。

命令(通过 Luck Permissions 或 afk_plus 配置进行权限管理)

  • '/afkplus' 使用 AfkPlusCommandPermissions (默认值: 4) 设置默认限制。(权限: afkplus.afkplus)
    • 显示模组版本信息。
  • '/afkplus reload' 命令。(权限: afkplus.afkplus.reload)
    • 允许管理员在服务器运行时重新加载配置。
  • '/afkplus ex' 命令。(权限: afkplus.afkplus.ex)
    • 显示一个简单的“格式测试”,向用户展示可用的基本文本节点,这也允许他们通过点击颜色/格式进行复制/粘贴。
  • '/afkplus set [玩家] [原因]' 命令。(权限: afkplus.afkplus.set)
    • 允许任何管理员设置玩家的 AFK 状态,这也会移除他们的 NoAFK 状态。
  • '/afkplus clear [玩家]' 命令。(权限: afkplus.afkplus.clear)
    • 允许任何管理员清除玩家的 AFK 状态。
  • '/afkplus damage enable [玩家]' 命令。(权限: afkplus.afkplus.damage.enable)
    • 允许管理员强制启用 AFK 玩家的可受击能力,只要他们保持连接。
  • '/afkplus damage disable [玩家]' 命令。(权限: afkplus.afkplus.damage.disable)
    • 允许管理员在强制移除后恢复玩家使用“禁用伤害”的能力。
  • '/afkplus info [玩家]' 命令。(权限: afkplus.afkplus.info)
    • 允许任何管理员检查玩家的 AFK 状态,并显示其进入 AFK 状态的时间和持续时间。
  • '/afkplus update [玩家]' 命令。(权限: afkplus.afkplus.update)
    • 允许任何管理员强制更新某个玩家的玩家列表。
  • '/afkinfo [玩家]' 使用 AfkInfoCommandPermissions (默认值: 2) 设置默认限制,(权限: afkplus.afkinfo)
    • 与 '/afkplus info [玩家]' 功能相同,但可用于模组、玩家,或任何您希望配置供他人查看的方式。
  • '/afkex' 使用 AfkExCommandPermissions (默认值: 0) 设置默认限制。(权限: afkplus.afkex)
    • 显示一个简单的“格式测试”,向用户展示可用的基本文本节点,这也允许他们通过点击颜色/格式进行复制/粘贴。
  • '/afk [原因]' 使用 AfkCommandPermissions (默认值: 0) 设置默认限制。(权限: afkplus.afk)
    • 允许任何用户在使用 [原因] 的同时设置他们的 AFK 状态。
  • [新功能] '/noafk' 使用 noAfkCommandPermissions (默认值: 0) 设置默认限制。(权限: afkplus.noafk)
    • 允许任何用户将自身设置为基于配置的超时值不会进入 AFK 状态。
  • [新功能] 'afkKickSafePermissions' (默认值: 3) 设置默认权限,用于标记 AFK 玩家不会被踢出。(权限: afkplus.kick.safe)

潜在的已知冲突(请自行选择)

示例配置

配置位于服务器配置文件夹内的 afkplus.json 中。

{
  "___comment": "AfkPlus-1.21.4-1.7.4-SNAPSHOT 配置",
  "config_date": "Fri, 3 Jan 2025 00:05:08 -0500",
  "afk_plus": {
    "_comment01": "# 允许您禁用 /afk 命令以将自身标记为 AFK,并可附带可选的 [原因](默认值:true)",
    "enableAfkCommand": true,
    "_comment02": "# 允许您禁用 /noafk 命令以将自身标记为 NoAFK,这将禁用超时(默认值:true)",
    "enableNoAfkCommand": true,
    "_comment03": "# 允许您禁用 /afkinfo 命令,该命令允许玩家查看某人的 AFK 状态(时间、持续时间、原因)。(默认值:true)",
    "enableAfkInfoCommand": true,
    "_comment04": "# /afk 的默认命令权限,可通过 Luck Perms (afkplus.afk) 节点配置(默认值:0)",
    "afkCommandPermissions": 0,
    "_comment05": "# /noafk 的默认命令权限,可通过 Luck Perms (afkplus.noafk) 节点配置(默认值:0)",
    "noAfkCommandPermissions": 0,
    "_comment06": "# /afkinfo 的默认命令权限,可通过 Luck Perms (afkplus.afkinfo) 节点配置(通常用于模组)(默认值:2)",
    "afkInfoCommandPermissions": 2,
    "_comment07": "# /afkplus 的默认命令权限,可通过 Luck Perms (afkplus.afkplus 及 .子命令) 节点配置(默认值:3)",
    "afkPlusCommandPermissions": 3,
    "_comment08": "# 一个基本冷却时间配置,用于帮助防止人们刷屏 /afk 命令(默认值:5 秒)",
    "afkCommandCooldown": 5,
    "_comment09": "# 一个布尔值开关,用于启用/禁用模组中的调试日志消息",
    "debugMode": false
  },
  "packet": {
    "_comment01": "# 玩家被视为 AFK 前的无操作时间。设置为 -1 可禁用自动 AFK 检测。(默认值:240)",
    "_comment02": "# --注意;原始 AfkDisplay 的默认超时设置为 180 秒。",
    "timeoutSeconds": 240,
    "_comment03": "# 认为移动过的玩家不再是 AFK(启用易绕过方法,如 AFK 池)(默认值:false)",
    "resetOnMovement": false,
    "_comment04": "# 认为环顾四周的玩家不再是 AFK(默认值:false)",
    "resetOnLook": false,
    "_comment05": "# 认为仅在挥动剑的玩家也为 AFK(默认值:false)",
    "ignoreAttacks": false,
    "_comment06": "# 使 AFK 玩家不计入睡眠百分比检查(默认值:true)",
    "bypassSleepCount": true,
    "_comment07": "# 使 AFK 玩家阻止幻翼生成尝试。(默认值:true)",
    "bypassInsomnia": true,
    "_comment08": "# 默认的“超时”AFK 原因(默认值:“<i><gray>timeout<r>”)",
    "afkTimeoutString": "<i><gray>timeout<r>",
    "_comment09": "# “ignoreAttacks” 检测的默认 AFK 超时消息",
    "afkTimeoutIgnoreAttack": "<i><gray>only swinging their sword<r>"
  },
  "disable_damage": {
    "_comment01": "# 玩家进入 AFK 状态后,在 disableDamageCooldown 秒后禁用伤害(默认值:false)",
    "disableDamage": false,
    "_comment02": "# 启用“禁用伤害”功能的冷却计时器。(默认值:15 秒)",
    "_comment03": "# - 警告!请注意,将此值设置得过低可能会鼓励不良玩家行为。",
    "disableDamageCooldown": 15,
    "_comment04": "# 当 AFK 玩家被标记为无敌时显示的消息内容。",
    "_comment06": "# (默认值:“%player:displayname% <yellow>is marked as <red>Invulnerable.<r>”)",
    "whenDamageDisabled": "%player:displayname% <yellow>is marked as <red>Invulnerable.<r>",
    "_comment08": "# 当 AFK 玩家不再被标记为无敌时显示的消息内容。",
    "_comment09": "# (默认值:“%player:displayname% <yellow>is no longer <red>Invulnerable.<r>”)",
    "whenDamageEnabled": "%player:displayname% <yellow>is no longer <red>Invulnerable.<r>"
  },
  "afk_kick": {
    "_comment01": "# 启用 AFK 自动踢出系统。(默认值:false)",
    "afkKickEnabled": false,
    "_comment02": "# 允许踢出非生存模式的玩家(创造、旁观等)(默认值:false)",
    "afkKickNonSurvival": false,
    "_comment03": "# 在 `timeoutSeconds` 之后自动踢出 AFK 玩家前的时间(默认值:3600,即 1 小时)",
    "_comment04": "# --注意;此值是 `timeoutSeconds` 值的“累加”,因此实际时间将为 3840,即 64 分钟。",
    "afkKickTimer": 3000,
    "_comment05": "# 标记玩家为“安全”而不会被自动踢出的默认权限等级,即服务器管理员(默认值:3)",
    "afkKickSafePermissions": 3,
    "_comment06": "# 发送给被移除玩家的踢出原因消息。可设置为 “” 以获取基本的 “AFK timeout” 原因。",
    "_comment07": "# (默认值:“<copper>AFK beyond the allowed time limit set by your Administrator.<r>”)",
    "_comment08": "# --注意;如果 `message.displayDuration` 设置为 true,此消息末尾会附加 AFK 持续时间。",
    "afkKickMessage": "<copper>AFK beyond the allowed time limit set by your Administrator.<r>",
    "_comment09": "# 当 AFK 玩家被踢出服务器时显示的消息内容。",
    "_comment10": "# (默认值:“%player:displayname% <copper>was kicked for being AFK.<r>”)",
    "_comment11": "# --注意;如果 `message.displayDuration` 设置为 true,此消息末尾会附加 AFK 持续时间。",
    "whenKicked": "%player:displayname% <copper>was kicked for being AFK.<r>",
    "_comment12": "# 玩家被踢出时的默认原因",
    "_comment13": "# (默认值:“<copper>AFK timeout”)",
    "whenKickedDefaultReason": "<copper>AFK timeout",
    "_comment14": "# 玩家被踢出时使用的 AFK 默认持续时间前缀。所使用的持续时间格式遵循 message.duration 配置。",
    "_comment15": "# (默认值:“ <gray>(Gone for: <green>”)",
    "whenKickedDurationDefaultPrefix": " <gray>(Gone for: <green>",
    "_comment16": "# 玩家被踢出时使用的 AFK 玩家命名持续时间前缀。所使用的持续时间格式遵循 message.duration 配置。",
    "_comment17": "# (默认值:“ <gray>(%player:displayname% was gone for: <green”)",
    "whenKickedDurationNamedPrefix": " <gray>(%player:displayname% was gone for: <green>",
    "_comment18": "# 任一踢出持续时间前缀的后缀",
    "_comment19": "# (默认值:“ <gray>)”",
    "whenKickedDurationSuffix": "<gray>)"
  },
  "player_list": {
    "_comment01": "# 为处于 AFK 状态的玩家更改玩家列表名称(默认值:true)",
    "_comment02": "# -- 注意;这适用于您未使用玩家列表显示模组时。",
    "enableListDisplay": true,
    "_comment03": "# 如果玩家处于 AFK 状态,在玩家列表中显示的名称,并且接受格式节点",
    "_comment04": "# (默认值:“<i><gray>[AFK%afkplus:invulnerable%] %player:displayname%<r>”)",
    "_comment05": "# -- 注意;此功能在不使用玩家列表模组时效果最佳!*",
    "afkPlayerName": "<i><gray>[AFK%afkplus:invulnerable%] %player:displayname%<r>",
    "_comment06": "# 此选项设置默认的玩家列表更新间隔。此配置对修复各种玩家列表更新问题大有帮助;",
    "_comment07": "#  尤其是在安装了其他玩家列表管理模组时。",
    "_comment08": "#  (默认值:10 秒)",
    "updateInterval": 10
  },
  "place_holder": {
    "_comment01": "# 如果玩家处于 AFK 状态,这将是占位符 %afkplus: afk% 的值。该选项接受完整的格式节点",
    "_comment02": "# (默认值:“<i><gray>[AFK%afkplus:invulnerable%]<r>”)",
    "_comment03": "# -- 注意;*不会* 在代码末尾放置 “<r>”(尽量不修改其默认行为)",
    "afkPlaceholder": "<i><gray>[AFK%afkplus:invulnerable%]<r>",
    "_comment04": "# 占位符 %afkplus:name% 用于向后移植完整的 %displayname%,供其他模组使用,例如 Styled Player List",
    "_comment05": "# (默认值:“<i><gray>[AFK%afkplus:invulnerable%] %player:displayname_unformatted%<r>”)",
    "_comment06": "# -- 注意;*不会* 在代码末尾放置 “<r>”(尽量不修改其默认行为)",
    "afkPlusNamePlaceholderAfk": "<i><gray>[AFK%afkplus:invulnerable%] %player:displayname_unformatted%<r>",
    "_comment07": "# 当玩家未处于 AFK 状态时的值,(即,默认的 “%player:displayname%”)",
    "_comment08": "# -- 注意;*不会* 在代码末尾放置 “<r>”(尽量不修改其默认行为)",
    "afkPlusNamePlaceholder": "%player:displayname%",
    "_comment09": "# 为 %afkplus:duration% 添加格式前缀节点(默认值:<green>)",
    "_comment10": "# -- 注意;在代码末尾放置 “<r>”,这用于 /afkinfo 期间",
    "afkDurationPlaceholderFormatting": "<green>",
    "_comment11": "# 为 %afkplus: time% 添加格式前缀节点(默认值:<green>)",
    "_comment12": "# -- 注意;在代码末尾放置 “<r>”,这用于 /afkinfo 期间",
    "afkTimePlaceholderFormatting": "<green>",
    "_comment13": "# 为 %afkplus: reason% 添加格式前缀节点,我不确定为什么会有人想要启用此功能,因为",
    "_comment14": "# 自己格式化 [原因] 是很有趣的。(默认值:无)",
    "_comment15": "# -- 注意;在代码末尾放置 “<r>”,这用于 /afkinfo 期间",
    "afkReasonPlaceholderFormatting": "",
    "_comment16": "# 添加一个选项来配置一个基本的“附加组件”占位符,以附加到 “[AFK]” 标签上,用于标记玩家何时",
    "_comment17": "# 使用 %afkplus: invulnerable% 标记为无敌(默认值:“:<red>I<r>”)",
    "afkInvulnerablePlaceholder": ":<red>I<r>",
    "_comment18": "# 添加一个选项,用于为 %duration% 占位符的输出使用自定义格式化程序。有效选项为:",
    "_comment19": "# -- 'REGULAR' (HH:mm:ss.SSS) (默认值:REGULAR)",
    "_comment20": "# -- 'PRETTY' (d' 天 'H' 小时 'm' 分钟 's' 秒')",
    "_comment21": "# -- 'ISO_EXTENDED' ('P'yyyy'Y'M'M'd'DT'H'H'm'M's.SSS'S')",
    "_comment22": "# -- 'FORMATTED'; 与 ISO_EXTENDED 相同,但此选项允许您设置自定义的 DurationFormatUtils 格式化程序,",
    "_comment23": "#     -->  更多信息请参阅:“org.apache.commons.lang3.time.DurationFormatUtils;”",
    "duration": {
      "option": "REGULAR",
      "customFormat": ""
    },
    "_comment24": "# 添加一个选项,用于为 %afkTime% 占位符的输出使用自定义格式化程序。有效选项为:",
    "_comment25": "# -- 'REGULAR' (yyyy-MM-dd_HH.mm.ss); 与 Minecraft 使用的格式相同,也是默认配置。(默认值:REGULAR)",
    "_comment26": "# -- 'ISO_LOCAL' (yyyy-MM-ddTHH:mm:ss.n)",
    "_comment27": "# -- 'ISO_OFFSET' (yyyy-MM-ddTHH:mm:ss.nZ)",
    "_comment28": "# -- 'RFC1123' (EEE, dd MMM yyyy HH:mm:ss +HHMM)",
    "_comment29": "# -- 'FORMATTED'; (yyyy-MM-dd_HH.mm.ss); 与 'REGULAR' 相同,但此选项允许您基于",
    "_comment30": "#     “java.time.format.DateTimeFormatter” 格式化器语法设置自定义格式化器;有关更多信息,请参阅该包。",
    "timeDate": {
      "option": "REGULAR",
      "customFormat": ""
    }
  },
  "message": {
    "_comment01": "# 启用玩家进入 AFK 或返回时发送聊天消息。(默认值:true)",
    "enableMessages": true,
    "_comment02": "# 玩家进入 AFK 状态时的消息内容,并且接受格式节点",
    "_comment03": "#  (默认值:“%player:displayname% <yellow>is now AFK<r>”)",
    "whenAfk": "%player:displayname% <yellow>is now AFK<r>",
    "_comment04": "# 一个可选配置,用于设置 “whenAfk” 及其后跟随的持续时间/原因之间的标点符号。",
    "_comment05": "# (默认值:“<yellow>,<r> ”)",
    "whenAfkPunctuation": "<yellow>,<r> ",
    "_comment06": "# 玩家从 AFK 状态返回时的消息内容,并且接受格式节点。",
    "_comment07": "# (默认值:“%player:displayname% <yellow>is no longer AFK<r>”)",
    "_comment08": "# --注意;如果 `displayDuration` 设置为 true,此消息末尾会附加 AFK 持续时间。",
    "whenReturn": "%player:displayname% <yellow>is no longer AFK<r>",
    "_comment09": "# “whenReturn” 持续时间的格式部分的前缀格式。",
    "_comment10": "# (默认值:“ <gray>(Gone for: <green>”)",
    "whenReturnDurationPrefix": " <gray>(Gone for: <green>",
    "_comment11": "# “whenReturn” 持续时间的格式部分的后缀格式。",
    "_comment12": "# (默认值:“<gray>)”)",
    "whenReturnDurationSuffix": "<gray>)",
    "_comment13": "# 通过 /afk 命令进入 AFK 状态的默认原因。无需给出原因即可留下一团烟雾。",
    "_comment14": "# (默认值:“<gray>poof!<r>”)",
    "_comment15": "# --注意; “” 是有效设置,并将禁用默认的 /afk 原因。",
    "defaultReason": "<gray>poof!<r>",
    "_comment16": "# 当玩家重复输入 '/afk' 并期望得到一个错误结果时,一个可配置的问候语。",
    "_comment17": "# (默认值:“<yellow>Welcome back, <r>%player:display_name%<r>, <yellow>did you miss anything fun?”)",
    "afkCooldownGreeting": "<yellow>Welcome back, <r>%player:display_name%<r>, <yellow>did you miss anything fun?",
    "_comment18": "# 当玩家被 DrexHD 维护的 “melius-vanish” 标记为消失状态时发送的通用错误条件消息",
    "_comment19": "# (默认值:“<red>You are vanished, and probably shouldn't be doing that.<r>”)",
    "whileYourVanished": "<red>You are vanished, and probably shouldn't be doing that.<r>",
    "_comment20": "# 当玩家被 DrexHD 维护的 “melius-vanish” 标记为消失状态时,以第三人称发送的通用错误条件消息",
    "_comment21": "# (默认值:“<red> is vanished, and probably shouldn't be doing that.<r>”)",
    "whileVanished": "<red> is vanished, and probably shouldn't be doing that.<r>",
    "_comment22": "# 启用 whenReturn 消息的持续时间显示部分。请参阅下面的 “duration” 配置。",
    "_comment23": "# (默认值:true)",
    "displayDuration": true,
    "_comment24": "# 将聊天消息、/afkinfo 和 'whenReturn' 等中的 “duration” 重新格式化为更易读的格式。",
    "_comment25": "# -- 'REGULAR' (HH:mm:ss.SSS)",
    "_comment26": "# -- 'PRETTY' (d' 天 'H' 小时 'm' 分钟 's' 秒') (默认值:PRETTY)",
    "_comment27": "# -- 'ISO_EXTENDED' ('P'yyyy'Y'M'M'd'DT'H'H'm'M's.SSS'S')",
    "_comment28": "# -- 'FORMATTED'; 与 ISO_EXTENDED 相同,但此选项允许您设置自定义的 DurationFormatUtils 格式化程序,",
    "_comment29": "#     -->  更多信息请参阅:“org.apache.commons.lang3.time.DurationFormatUtils;”",
    "duration": {
      "option": "PRETTY",
      "customFormat": ""
    },
    "_comment30": "# 添加一个选项,用于为 /afkinfo 命令的输出使用自定义格式化程序。有效选项为:",
    "_comment31": "# -- 'REGULAR' (yyyy-MM-dd_HH.mm.ss); 与 Minecraft 使用的格式相同,也是默认配置。(默认值:REGULAR)",
    "_comment32": "# -- 'ISO_LOCAL' (yyyy-MM-ddTHH:mm:ss.n)",
    "_comment33": "# -- 'ISO_OFFSET' (yyyy-MM-ddTHH:mm:ss.nZ)",
    "_comment34": "# -- 'RFC1123' (EEE, dd MMM yyyy HH:mm:ss +HHMM)",
    "_comment35": "# -- 'FORMATTED'; (yyyy-MM-dd_HH.mm.ss); 与 'REGULAR' 相同,但此选项允许您基于",
    "_comment36": "#     “java.time.format.DateTimeFormatter” 格式化器语法设置自定义格式化器;有关更多信息,请参阅该包。",
    "timeDate": {
      "option": "REGULAR",
      "customFormat": ""
    }
  }
}