WorldManager

一个专为速度、安全和简洁而打造的、针对Paper优化的Multiverse替代品。

资源图片
# 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。 它是一个 **完整的世界管理解决方案**,在休闲管理员的简单性和高级服务器操作员的深度之间取得平衡。