每日消息 - MOTD

每日消息 - MOTD

一个健壮、轻量级的Hytale服务器插件,旨在通过可自定义的标题和副标题欢迎玩家加入。该插件采用"代码优先"配置系统,能够自动生成并管理其自身的目录。

实用

今日消息 (MOTD) 插件

一个强大、轻量级的 Hytale 服务器插件,旨在玩家加入时,使用 Hytale 集成的横幅或自定义方式发送服务器公告,通过可自定义的标题和副标题向玩家致意。


📣公告

MOTD 支持使用完全可自定义的事件标题进行服务器范围的公告,并且完全支持服务器控制台。

用法:

  • 单行: "/motd announcement Server Restarting in 5 min" - 这只会显示主标题,副标题默认为"服务器范围公告"。
  • 双行: "/motd announcement Server Restarting in 5 min | Get to somewhere safe" - 使用 "|" 符号,系统会将消息分成两部分,分别设置主标题和副标题。(第一部分是主标题,第二部分是副标题)

⚙️配置:

    "announcement": {
        "isMajor": true, - 更改事件标题的显示样式
        "duration": 5.0, - 更改消息显示的**总**时长(秒)
        "fadeInDuration": 1.5, - 更改淡入效果的持续时间(秒)(包含在总时长内)
        "fadeOutDuration": 1.5, - 更改淡出效果的持续时间(秒)(包含在总时长内)
        "permGroup": "%commandPermissions%", - 默认与命令权限相同,但可根据服务器需求进行配置
        "enabled": true - 启用或禁用公告命令
    }

👋玩家加入

默认情况下,MOTD 会向玩家显示一条欢迎消息。此欢迎消息完全可自定义,并且可以通过启用 randomizeTitle 来实现随机化。

随机标题:

  1. 在配置中启用 randomizedTitle。
  2. 打开并编辑 randomEventTitles.json 文件,添加你想要随机化的消息。
  3. 使用 /motd reload 或重启服务器。

注意 如果你只想随机化一个标题,只需在 json 的对应部分放置一条消息即可。

⚙️配置:

"welcomeBanner": {
        "primaryTitle": "Welcome %player% to MOTD", - 当 randomizeTitle 为 false 时,将显示此主标题
        "secondaryTitle": "Full Customizable", - 当 randomizeTitle 为 false 时,将显示此副标题
        "isMajor": true, - 更改事件标题的显示样式
        "duration": 5.0, - 更改消息显示的**总**时长(秒)
        "fadeInDuration": 1.5, - 更改淡入效果的持续时间(秒)(包含在总时长内)
        "fadeOutDuration": 1.5, - 更改淡出效果的持续时间(秒)(包含在总时长内)
        "randomizeTitle": true, - 更改主副标题数据的来源:默认配置(如上所列)或 randomEventTitle.json
        "permGroup": "%commandPermissions%", - 默认与命令权限相同,但可根据服务器需求进行配置
        "enabled": true - 启用或禁用公告命令
    }

🔄更新可用系统

默认情况下,MOTD 会通知拥有 "hytale:admin" 权限的玩家。可以更改设置以包含其他角色。

注意: 管理员始终会收到通知,因为他们拥有所有权限。

更新通知截图

⚙️配置:

    "updateAvailable": {
        "permGroup": "hytale.admin", - 设置权限组,拥有该权限组的玩家在加入时会看到“更新可用”消息。("hytale:admins" 始终会看到通知,除非被禁用)
        "enabled": true - 启用/禁用通知(不建议关闭)
    }

🛠命令与权限

所有命令默认都需要 hytale.admin 权限节点(即操作员/管理员的标准权限),但这可以在配置中进行更改。

命令 描述
/motd 显示帮助和使用菜单。
/motd reload 立即重新加载 config.json 的更改。
/motd test 在屏幕上预览 MOTD 标题。
/motd player 显示在线玩家,并说明如何向指定玩家显示事件标题

注意: /motd test 命令必须由玩家在游戏中执行。它使用 world.execute() 来安全地桥接 Hytale 命令线程和世界线程,以便访问组件。

⚙️配置

插件会生成一个 "config.json" 文件,你可以根据自己的喜好和服务器需求更改和配置设置。例如,事件标题在屏幕上显示的时长,以及淡入淡出的速度。同时支持在游戏内使用命令进行完整控制。

  • %player% 可以插入到标题消息中,以获取玩家的名字。
  • %commandPermissions% - 可用于引用命令权限所设置的权限。默认为 "hytale:admin"。

节假日欢迎消息示例: "Happy Spooky Season, %player%!" "Merry Christmas, %player%!"

当模组首次加载时,它会在 mods 文件夹中创建一个目录,config.json 将位于该目录内。你可以在服务器运行时编辑 config.json,然后使用 "/motd reload" 重新加载配置设置,使用 "/motd test" 生成欢迎消息。

注意: 对 config.json 文件所做的所有更改都需要执行 /motd reload 或重启服务器才能生效。

更新日志

v0.1.4 命令架构重构与权限系统修复

🛠️ 重构与现代化

  • 直接 ECS 实体解析:命令现在通过 store.getComponent() 直接从世界的 EntityStore 上下文中原生提取实时的 Player 组件。
  • DRY 架构实现:创建并实现了抽象的 MotdSubCommand 基类。子命令现在原生继承全局设置属性,大大减少了各个命令类中的样板代码。

🐛 Bug 修复

  • 解决服务器启动崩溃问题:修复了一个关键的初始化失败(IllegalArgumentException: Invalid permission node),该问题是由于 Hytale 尝试生成包含插件显示名称中空格的权限字符串引起的。通过全局覆盖 canGeneratePermission() -> false 解决。
  • 修复客户端自动补全泄露问题:将子命令可见性逻辑安全地封装在原生 hasPermission(CommandSender) 生命周期钩子内。敏感的管理性子命令(如 reload 和 config)现在对未授权玩家完全隐藏,不会出现在客户端预填充菜单中。

⚙️ 配置与权限

  • 动态节点注册:在核心构造函数中重新引入了显式的 this.requirePermission() 注册,以确保引擎底层的 PermissionsModule 映射在启动时正确同步。
  • 实时重载合规性:标准化了权限检查,使其在执行时动态读取 ModConfig.get().commandPermissions。这确保了通过 /motd reload 调整的权限组更改能够在后端即时生效,无需完全重启服务器。

首次加入事件与配置自修复 v0.1.3

  • 修复了玩家首次加入服务器时欢迎横幅未运行的错误。
  • 增加了配置文件在结构发生变化时的自修复和更新能力。
  • 更改了配置文件结构,以添加针对首次加入的自定义设置。
  • 新增新玩家服务器公告功能(默认关闭)

备注: 目前尚未为这些新的配置区域创建游戏内命令,未来的更新将迁移并使用 UI。


版本 0.1.2 更新:“直接消息”补丁

  • 定向事件标题:新增通过 /motd player 命令向特定玩家发送自定义事件标题的能力。
  • 控制台支持:命令现在从服务器控制台执行时完全兼容。
  • 高级语法解析:
    • 增加了对 | 分隔符的支持,用于在单个命令中分隔主标题和副标题。
    • 如果只提供了一个消息部分,则会集成一个默认的“Message To You”作为副标题。

无需更改配置,因为它从公告配置数据中获取配置。

版本 0.1.1 更新:“控制与自定义”补丁

此更新对管理消息和显示消息的方式进行了重大改进。从实时配置到动态随机标题,你的服务器公告变得更加灵活。

🛠️ 配置与核心更改

  • 结构调整: 配置系统已完全重新设计,以面向未来并扩展选项。
    • ⚠️ 需要操作: 在安装此更新之前,请删除旧的配置文件,以便系统正确生成新的结构。
  • 实时编辑: 添加了聊天命令,允许你在不离开游戏的情况下实时修改配置设置。
  • 权限: 添加了权限以增强你配置此模组的方式。
  • 手动重载系统: 添加了 /motd reload 命令。对配置文件的更改不会自动应用到游戏;需使用此命令将更新推送到服务器。
  • 更新通知: 现在当插件有新版本可用时,你会收到通知,确保你不会错过任何功能或修复。

🎭 新功能

  • 随机标题: 为你的服务器外观增添多样性!
  • 新文件randomEventTitles.json
    • 在此存储你的自定义短语。在配置中启用后,插件将从主标题和副标题中随机抽取内容,保持新鲜感。
  • 服务器范围公告: 目前最大的新增功能!使用 /motd announcement 命令进行高可见度的广播。
  • 控制台支持: 非常适合自动化的服务器重启警告。
  • 双行格式: 使用管道符号 (|) 分隔主标题和副标题文本。
  • 智能默认值: 如果未使用管道符号,副标题默认为 "Server Wide Announcement"

📝 公告示例

  • 单行: /motd announcement Server Restarting in 5 min
  • 双行: /motd announcement Server Restarting in 5 min | Get to somewhere safe