# WorldManager – MV Alternative
WorldManager 是一个 **现代世界管理插件**,专为 Paper 服务器设计,旨在直接替代和改进长期存在的 Multiverse-Core。它基于 Paper 1.21 API 和现代 Java 工具构建,提供一个 **快速、安全且高度可配置的系统**,用于创建、导入、管理和在世界之间传送。
与旧版世界管理器不同,WorldManager 充分利用 **异步操作**、**按世界注册** 和 **可配置规则**,确保性能、可靠性和易用性。几乎所有功能都可以通过直接命令和直观的 **/world GUI** 访问,使其对休闲管理员和高级用户都同样友好。
---
## 1. 理念和目标
WorldManager 的开发是为了解决许多服务器管理员在使用 Multiverse-Core 和类似插件时遇到的常见挫折。目标是:
* **现代实现**: 完全兼容 Paper 1.21,使用 Java 21 编写,并在可能的情况下利用异步 API。
* **易于使用**: 集中式 `/world` 命令及其子命令和 GUI 选项。
* **安全第一**: 内置检查以防止数据丢失或意外删除。
* **持久性**: 每个世界的设置存储在 `worlds.yml` 中,并在世界重新加载时自动重新应用。
* **可配置性**: 消息、安全检查、GUI 行、传送预热时间、冷却时间以及按世界规则都可以配置。
* **可扩展性**: 模块化设计、备份和迁移工具确保该插件可以在不破坏世界的情况下发展。
简而言之:WorldManager 被设计成一个 **对 Multiverse-Core 的即插替代方案**,感觉更自然地融入到现代 Paper 服务器中。
---
## 2. 核心功能
### 2.1 世界生命周期管理
WorldManager 提供对世界生命周期每个阶段的完全控制。
* **创建世界**: 使用 `/world create [env]` 立即生成新的世界。 支持 NORMAL、NETHER 和 THE_END 环境,以及可选参数用于种子、结构和自定义生成器。
* **导入世界**: 使用 `/world import ` 将现有的世界文件夹导入服务器。 该过程是异步的,提供进度百分比和 ETA 更新,以防止延迟。
* **卸载世界**: 使用 `/world unload ` 释放服务器内存。 安全检查确保卸载之前没有玩家在内。
* **删除世界**: 使用 `/world delete ` 从磁盘永久删除世界文件夹。 首先需要卸载世界。
* **备份和迁移**: 自动创建 `worlds.yml` 的时间戳备份,并提供 `/world migrate` 以安全地更新模式。
### 2.2 传送和导航
传送是世界管理的一个主要组成部分,WorldManager 让传送变得无缝。
* **传送命令**: `/world tp [player] ` 将你或另一个玩家直接传送到目标世界的出生点。
* **返回命令**: `/world back` 将你返回到你之前的地点,与你当前的位置交换。
* **历史命令**: `/world history` 列出快速参考的先前传送位置。
* **传送选项**: 预热计时器、冷却时间和移动取消都是完全可配置的。
### 2.3 世界 GUI
所有世界操作都可以通过打开的 `/world gui` 游戏内库存 GUI 访问。
* 带有图标、玩家数量和环境浏览已加载的世界。
* 使用 `/world fav add ` 收藏世界,然后快速访问它们在 GUI 中。
* 单击即可直接从 GUI 传送。
* 在 `config.yml` 中配置的行大小可确保 GUI 能够适应世界数量。
### 2.4 按世界设置和强制执行
每个世界都可以使用特定的规则进行定制,该插件会自动强制执行这些规则。
* **游戏规则**: 保持物品、随机滴速、自然再生、生物破坏、火点、最大实体拥挤度等。
* **世界规则**: 游戏模式、难度、PVP、出生点位置、时间锁定、天气锁定、保持出生点加载。
* **生物允许列表**: 限制在给定世界中自然生成的生物类型。
更改使用 `/world config ` 立即生效,并在 `worlds.yml` 中持久化。
---
## 3. 命令
所有命令都注册在 `/world` (或别名 `/wm`) 下。 以下是已实现的子命令的完整列表:
| 命令 | 描述 | 权限 | | |
| ---------------------------------------- | ---------------------------------------------- | -------------------------------------------- | ---------------------- | ------------------------ |
| `/world list` | 列出所有已加载的世界及其玩家数量 | `worldmanager.list` | | |
| `/world info ` | 显示一个世界设置 | `worldmanager.info` | | |
| `/world tp [player] ` | 将自己或另一个玩家传送到世界出生点 | `worldmanager.tp` / `worldmanager.tp.others` | | |
| `/world back` | 返回到你之前的地点 | `worldmanager.back` | | |
| `/world history` | 查看传送历史 | `worldmanager.history` | | |
| `/world gui` | 打开世界选择器 GUI | `worldmanager.gui` | | |
| \`/world fav \ \[world]\` | 管理世界收藏 | `worldmanager.favorites` |
| `/world create [env]` | 创建一个新世界 | `worldmanager.create` | | |
| `/world import [env]` | 异步导入一个世界文件夹 | `worldmanager.import` | | |
| \`/world unload \[save\:true | false]\` | 安全卸载一个世界 | `worldmanager.unload` | |
| `/world delete ` | 删除一个未加载的世界文件夹 | `worldmanager.delete` | | |
| `/world setspawn ` | 设置一个世界出生点 | `worldmanager.setspawn` | | |
| `/world config ` | 更新每个世界的配置 | `worldmanager.config` | | |
| `/world config allowed-mobs ...` | 管理允许的生物列表 | `worldmanager.config` | | |
| `/world migrate [force]` | 备份和重写 `worlds.yml` | `worldmanager.migrate` | | |
---
## 4. 权限
WorldManager 使用 **细粒度的权限系统**,允许你微调哪些玩家可以访问特定命令。
* `worldmanager.use` – 所有命令的父节点 (默认为 OP)。
* 子权限包括:
* `worldmanager.list`, `worldmanager.info`, `worldmanager.tp`, `worldmanager.tp.others`, `worldmanager.back`, `worldmanager.history`, `worldmanager.gui`, `worldmanager.favorites`, `worldmanager.create`, `worldmanager.import`, `worldmanager.unload`, `worldmanager.delete`, `worldmanager.setspawn`, `worldmanager.config`, `worldmanager.migrate`.
可以通过 `worldmanager.access.` 按世界定义自定义访问权限。
---
## 5. 配置
### 5.1 `config.yml`
主配置文件处理:
* **消息**: 所有消息都可以使用颜色代码进行定制。
* **选项**:
* `prevent_unload_with_players` – 如果玩家仍在内,则禁止卸载 (除非覆盖)。
* `tp_warmup_seconds`, `tp_cooldown_seconds`, `tp_cancel_on_move` – 传送选项。
* `gui_rows` – GUI 中的行数。
* `tp_history_max` – 传送历史记录中存储的条目数。
* `backup_worlds_on_save` – 启用每当 `worlds.yml` 发生更改时自动备份。
* `autoload_registered_worlds` – 启动时自动加载世界。
### 5.2 `worlds.yml`
此文件充当所有管理世界的 **持久注册表**。 每个世界条目包括:
* **别名**
* **游戏模式**
* **难度**
* **PVP**
* **出生点**
* **保持出生点加载**
* **时间/天气锁定**
* **允许的生物**
* **由游戏规则支持的属性**
重新加载或启动时,这些规则会自动应用于世界。
---
## 6. 用法示例
1. **创建一个新世界**
```
/world create survival NORMAL
```
创建一个名为“survival”的新世界。
2. **导入一个现有的世界**
```
/world import SkyLands NORMAL
```
异步导入服务器文件夹中的 `SkyLands`,并在聊天中显示进度和 ETA。
3. **传送玩家**
```
/world tp Steve SkyLands
```
将玩家 Steve 传送到 SkyLands 的出生点。
4. **锁定世界中的时间**
```
/world config SkyLands lock-time true
/world config SkyLands time day
```
将 SkyLands 的时间锁定为白天。
5. **管理生物生成**
```
/world config SkyLands allowed-mobs add ZOMBIE
/world config SkyLands allowed-mobs remove CREEPER
```
允许僵尸生成,但防止 Creeper 在 SkyLands 生成。
---
## 7. 安全性和可靠性
WorldManager 强调 **服务器安全**:
* 如果玩家仍在内,则世界无法卸载 (除非覆盖)。
* 删除世界需要先卸载该世界。
* 每当 `worlds.yml` 发生更改时,都会自动创建备份。
* 迁移工具可确保你的世界注册表始终最新。
---
## 8. 开发者钩子
对于开发者,WorldManager 会将其注册为一项服务,允许通过 Bukkit 的服务管理器进行集成。 插件可以挂接到:
* **世界传送事件** (可取消)。
* **世界生命周期事件** (创建, 导入, 卸载, 删除)。
* **注册表 API** 用于查询管理的世界。
---
## 9. 为什么选择 WorldManager?
WorldManager 结合了 **Multiverse-Core 的最佳功能** 与现代创新:
* 异步世界操作,以防止延迟
* 持久的按世界注册表,自动强制执行
* GUI 支持,便于导航
* 细粒度的权限,以获得更好的服务器控制
* 针对 Paper 进行优化,而不仅仅是 Bukkit/Spigot。
它是一个 **完整的世界管理解决方案**,在休闲管理员的简单性和高级服务器操作员的深度之间取得平衡。