JemAnnouncements

JemAnnouncements

带有聊天、通知、标题和声音的预定/自动公告系统。

实用

一个 Hytale 服务器插件,提供自动公告系统,支持聊天、通知、标题和声音消息。该插件允许你安排和自定义公告,并可按配置的时间间隔自动发送给所有在线玩家。


当前功能

  • 多种消息类型:支持聊天消息、操作栏通知、标题和音效
  • 灵活调度:可配置自动公告的时间间隔
  • 消息排序:选择顺序或随机方式发送消息
  • 优先级系统:设置消息优先级以控制显示顺序
  • 消息居中:自动居中聊天消息,提升展示效果
  • 多消息文件:可将无限数量的公告消息创建为单独的 JSON 文件
  • 丰富格式化:支持十六进制、RGB、传统颜色代码(& 代码)和 TinyMsg 标签
  • 热重载:使用 /announce-reload 命令无需重启服务器即可重载配置和消息
  • 手动触发:使用 /announce <message-name> 命令手动按名称触发任何公告。对于子文件夹中的消息,请使用相对路径(例如 /announce example/example-chat)。
  • 文件夹支持:将消息文件组织到子文件夹中,便于管理
  • 更新检查:检查 GitHub 版本更新,并在有新版本时通知你
  • 示例模板:首次启动时自动生成示例消息模板

消息类型

聊天消息:向所有玩家发送格式化的聊天消息(支持多行、居中显示和丰富格式化) 聊天消息示例

通知:显示类似物品拾取通知的通知,可自定义图标 通知示例

标题消息:显示主标题和副标题消息,可自定义淡入/淡出时间,并支持主要标题 标题示例

音效:向所有玩家播放自定义声音,可配置音量和音调


安装

  1. 发布页面 下载最新版本
  2. JemAnnouncements-x.x.x.jar 文件放入 Hytale 服务器的 mods 文件夹中
  3. 启动服务器以生成配置文件
  4. 编辑 Jemsire_JemAnnouncements/AnnouncementConfig.json 文件,配置时间间隔和排序方式
  5. (可选)自定义 Jemsire_JemAnnouncements/messages/ 文件夹中的消息文件
  6. 在游戏中输入 /announce-reload 以热重载配置并启动插件

注意: 示例消息模板在首次启动时自动创建。你可以对它们进行自定义,或创建自己的消息文件。

配置

首次启动后,配置文件将在你的 mods 文件夹中创建。该插件使用双层配置系统:

  1. AnnouncementConfig.json:包含时间和排序设置的主配置文件
  2. messages/:各个消息的配置文件

主配置文件 (AnnouncementConfig.json)

主配置文件位于 Jemsire_JemAnnouncements/AnnouncementConfig.json

{
  "IntervalSeconds": 300,
  "EnableRandomization": false,
  "CreateExampleMessages": true,
  "LogLevel": "INFO",
  "Version": 1
}

配置选项:

  • IntervalSeconds:公告之间的时间间隔(秒)(默认值:300,即 5 分钟)
  • EnableRandomization:设置为 true 表示随机消息顺序,false 表示顺序发送(默认值:false)
  • CreateExampleMessages:如果设置为 true,插件将在没有示例消息文件时自动创建(默认值:true)。
  • LogLevel:控制控制台中插件日志的详细程度。
    • "INFO"(默认):显示标准的插件信息和错误。
    • "DEBUG":显示详细的内部跟踪,有助于排查消息解析和投递问题。
    • "NONE":除严重错误外,禁用所有日志。
  • Version:配置版本(当前为 1)

消息配置文件

每个公告消息在 Jemsire_JemAnnouncements/messages/ 中都有自己的配置文件。插件会递归扫描此文件夹,因此你可以根据需要将消息组织到子文件夹中。

示例模板在首次启动时自动创建在 messages/example/ 子文件夹中:

  • example/example.json - 包含所有消息类型的完整示例
  • example/example-chat.json - 仅包含聊天消息
  • example/example-notification.json - 仅包含操作栏通知
  • example/example-title.json - 仅包含标题消息
  • example/example-sound.json - 仅包含音效
  • example/example-all.json - 结合了所有消息类型
  • example/example-no-center.json - 无消息居中的示例

消息配置结构

{
  "Enabled": true,
  "Center": true,
  "Priority": 0,
  "ChatMessages": [
    "<aqua><bold>---[Announcement]---</bold></aqua>",
    "<yellow>This is an announcement message!</yellow>"
  ],
  "Notification": {
    "Title": "<yellow><bold>公告</bold></yellow>",
    "Subtitle": "<gray>这是一条通知</gray>",
    "Icon": "Weapon_Sword_Mithril"
  },
  "Title": {
    "Title": "<green><bold>公告</bold></green>",
    "Subtitle": "<gray>这是一条标题</gray>",
    "IsMajor": false,
    "FadeIn": 0.25,
    "Stay": 5.0,
    "FadeOut": 0.25
  },
  "Sound": {
    "SoundName": "SFX_Unbreakable_Block",
    "Volume": 1.0,
    "Pitch": 1.0
  }
}

配置选项:

  • Enabled:启用或禁用此消息(true/false)
  • Center:在聊天窗口中居中聊天消息(true/false,默认值:true)
  • Priority:排序时,优先级较高的消息会先显示(默认值:0)
  • ChatMessages:聊天消息字符串数组(按顺序发送)
  • Notification:通知配置(可选)
  • Title:标题/副标题配置(可选)
  • Sound:音效配置(可选)

消息格式示例

仅聊天消息:

{
  "Enabled": true,
  "Center": true,
  "ChatMessages": [
    "<aqua><b>---[服务器规则]---</b></aqua>",
    "<e>1. 请尊重其他玩家</e>",
    "<e>2. 禁止破坏或作弊</e>",
    "<e>3. 玩得开心!</e>"
  ]
}

带偏移的居中(每行微调居中):

{
  "Enabled": true,
  "Center": true,
  "ChatMessages": [
    "<offset:-3><6>向左偏移 3 个空格</6>",
    "<aqua>正常居中行</aqua>",
    "<offset:5><green>向右偏移 5 个空格</green>"
  ]
}

通知:

{
  "Enabled": true,
  "Notification": {
    "Title": "<yellow><bold>服务器活动开始!</bold></yellow>",
    "Subtitle": "<gray>请在 5 分钟内加入我们</gray>",
    "Icon": "Weapon_Sword_Mithril"
  }
}

标题消息:

{
  "Enabled": true,
  "Title": {
    "Title": "<green><bold>欢迎来到服务器!</bold></green>",
    "Subtitle": "<gray>祝您游玩愉快</gray>",
    "IsMajor": true,
    "FadeIn": 0.5,
    "Stay": 7.0,
    "FadeOut": 0.5
  }
}

音效:

{
  "Enabled": true,
  "Sound": {
    "SoundName": "SFX_Unbreakable_Block",
    "Volume": 1.0,
    "Pitch": 1.0
  }
}

组合(所有类型):

{
  "Enabled": true,
  "Center": true,
  "ChatMessages": [
    "<aqua><bold>---[完整示例]---</bold></aqua>",
    "<yellow>这包含了所有消息类型!</yellow>"
  ],
  "Notification": {
    "Title": "<yellow><bold>完整示例</bold></yellow>",
    "Subtitle": "<gray>所有消息类型组合</gray>",
    "Icon": "Weapon_Sword_Mithril"
  },
  "Title": {
    "Title": "<green><bold>完整公告</bold></green>",
    "Subtitle": "<gray>聊天、通知、标题和声音</gray>",
    "IsMajor": true,
    "FadeIn": 0.5,
    "Stay": 7.0,
    "FadeOut": 0.5
  },
  "Sound": {
    "SoundName": "SFX_Unbreakable_Block",
    "Volume": 1.0,
    "Pitch": 1.0
  },
  "Priority": 0
}

格式化支持

该插件支持 TinyMsg 标签、传统 & 颜色代码和居中偏移。

TinyMsg 标签(类似 HTML):

标签 别名 示例 描述
<color:X> <c:X>, <colour:X> <color:red>文本</color> 命名颜色或十六进制颜色
<gradient:X:Y> <grnt:X:Y> <gradient:gold:red>文本</gradient> 颜色渐变
<bold> <b> <b>文本</b> 加粗
<italic> <i>, <em> <i>文本</i> 斜体
<underline> <u> <u>文本</u> 下划线
<monospace> <mono> <mono>文本</mono> 等宽字体
<link:URL> <url:URL> <link:https://example.com>点击</link> 可点击链接
<reset> <r> <b>加粗<reset>正常 重置格式

命名颜色: black, dark_blue, dark_green, dark_aqua, dark_red, dark_purple, gold, gray, dark_gray, blue, green, aqua, red, light_purple, yellow, white

Minecraft 风格的传统标签: 使用 <0><9> 以及 <a>, <b>, <d>, <e>, <f> 表示与 &0&f 相同的颜色(例如 <e>yellow</e>, <6>gold</6>)。对红色使用 <red><color:red>,这样 <c:#FF0000> 仍可用于十六进制颜色。

十六进制颜色: <color:#FF0000>红色</color><c:#FF00FF>品红</color>

传统 & 颜色代码(解析前转换为 TinyMsg):

  • &0&f – 颜色(例如 &a 绿色,&c 红色)
  • &l 加粗,&o 斜体,&n 下划线,&r 重置
  • &#RRGGBB&x&R&R&G&G&B&B – 十六进制颜色

居中偏移(启用 Center 时每行使用一个):

  • <offset:N> – 调整前导空格:正数 = 向右偏移,负数 = 向左偏移(例如 <offset:-2>, <offset:5>)。该标签会被剥离,不会显示。

注意: 传统 & 代码在解析前会转换为 TinyMsg 标签。你可以在同一条消息中混合使用标签和 & 代码。

命令

  • /announce-reload - 无需重启服务器即可重载插件配置和消息
    • 权限jemsire.announcements.reload
    • 用法:重载主配置和所有消息文件;如果间隔或排序发生变化,则重新启动调度器
  • /announce <message-name> - 按消息名称手动触发公告
    • 权限jemsire.announcements.announce
    • 用法/announce example(消息名称不带 .json 扩展名)
    • 示例/announce example 触发来自 example.json 的消息

本项目是开源的:

欢迎贡献或将其改造为你自己的系统!查看 Github

想要获取我所有项目的更新吗?

加入 Discord!立即加入!