# 区域
这个插件允许服务器管理员和玩家在其 Minecraft 世界中创建和管理受保护的区域。它提供了一种灵活的系统来定义区域、设置权限和控制区域内的互动。
## 特性
* **区域创建:** 使用游戏内选择或手动坐标创建区域。
* **子区域:** 在现有区域内创建子区域,以实现更细粒度的控制。
* **权限管理:** 为区域内的玩家设置详细的权限,控制诸如破坏、放置、互动等操作。
* **成员管理:** 添加和移除区域成员,并为他们分配特定的权限。
* **区域重叠控制:** 配置区域是否可以重叠。
* **权限绕过:** 允许特定玩家绕过区域限制。
* **配置:** 通过配置文件自定义消息和区域设置。
* **信标可视化:** 使用临时信标可视化选定的区域。
## 命令
该插件提供以下命令:
* `/zone create`: 使用当前选择的位置创建一个新的区域。
* 用法:`/zone create`
* 需要使用鼠标左键和右键选择两个位置,如果没有则开始选择。
* 如果新的区域会与现有区域重叠,则会阻止创建,除非设置了 `zones.create.overlap` 权限。
* `/zone subcreate`: 使用当前选择的位置在现有区域内创建一个新的子区域。
* 用法:`/zone subcreate [regionKey]`
* `regionKey` 是可选的,如果未提供,将使用玩家所在位置的区域。
* 需要使用鼠标左键和右键选择两个位置,如果没有则开始选择。
* 玩家需要被视为区域管理员,或者拥有 `zones.subcreate.other` 权限
* `/zone delete`: 删除一个现有的区域。
* 用法:`/zone delete `
* 需要删除区域的 `regionKey`。
* 玩家需要是区域的所有者,或者拥有 `zones.delete.other` 权限
* `/zone expand`: 通过指定数量扩展一个现有的区域。
* 用法:`/zone expand [overlap]`
* 玩家需要是区域的管理员,或者拥有 `zones.expand.other` 权限
* 如果 `overlap` 设置为 `true` 并且玩家拥有 `zones.expand.overlap` 权限,
* 区域将即使与其它区域重叠也会被扩展。
* `/zone info`: 显示有关区域的信息。
* 用法:`/zone info [regionKey]`
* 如果未提供 `regionKey`,将使用玩家所在位置的区域。
* 要显示区域成员,玩家需要是区域的管理员,或者拥有 `zones.info.other` 权限
* `/zone list`: 列出玩家是成员的所有区域。
* 用法:`/zone list`
* 仅显示玩家是成员的区域,除非玩家拥有 `zones.list.other` 权限
* `/zone cancel`: 取消当前区域的选择。
* 用法:`/zone cancel`
* `/zone set`: 为区域的成员设置一个权限。
* 用法:`/zone set `
* `` 是区域的键。
* `` 要设置权限的对象。
* 例如:`Player1` - 用于创建或修改一个组,使用 `+group-GROUPNAME`,其中 GROUPNAME 可以是任何名称。
* `` 是要设置的权限 (例如:`role`, `break`, `place`, `interact`)。
* `` 是权限的值 (
* 例如:`owner`, `true`, `false`, `*`, `!*`, `GRASS_BLOCK`, `!GRASS_BLOCK`)。
* `/zone rename`: 重命名一个区域。
* 用法:`/zone rename `
* `` 是区域的键,`` 是区域的新名称。
* 玩家需要是区域的管理员,或者拥有 `zones.rename.other` 权限
* `/zone select`: 选择一个区域。
* 用法:`/zone select [regionKey]`
* 如果未提供 `regionKey`,将使用玩家所在位置的区域。
* 使用粒子视觉上突出显示区域。
* 玩家需要是区域的成员,或者拥有 `zones.select.other` 权限
* `/zone mode`: 更改选择模式。
* 用法:`/zone mode `
* `` 是要设置的新模式。
* 例如:`3d` 用于 3D 选择模式,`2d` 用于 2D 选择模式。
* `/zone save`: 手动将所有区域保存到文件。
* 用法:`/zone save`
* 仅限管理员,需要 `zones.save` 权限(默认未授予)
* `/zone load`: 手动从文件加载所有区域。
* 用法:`/zone load`
* 仅限管理员,需要 `zones.load` 权限(默认未授予)
* `/zone import`: 从其他插件导入区域。
* 用法:`/zone import `
* 目前仅支持 WorldGuard。
* 仅限管理员,需要 `zones.import` 权限(默认未授予)
## 使用方法
### 创建区域
1. 使用 `/zone create` 命令开始创建过程。
2. 使用鼠标左键点击一个方块来设置区域的第一角。 将会出现一个绿色的信标。
3. 使用鼠标右键点击一个方块来设置区域的第二角。 将会出现一个红色的信标。
4. 使用 `/zone create` 命令创建区域。
### 创建子区域
1. 使用 `/zone subcreate` 命令开始创建过程。
2. 如前所述,选择子区域的两个角。
3. 使用 `/zone subcreate` 命令在您站立的区域内创建子区域或使用 `/zone subcreate ` 在指定的区域内创建子区域。
### 设置权限
1. 使用 `/zone set ` 命令为区域成员设置权限。
* 示例:`/zone set Player1 break true` 允许 "Player1" 在指定的区域中破坏方块。
* 示例:`/zone set Player2 break GRASS_BLOCK` 允许 "Player2" 仅破坏 `GRASS_BLOCK` 方块
在指定的区域中。
* 示例:`/zone set Player3 interact !OAK_DOOR` 拒绝 "Player3" 与 `OAK_DOOR` 互动
在指定的区域中。
* 示例:`/zone set Player4 place *` 允许 "Player4" 在指定的区域中放置所有方块。
* 示例:`/zone set Player5 break !*` 拒绝 "Player5" 在指定的区域中破坏所有方块。
* 组:
* 要分配一个组,将权限值设置为 `group` 为组名。
* 例如:`/zone set +group-some-group-name break true`
* 例如:`/zone set ExamplePlayer group some-group-name`
* ExamplePlayer 现在继承了来自 `some-group-name` 组的 `break` 权限
### 查看区域信息
1. 使用 `/zone info` 命令查看您站立的区域的信息。
2. 使用 `/zone info ` 命令查看特定区域的信息。
## 集成
### WorldGuard
区域支持通过 `/zone import WorldGuard` 命令导入 WorldGuard 区域。 要使用此功能,
您必须安装并启用 WorldGuard。 区域将自动导入所有 Cuboid 区域,包括
其成员。
### WorldEdit
只有在执行玩家被允许手动
修改区域时,WorldEdit 才能用于修改区域中的方块。
### PlaceholderAPI
Zones 为 PlaceholderAPI 插件提供了多个占位符,以显示玩家站立的区域的信息。 目前它支持以下占位符:
* `%zones_get_name%`
* `%zones_get_key%`
* `%zones_get_members%`
* `%zones_get_owner%`
* `%zones_get_min%`
* `%zones_get_min_x%`
* `%zones_get_min_y%`
* `%zones_get_min_z%`
* `%zones_get_max%`
* `%zones_get_max_x%`
* `%zones_get_max_y%`
* `%zones_get_max_z%`
* `%zones_is_member%`
* `%zones_can_place_hand%`
* `%zones_can_break_target%`
* `%zones_can__%`
## 设计选择
* **YAML 配置:** 该插件使用 YAML 文件进行配置和存储,使其易于阅读和修改。
计划在未来版本中添加其他存储选项。
* **权限系统:** 权限系统设计具有灵活性和细粒度,允许对玩家互动进行精细控制。
* **事件驱动:** 该插件使用 Bukkit 的事件系统来处理玩家互动,使其高效且响应迅速。
* **缓存:** 该插件使用缓存系统来提高检查权限时的性能。
## 贡献
欢迎对插件进行贡献! 如果您有任何关于新功能、错误修复或改进的想法,请随时提交拉取请求或打开问题。
## 许可证
此插件采用 MIT 许可证进行分发。