AfkPlus Fabric Mod for Minecraft

基本描述:
- 一个基于 beabfc 的 AfkDisplay 的分支项目。他已授权我继续开发此模组,详情请查看我的“已归档问题”面板。
- 在玩家列表中显示哪些玩家处于 AFK 状态,查看原因、持续时间和时间。
- 完全可配置,并支持 Placeholder API,其中包括所有 Placeholder API 格式节点,例如:原生支持黄色或粗体。(你甚至可以在 AFK 原因中包含一个 URL!)
- 模组现在可用于单人游戏和集成服务器(开放到局域网)。
- 新功能] 截至 2024 年 12 月,模组已基本重写,成为一个基于 [Fallen-Breath 的模板模组 架构的多版本项目。
- 新功能] 模组现在是我的新库模组 [CoreLib 的依赖项,并且更多颜色系统也已分叉到我的 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](https://modrinth.com/mod/styledplayerlist "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 后应用的默认“计时器”。我强烈建议不要将其设置为 '0',除非你认为你的玩家不会滥用此特权。
- 添加了一个 "whenDamageDisabled" 配置,以便你可以自定义玩家被标记为无敌时显示的消息。
- 添加了一个 "whenDamageEnabled" 配置,以便你可以自定义玩家被取消无敌标记时显示的消息。
- 现在还会检查玩家是否处于旁观者模式,而不仅仅是创造模式,以管理你的 AFK/禁用伤害状态。
- ~~添加了几个玩家可用于 AFK 原因的颜色节点。请参阅 /afkex 以获取显示示例。~~
- ~~brown, cyan, darkbrown, darkpink, lightblue, lightbrown, lightgray, lightpink, lime, magenta, purple, salmon,~~
- ~~bluetiful, burntorange, canary, coolmint, copper, powderblue, royalpurple, shamrock, ticklemepink, ultramarine_blue~~
- 添加了一个 "bypassSleepCount" 配置,以便你可以允许标记为 Afk 的玩家绕过睡眠要求。
- 添加了一个 "bypassInsomnia" 配置,以便你可以允许标记为 Afk 的玩家阻止幻翼生成。
- 为玩家添加了一个 "/noafk" 命令,以阻止自己被标记为 Afk。
- 添加了一个 "displayDuration" 配置选项,以便你可以在 whenReturn 期间启用/禁用 "Gone for XX minutes, XX seconds"。
- 添加了额外的处理,允许将 "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 机器人,因为“假”玩家不会被服务器计时。
- 此功能在单人游戏/开放到局域网中 不起作用,需要专用服务器环境才能正常运行。
命令(通过 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)
潜在的已知冲突(请自行选择)
- afk display 数据包(Vanilla Tweaks 数据包,更改玩家列表显示)—— 模组会检查名称中包含任何“afk”的数据包。
- AfkDisplay —— 因为这是 AfkPlus 所基于的模组,并且提供更少的功能。
- AntiLogout (/afk 命令,超时处理)
- Auto AFK (/afk 命令,超时处理)
- Sessility (超时处理)
- Playtime-Tracker (超时处理)
- SvrUtil (/afk 命令,其余部分是安全的)
配置示例
配置位于服务器配置文件夹内的 afkplus.json 文件中。
```json lines
{
"___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 带 .subcommands) 节点配置 (默认: 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 原因 (默认: \"timeout\")",
"afkTimeoutString": "timeout",
"_comment09": "# 用于“ignoreAttacks”检测的默认 AFK 超时消息",
"afkTimeoutIgnoreAttack": "only swinging their sword"
},
"disable_damage": {
"_comment01": "# 在玩家进入 AFK 后 disableDamageCooldown 秒后禁用伤害 (默认: false)",
"disableDamage": false,
"_comment02": "# 启用“DisableDamage”功能的冷却计时器。(默认: 15 秒)",
"_comment03": "# - 警告!请注意,将此值设置过低可能会鼓励不良的玩家行为。",
"disableDamageCooldown": 15,
"_comment04": "# 当 AFK 玩家被标记为无敌时的消息内容。",
"_comment06": "# (默认: \"%player:displayname% is marked as Invulnerable.\")",
"whenDamageDisabled": "%player:displayname% is marked as Invulnerable.",
"_comment08": "# 当 AFK 玩家不再被标记为无敌时的消息
