概览
Regions 区域保护模块功能概览
Regions 区域保护
模块简介
Regions 是 Suite 的区域保护与管理模块,定位为 WorldGuard 替代方案。模块提供完整的选区工具、50+ 区域标志、三态标志系统(ALLOW / DENY / NONE)、优先级与父子继承、成员/拥有者权限管理、进出提示、世界规则限制以及 ArcartX UI 图形化管理面板,覆盖区域保护的全部核心场景。
模块提供高性能区域查询与选区/区域边框粒子可视化,并通过 EventBus 发布区域进出事件供其他模块联动。
| 属性 | 值 |
|---|---|
| 模块 ID | regions |
| 版本 | 1.4.4 |
| 配置文件 | config.yml |
| 消息文件 | messages.yml |
| 配置版本 | 3 |
| 命令 ID | regions |
| 命令别名 | rg |
| 外部依赖 | 无(本体内置 API 即可运行) |
| 软依赖 | Essentials 模块(飞行/交互绕过权限) |
| 对外能力 | RegionQueryable(区域查询)、PlayerDataPurgeable、DatabaseMigratable |
功能特性
| 特性 | 说明 |
|---|---|
| 选区工具 | 使用木斧左键设点 1、右键设点 2,粒子柱(红/绿)与选区边框(蓝)实时可视化 |
| 50+ 区域标志 | 覆盖战斗、方块、环境、生物、玩家、杂项六大类别,共 50 个标志 |
| 三态标志 | 每个标志支持 ALLOW / DENY / NONE 三态,NONE 表示未设置并继承父区域或全局 |
| 优先级系统 | 区域可设置优先级,高优先级区域的标志覆盖低优先级区域 |
| 父子继承 | 区域可设置父区域,未设置的标志从父区域继承,支持成环检测 |
| 全局区域 | __global__ 作为无任何区域覆盖时的保底规则 |
| 成员/拥有者 | 支持玩家 UUID 和权限组(g: 前缀)两种成员类型,成员对方块/交互类标志豁免 |
| 进出提示 | 进入/离开区域时通过 Actionbar / Chat / Title 三种方式显示通知,支持自定义 greeting/farewell 文本 |
| 世界规则 | 按世界级别的限制(禁飞、禁活塞、禁交互物品),不依赖区域选区,运行时可 CRUD 并持久化 |
| 区域传送 | tp 命令传送到指定区域中心(最高方块上方) |
| 区域重命名/重定义 | rename / redefine 支持区域改名和范围重新划定 |
| 粒子可视化 | 选区粒子柱 + 选区边框 + 区域边框常驻粒子(/rg show 切换),按视距裁剪 + 节流 |
| ArcartX UI | 玩家区域查看菜单(/rg menu)和管理员管理面板(/rg admin),全图形化交互 |
| 成员豁免 | 方块破坏/放置/交互/容器/载具/丢弃/拾取/骑乘/睡觉等标志对区域成员自动豁免 |
| 管理员绕过 | 拥有 axs.regions.bypass 权限的玩家跳过所有区域保护 |
| 高性能查询 | 空间索引加速区域查询,大数量区域下依然快速 |
| 数据库迁移 | 支持 /axs migrate,可在 SQLite 与 MySQL 之间迁移数据 |
| 玩家数据清理 | 支持 /axs purge,可清理指定/全部玩家的选区与进出追踪数据 |
依赖
| 依赖类型 | 名称 | 必需 | 说明 |
|---|---|---|---|
| 模块软依赖 | Essentials | 否 | module.yml 声明 softdepends: [essentials],提供飞行绕过(axs.essentials.fly.bypass)和交互绕过(axs.essentials.interact.bypass)权限节点 |
| 外部依赖 | 无 | - | 无外部插件依赖 |
| 宿主配置 | 存储 | 否 | shared: true 时共享本体统一数据源 |
区域机制
区域属性
每个区域包含以下属性:
| 属性 | 说明 |
|---|---|
| 区域 ID | 唯一标识符(不区分大小写),同一世界内唯一 |
| 世界 | 区域所在世界 |
| 范围 | 长方体选区(两点坐标自动归一化) |
| 优先级 | 数值越高越优先,默认 0 |
| 父区域 | 可选;未设置的标志从父区域继承 |
| 所有者/成员 | 玩家或权限组(g: 前缀),成员对方块/交互类标志豁免 |
| 标志 | 各标志支持 ALLOW / DENY / NONE 三态 |
| 标志文本 | greeting/farewell 等自定义进出提示文本 |
标志判定规则
当玩家在某坐标执行操作时,按以下规则判定标志:
- 取该坐标的所有覆盖区域,按优先级从高到低逐个检查
- 区域自身设置了标志 → 采用其值(ALLOW/DENY)
- 区域未设置(NONE)→ 沿父区域链向上继承;父链全部未设置 → 检查下一个低优先级区域
- 所有区域均为 NONE → 无保护(允许操作)
- 玩家拥有
axs.regions.bypass权限 → 一律允许 - 标志为 DENY 且属成员豁免类(破坏/放置/交互/容器/载具/丢弃/拾取/骑乘/睡觉)时,区域成员自动豁免
优先级与继承
| 机制 | 说明 |
|---|---|
| 优先级 | 同一坐标可被多个区域覆盖,高优先级区域的标志先被检查;若为 NONE 则继续检查低优先级区域 |
| 父子继承 | 区域可设置父区域(须同世界),未设置的标志从父区域继承 |
| 成环检测 | 设置父区域时自动检测继承环,若沿父链回到自身则拒绝设置 |
| 全局区域 | __global__ 作为保底区域,当无任何区域覆盖时使用其标志 |
选区
| 项 | 说明 |
|---|---|
| 选区工具 | 默认为木斧,可通过 selection.wand-item 配置 |
| 选区操作 | 左键设点 1(红色粒子柱),右键设点 2(绿色粒子柱),两点必须同世界 |
| 体积限制 | 选区体积上限默认 500000 方块,可通过 selection.max-volume 配置 |
| 数量限制 | 每玩家最大区域数默认 20,0 表示无限,可通过 selection.max-regions-per-player 配置 |
| 绕过限制 | 拥有 axs.regions.bypass.limit 权限的玩家不受数量限制 |
| 可视化 | 选区完成后显示蓝色边框粒子 |
进出提示
玩家跨越区域边界时:
- 离开旧区域:显示
farewell自定义文本或默认离开消息(Actionbar/Chat/Title 可配置) - 进入新区域:若
ENTRY标志为 DENY 则阻止进入并提示;否则显示greeting自定义文本或默认进入消息 - 进出时发布 EventBus 事件供其他模块联动
世界规则
世界规则提供按世界级别的限制,独立于区域系统:
| 规则 | 说明 | 绕过权限 |
|---|---|---|
| 禁飞世界 | 进入禁飞世界时取消飞行,阻止飞行切换 | axs.essentials.fly.bypass |
| 禁活塞世界 | 阻止活塞推动 | 无 |
| 禁交互物品 | 按世界配置禁止与指定物品/方块交互 | axs.essentials.interact.bypass |
世界规则可通过管理员 UI 在线修改,修改自动保存。