DominionProtect 是一个面向 Dominion 领地系统的保护记录插件,运行在 Paper / Folia 服务端上。
它的核心功能是记录领地范围内的方块、实体变化,并在需要时允许领地所有者或有权限的玩家进行查询、回滚与恢复。
_____ _____ _ _
| __ \ | __ \ | | | |
| | | | ___ _ __ ___| |__) | __ ___ | |_ ___ ___| |_
| | | |/ _ \| '_ ` _ \ ___/ '__/ _ \| __/ _ \/ __| __|
| |__| | (_) | | | | | | | | | | (_) | || __/ (__| |_
|_____/ \___/|_| |_| |_|_| |_| \___/ \__\___|\___|\__|
与 CoreProtect、Prism 等全服记录插件不同,DominionProtect 有以下关键差异:
- 仅记录领地范围内的变化 — 不记录领地外的活动,大幅降低数据量和性能开销
- 玩家自治 — 领地所有者和拥有权限的成员可以自行查看记录与执行回滚,而不限于管理员
- 订阅制模式 — 领地所有者使用游戏币购买记录存储服务,管理员可配置多种订阅方案
- 全面的事件记录 — 方块破坏/放置、实体击杀、容器操作、交互事件等 29+ 种动作类型
- 高性能异步写入 — 双缓冲区无锁追加,后台批量入库,主线程几乎零开销
- 领地物理隔离 — 每个领地独立记录表,便于管理和清理
- 灵活查询 — 支持按时间、玩家、动作类型、方块、坐标范围等多条件组合筛选
- 检查模式 — 右键/左键方块即可快速查看该位置的变更历史
- 回滚与恢复 — 智能 4 阶段依赖排序(固体→重力→附着→液体),支持幽灵方块预览
- 订阅与经济 — 集成 Vault,支持多档位套餐、配额管理、到期自动清理
- Folia 兼容 — 调度器抽象层,同时兼容 Paper 和 Folia
- 多语言 — 内置中文 (zh_cn) 与英文 (en_us) 语言文件
| 插件 | 类型 | 说明 |
|---|---|---|
| Dominion | 必需 | 领地系统核心,提供领地范围判定与权限 Flag |
| Vault | 可选 | 经济系统接口,用于订阅付费功能 |
此外需要 MariaDB / MySQL 数据库服务。
- 确保服务端为 Paper 1.20.1+ 或 Folia
- 安装 Dominion 插件(4.7.3+)
- (可选)安装 Vault 及经济插件以启用订阅付费
- 将
DominionProtect-<version>.jar放入服务器plugins/目录 - 启动服务器,插件会自动生成配置文件
- 编辑
plugins/DominionProtect/config.yml配置数据库连接 - 重启服务器或执行
/domp admin reload
配置文件位于 plugins/DominionProtect/config.yml,主要配置项:
数据库配置
database:
host: localhost
port: 3306
database: dominion_protect
username: root
password: ""
pool-size: 10记录配置
recording:
flush-interval-seconds: 5 # 异步写入间隔
batch-size: 1000 # 每批写入条数
retry-limit: 3 # 失败重试次数
disabled-actions: # 禁用的动作类型
- block-from-to
- block-spread订阅方案
subscription:
vault-unavailable-strategy: disable # Vault 不可用时: disable | free
plans:
- id: basic
name: "基础方案"
period-days: 30
price: 1000.0
record-limit: 100000
rollback-included: 5
extra-rollback-price: 200.0
quota-full-strategy: stop # 配额用满: stop | evict
- id: premium
name: "高级方案"
period-days: 30
price: 5000.0
record-limit: -1 # 无限制
rollback-included: -1
extra-rollback-price: 0.0
quota-full-strategy: evict回滚配置
rollback:
max-records: 50000 # 单次回滚最大记录数
batch-size: 200 # 每批处理方块数
batch-interval-ticks: 2 # 批次间隔
confirm-timeout-seconds: 30 # 确认超时
preview-enabled: true # 幽灵方块预览
preview-timeout-seconds: 60
preview-max-blocks: 10000清理配置
cleanup:
grace-period-days: 7 # 取消订阅后宽限期
max-retention-days: 90 # 最大数据保留天数
batch-size: 5000
purge-delay-ms: 100
cycle-interval-hours: 6 # 清理任务周期主命令:/dominionprotect(别名:/domp)
| 命令 | 说明 |
|---|---|
/domp help |
查看帮助信息 |
/domp inspect |
切换检查模式(右键/左键方块查看历史) |
/domp lookup [参数] |
查询记录 |
/domp page <next|prev|页码> |
翻页浏览结果 |
/domp rollback [参数] |
发起回滚 |
/domp restore [参数] |
发起恢复 |
/domp confirm |
确认回滚/恢复操作 |
/domp cancel |
取消回滚/恢复操作 |
/domp plans |
查看可用订阅方案 |
/domp subscribe <方案ID> |
订阅方案 |
/domp renew <方案ID> |
续费/切换方案 |
/domp unsubscribe |
取消订阅 |
/domp buy-rollback <数量> |
购买额外回滚次数 |
/domp status |
查看当前订阅状态 |
| 参数 | 说明 | 示例 |
|---|---|---|
t:<时间> |
时间范围 | t:24h、t:7d |
p:<玩家> |
指定玩家 | p:Steve |
a:<动作> |
动作类型 | a:block-break |
r:<半径> |
坐标范围 | r:10 |
b:<方块> |
方块类型 | b:diamond_ore |
e:<排除> |
排除动作 | e:block-fade |
| 命令 | 说明 |
|---|---|
/domp admin status <领地> |
查看指定领地的订阅状态 |
/domp admin enable <领地> <方案> |
为领地启用记录 |
/domp admin disable <领地> |
禁用领地记录 |
/domp admin rollback <领地> [参数] |
管理员强制回滚 |
/domp admin set-rollbacks <领地> <次数> |
设置回滚次数 |
/domp admin grant <领地> <天数> |
延长订阅期限 |
/domp admin purge <领地> |
立即清除领地数据 |
/domp admin reload |
重载配置 |
| 权限节点 | 说明 | 默认 |
|---|---|---|
dominionprotect.admin |
管理员权限(管理命令) | OP |
dominionprotect.default |
普通玩家权限 | 所有人 |
此外,DominionProtect 在 Dominion 系统中注册了两个自定义 Flag:
| Flag | 说明 |
|---|---|
dominion_protect_view |
允许在领地中查看保护记录 |
dominion_protect_rollback |
允许在领地中执行回滚操作 |
领地所有者可以在 Dominion 的权限管理界面中为成员分配这些 Flag。
方块事件(11 种)
| 动作 | 说明 | 触发来源 |
|---|---|---|
block-break |
方块破坏 | 玩家 |
block-place |
方块放置 | 玩家 |
block-fade |
方块消退(冰融化等) | 自然 |
block-form |
方块形成(雪覆盖等) | 自然 |
block-spread |
方块扩散(火焰蔓延等) | 自然 |
block-burn |
方块燃烧 | 自然 |
block-ignite |
方块点燃 | 玩家/自然 |
block-grow |
作物生长 | 自然 |
block-from-to |
液体流动 | 方块 |
block-piston |
活塞推拉 | 方块 |
block-explode |
方块爆炸 | 方块 |
实体事件(5 种)
| 动作 | 说明 | 触发来源 |
|---|---|---|
entity-kill |
实体击杀 | 玩家/实体 |
entity-explode |
实体爆炸(TNT/苦力怕) | 实体 |
entity-change-block |
实体改变方块 | 实体 |
entity-shear |
剪羊毛 | 玩家 |
entity-dye |
给羊染色 | 玩家 |
容器事件(5 种)
| 动作 | 说明 | 触发来源 |
|---|---|---|
container-access |
打开容器 | 玩家 |
item-insert / item-remove |
容器物品操作 | 玩家 |
item-transfer |
漏斗传输 | 方块 |
item-drop |
丢弃物品 | 玩家 |
item-pickup |
拾取物品 | 玩家/实体 |
交互事件(8+ 种)
| 动作 | 说明 | 触发来源 |
|---|---|---|
hanging-place |
悬挂物放置(画/物品展示框) | 玩家 |
hanging-break |
悬挂物破坏 | 玩家/实体/自然 |
sign-change |
告示牌编辑 | 玩家 |
bucket-fill |
桶装液体 | 玩家 |
bucket-empty |
桶倒液体 | 玩家 |
entity-place |
放置实体(船/矿车等) | 玩家 |
vehicle-destroy |
载具破坏 | 玩家/实体 |
block-use |
使用功能方块 | 玩家 |
block-harvest |
收获作物 | 玩家 |
# 编译 + 测试 + 打包
./gradlew build
# 仅运行测试
./gradlew test
# 构建 fat JAR(含 HikariCP)
./gradlew shadowJar
# 清理后构建
./gradlew Clean&Build输出文件:build/libs/DominionProtect-<version>.jar
- JDK 17+
- Gradle(使用项目自带的 Gradle Wrapper 即可)
┌─────────────────────────────────────────────────┐
│ 指令 / UI 层 │
│ 玩家指令 · 管理员指令 · 交互式查询界面 │
├─────────────────────────────────────────────────┤
│ 业务逻辑层 │
│ 查询服务 · 回滚引擎 · 订阅管理 · 权限校验 │
├─────────────────────────────────────────────────┤
│ 事件记录层 │
│ Bukkit 事件监听 · 领地范围判定 · 数据采集 │
├─────────────────────────────────────────────────┤
│ 数据访问层 │
│ HikariCP 连接池 · 动态表管理 · 映射缓存 │
├─────────────────────────────────────────────────┤
│ 基础设施层 │
│ 配置管理 · 调度器 · 日志 · 国际化 │
└─────────────────────────────────────────────────┘
- 双缓冲区异步写入 — 主线程无锁追加,后台线程原子交换缓冲区批量入库
- 每领地独立表 —
dp_records_{dominionId},数据物理隔离,便于清理 - 字符串归一化 — 动作、玩家、世界、材质映射为整型 ID,减少存储开销
- 4 阶段回滚 — 固体 → 重力方块 → 附着方块 → 液体,确保依赖关系正确
- 幽灵方块预览 — 回滚前通过客户端
sendBlockChange预览效果
本项目基于 MIT 许可证 开源。
Copyright (c) 2026 LunaDeerMC