# GeyserUpdater
一个用于 GeyserMC / Floodgate 的自动更新插件。支持 Spigot (及其 forks,如 Paper)、BungeeCord 和 Velocity。
## 功能
- **获取 GeyserMC 和 Floodgate 的最新稳定版本**,从 Jenkins/下载 API 获取,并覆盖插件目录中现有的 JAR 文件。
- **自动更新检查**:
- 在服务器启动时。
- 在指定的间隔(例如,每 12 小时)。
- 当具有特定权限的玩家登录时(可以启用/禁用)。
- **手动命令**: `/geyserupdate` (权限: `geyserupdater.admin`)。
- 可配置的消息、更新目标、检查间隔和重启命令。
## 构建
- **先决条件**: Java 17, Maven 3.8+
- **说明**:
- 在克隆存储库的目录中运行 `mvn package`。
- **制品**:
- `spigot/target/GeyserUpdater-Spigot-1.0.0.jar`
- `bungee/target/GeyserUpdater-Bungee-1.0.0.jar`
- `velocity/target/GeyserUpdater-Velocity-1.0.0.jar`
## 安装
1. 将适合您服务器平台的 JAR 文件放入插件文件夹中。
2. 启动服务器以生成 `config.yml` 文件(它将与此 README 中包含的默认配置相同)。
3. 该插件将自动检测插件目录中包含“geyser”或“floodgate”的文件来查找现有的 Geyser / Floodgate JAR 文件。
- 如果未找到现有的 JAR 文件,它将创建带有标准名称的新文件(例如,`Geyser-Spigot.jar`、`floodgate-velocity.jar`)。
## 命令 & 权限
- **/geyserupdate**
- **描述**: 立即运行更新检查。
- **权限**: `geyserupdater.admin`
## 配置文件 (`config.yml`)
- `enabled`: 启用或禁用插件。
- `checkOnStartup`: 启用或禁用启动时的更新检查。
- `periodic.enabled`: 启用或禁用周期性更新检查。
- `periodic.intervalHours`: 周期性检查的间隔(以小时为单位)。
- `adminLogin.enabled`: 启用或禁用特权玩家登录时更新检查。
- `adminLogin.permission`: 触发登录时检查的权限(默认为 `geyserupdater.admin`)。
- `targets.geyser | targets.floodgate`: 选择要更新的插件。
- `postUpdate.notifyConsole`: 更新后通知控制台。
- `postUpdate.notifyPlayersWithPermission`: 将游戏内聊天通知发送给具有权限的玩家。
- `postUpdate.runRestartCommand`: 在更新后自动执行重启命令。
- `postUpdate.restartCommand`: 要执行的重启命令(例如,`restart` 或 `end`)。
- `messages.*`: 自定义插件发送的消息。
## 工作原理
- **下载 URL**:
- Geyser: `https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/{platform}`
- Floodgate: `https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/{platform}`
- `{platform}` 将被替换为 `spigot`、`bungeecord` 或 `velocity`。
- 最新 JAR 文件下载到临时文件,并将其 SHA-256 哈希与现有 JAR 文件的哈希进行比较。
- 如果哈希相同,则认为“已更新”,并且不替换该文件。
- 如果哈希不同,则使用原子替换操作覆盖现有文件。
- 应用更新后需要服务器或代理重启。
- 要启用自动重启,请将 `postUpdate.runRestartCommand` 设置为 true,并配置 `restartCommand` 以匹配您服务器的环境。
## 注意事项 / 已知限制
- 如果由于网络问题或其他错误导致下载失败,现有的插件文件将不受影响。
- 如果 Geyser/Floodgate 文件具有不寻常的名称或未位于插件文件夹的根目录中,该插件将无法检测到这些文件(它只扫描插件目录根目录中的 `*.jar` 文件)。
- 该插件不显示版本号;它仅依赖于哈希比较来确定是否可用更新。
## 许可
可以根据要求添加许可(例如,MIT)。