# AutoServer
## 概述
AutoServer 是一个专为 [Velocity 代理](https://papermc.io/software/velocity) 设计的 Minecraft 插件。该插件会在玩家尝试连接时自动启动离线后端服务器。对于希望在需要时才将空闲服务器保持离线以节省资源的服务器网络来说,它非常理想。
## 功能
- 在玩家尝试连接时自动启动后端服务器。
- 在没有玩家在线时自动停止本地服务器。
- 使用命令手动启动和停止后端服务器。
- 支持配置热重载。
- 可自定义消息。
## 快速开始
本节将介绍如何安装和配置 AutoServer 的最小设置。
1. **下载 AutoServer**
前往 [版本](https://modrinth.com/plugin/autoserver/versions?l=velocity) 部分以获取 AutoServer 的最新版本。下载 AutoServer 后,将 JAR 文件放入您的 Velocity 代理的 `plugins` 目录中。
2. **首次启动**
将 AutoServer 放入 `plugins` 目录后,我们需要重启 Velocity 以加载该插件。在首次启动时,AutoServer 将生成配置文件 `autoserver/config.toml`,该文件位于 `plugins` 目录中。
3. **配置您的服务器**
首先请注意您的 `velocity.toml` 文件,查找 `[servers]` 部分。配置 AutoServer 时服务器的命名方式必须完全匹配。
在文本编辑器中打开 `autoserver/config.toml` 并搜索 `[servers]` 部分。此部分指定 AutoServer 将管理的服务器。为要让 AutoServer 管理的每个服务器创建一个表。例如,如果您有一个名为 `lobby` 的服务器,则将创建一个名为 `[servers.lobby]` 的表。
您可以选择两种配置服务器的方式:远程服务器或本地服务器。如果您有远程服务器,请查看 [远程后端](#remote-backend) 部分以获取更多详细信息。为了本节的方便起见,我们将处理一个脚本管理的本地服务器。这个示例本地服务器名为 `lobby`,以下是一个使用脚本启动服务器的最小设置:
```toml
[servers]
[servers.lobby]
# 服务器运行的目录路径。
workingDirectory = "/home/user/minecraft/servers/lobby"
# 启动 "lobby" 服务器的命令。
start = "bash start.sh"
# 或者如果您的 Windows 批处理脚本
# start = "start.bat"
```
4. **为每个服务器重复**
现在,为要由 AutoServer 管理的每个服务器重复第 3 步。此文档的 *命令示例* 部分提供了许多示例命令,可帮助您构建适用于您情况的命令。
## 安装
1. 从 [版本](https://modrinth.com/plugin/autoserver/versions?l=velocity) 下载 `autoserver-velocity-1.x.x.jar` 的最新版本。
2. 将 `AutoServer-velocity-x.x.x.jar` 文件放入您的 Velocity 的 `plugins` 文件夹中。
3. 重新启动您的 Velocity 代理以加载该插件。
## 配置
首次启动后,该插件将在 `plugins/autoserver` 目录中生成一个 `config.toml` 文件。修改此文件以适应您的设置。
### 全局
| **Key** | **Type** | **描述** |
|-------------------|-----------|----------------------------------------------|
| `checkForUpdates` | `boolean` | AutoServer 是否应在启动时检查更新? |
| `messages` | `table` | 将发送给玩家的消息。 |
| `servers` | `table` | 每个服务器的配置。 |
### 消息
| **Key** | **Type** | **描述** |
|------------|----------|-----------------------------------------------------------------------------------------------------------|
| `prefix` | `string` | 添加到向玩家显示的的所有消息的前缀。 |
| `starting` | `string` | 在玩家尝试连接到当前离线的服务器时显示的的消息。 |
| `failed` | `string` | 如果服务器启动失败或无法连接,则向玩家显示的的消息。 |
| `notify` | `string` | 在服务器准备就绪,指示玩家将在短时间内连接时,向玩家显示的的消息。 |
### 服务器
| **Key** | **Type** | **描述** |
|---------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `startupDelay` | `int` | 在启动服务器后尝试连接玩家之前等待的时间(以秒为单位)。 |
| `shutdownDelay` | `int` | 在验证服务器是否已成功关闭之前等待的时间(以秒为单位)。 |
| `start` | `string` | 本地启动服务器时使用的命令。 |
| `stop` | `string` | 本地停止服务器时使用的命令。 |
| `workingDirectory` | `string` | 服务器运行的目录路径。 |
| `remote` | `boolean` | 指定服务器是否是远程服务器 (`true`) 或本地服务器 (`false`)。 |
| `port` | `int` | 远程服务器侦听启动命令的端口号。 |
| `preserveQuotes` | `boolean` | (可选) 控制是否保留前导和尾随引号,默认情况下不保留引号,除非在非 Windows 系统上显式设置 `true`。 |
| `security` | `boolean` | 指定远程服务器是否应使用消息安全 (默认:`true`) |
| `autoShutdownDelay` | `int` | 等待时间(以秒为单位)以自动关闭服务器;将其设置为 0 可禁用此功能。 |
### 命令示例
以下是一些命令示例,可帮助您构建 `start` 和 `stop` 命令。
#### 运行 Java 命令
使用 java 运行服务器:
```toml
start = "java -Xmx4G -Xms4G -jar server.jar nogui"
```
默认情况下,此过程将在后台运行。如果需要连接到该进程,请考虑在新终端会话中启动它。在 Linux 上,可以使用 `x-terminal-emulator`:
```toml
start = "x-terminal-emulator -e java -Xmx4G -Xms4G -jar server.jar nogui"
```
#### 使用 Bash 或 sh 脚本
使用 Bash 或 `sh` 脚本运行:
```toml
start = "bash start.sh"
stop = "bash stop.sh"
```
#### 使用 `screen`
在分离的 `screen` 会话中运行服务器:
```toml
start = "screen -DmS mc-example java -Xmx4G -Xms4G -jar server.jar nogui"
stop = "screen -p 0 -S mc-example -X stuff \"stop\r\""
```
#### 使用 `tmux`
在新 `tmux` 会话中运行服务器:
```toml
start = "tmux new -d -s mc-example 'java -Xmx4G -Xms4G -jar server.jar nogui'"
stop = "tmux send-keys -t mc-example 'stop' C-m"
```
#### 使用 `systemd`
如果您有服务器的 `systemd` 服务,您可以这样控制它:
```toml
start = "systemctl start myserver"
stop = "systemctl stop myserver"
```
**注意**: 您可能存在权限问题。
#### 使用 Docker
使用 Docker 启动和停止服务器:
```toml
start = "docker start mc-example"
stop = "docker stop mc-example"
```
#### Windows
#### 使用 `batch` 脚本
请注意,这将在后台运行。
```toml
start = "start.bat"
```
#### 使用 `start` (Windows 命令提示符)
在新命令提示符窗口中启动服务器:
```toml
start = "cmd /c start \"ExampleTitle\" cmd /c java -Xmx4G -Xms4G -jar server.jar nogui"
```
#### 使用 `PowerShell`
在新 `PowerShell` 窗口中启动服务器:
```toml
start = "powershell -Command Start-Process -FilePath 'java' -ArgumentList '-Xmx4G -Xms4G -jar server.jar nogui'"
```
在新隐藏的 `PowerShell` 窗口中启动服务器:
```toml
start = "powershell -WindowStyle Hidden -Command Start-Process -NoNewWindow -FilePath 'java' -ArgumentList '-Xmx4G -Xms4G -jar server.jar nogui'"
```
#### 使用 `wt`
在同一个 `PowerShell` 窗口的新标签页中启动服务器并执行命令:
```toml
start = "wt -w 0 new-tab -d \"C:/path/to/directory\" \"C:/path/to/script/start.bat\""
```
`workingDirectory` 设置在此命令中无效,因此工作目录通过命令传递。
#### 使用任务计划程序
如果您有启动服务器的计划任务:
```toml
start = "schtasks /run /tn \"MinecraftExampleTask\""
stop = "schtasks /end /tn \"MinecraftExampleTask\""
```
如果您想使用 `stop` 命令,请不要使用 `batch` 脚本。它将结束 `batch` 脚本,但不会结束 `java` 进程。
`workingDirectory` 设置在此命令中无效。 要设置工作目录,请进入任务计划程序 GUI 并编辑任务。有一个名为 `Start in` 的文本框用于工作目录。
## 命令和权限
| 命令 | 描述 | 权限 |
|---------------------------------|-----------------------------------------------------------------------------|------------------------------|
| (无命令,基本权限) | 访问任何命令所需的基准权限 | `autoserver.base` |
| `/autoserver reload` | 重新加载插件配置。 | `autoserver.command.reload` |
| `/autoserver help` | 显示可用命令的帮助菜单 | `autoserver.command.help` |
| `/autoserver status []` | 检查指定服务器的状态,或如果未指定服务器,则检查所有服务器的状态 | `autoserver.command.status` |
| `/autoserver start ` | 运行服务器的启动序列 | `autoserver.command.start` |
| `/autoserver stop ` | 运行服务器的停止序列 | `autoserver.command.stop` |
| `/autoserver info ` | 显示有关指定服务器的详细信息 | `autoserver.command.info` |
| `/autoserver version` | 插件版本 | `autoserver.command.version` |
## 远程后端
**注意:远程服务器支持的功能很可能随着持续的开发而发生变化,请注意此情况。**
远程后端支持适用于 **PaperMC** 和 **FabricMC** 服务器。远程后端仅用于 **远程** 服务器启动功能。
1. 从版本页面下载:
- [AutoServer PaperMC](https://modrinth.com/plugin/autoserver/versions?l=paper)
- [AutoServer FabricMC](https://modrinth.com/plugin/autoserver/versions?l=fabric)
2. 放入 `mods` 或 `plugins` 文件夹中。
3. 重新启动您的服务器以生成配置文件。
首次启动后,该插件将在 JAR 文件的同一目录中生成 `AutoServer/config.yml` 文件,即 `mods` 或 `plugins` 目录。
您需要配置一些设置才能远程后端。首先,您需要设置远程服务器的 `server.workingDirectory` 和 `server.startCommand`。 `startCommand` 设置遵循与 Velocity 插件中的 `start` 相同的规则,请查看 *命令示例* 以获取示例。
您不需要修改 `bootListener` 部分,除非您需要不同的端口用于后端侦听器。
Boot Listener 是等待并监听 Velocity 插件发送的命令以启动服务器的那部分软件——因此得名“Boot Listener”。它还包括命令行界面 (CLI),因此您可以运行命令(如 `reload`)以在无需重新启动 Boot Listener 的情况下热重载配置文件。
由于 CLI 支持,您可能希望在允许您与它交互的终端中运行 Boot Listener,而不是以后台运行的方式运行它。为此,请参考 *命令示例* 以帮助构建命令,然后您可以将 `bootListener.runJarCommand` 更新为所需的内容。
例如,如果您想使用 `screen`,可以执行以下操作:
```yaml
bootListener:
runJarCommand: "screen -DmS boot-listener java -jar %jarName%"
```
## 故障排除
- **服务器无法启动?** 确保 `config.toml` 中的 `start` 命令正确且可执行。在新的终端中运行命令以测试命令的输出很有帮助。