Skip to content

LunaDeerMC/DominionProtect

Repository files navigation

DominionProtect

License: MIT Java Paper Folia DominionAPI

DominionProtect 是一个面向 Dominion 领地系统的保护记录插件,运行在 Paper / Folia 服务端上。

它的核心功能是记录领地范围内的方块、实体变化,并在需要时允许领地所有者或有权限的玩家进行查询、回滚与恢复

  _____                 _____           _            _
 |  __ \               |  __ \         | |          | |
 | |  | | ___  _ __ ___| |__) | __ ___ | |_ ___  ___| |_
 | |  | |/ _ \| '_ ` _ \  ___/ '__/ _ \| __/ _ \/ __| __|
 | |__| | (_) | | | | | | |   | | | (_) | ||  __/ (__| |_
 |_____/ \___/|_| |_| |_|_|   |_|  \___/ \__\___|\___|\__|

与同类插件的区别

与 CoreProtect、Prism 等全服记录插件不同,DominionProtect 有以下关键差异:

  • 仅记录领地范围内的变化 — 不记录领地外的活动,大幅降低数据量和性能开销
  • 玩家自治 — 领地所有者和拥有权限的成员可以自行查看记录与执行回滚,而不限于管理员
  • 订阅制模式 — 领地所有者使用游戏币购买记录存储服务,管理员可配置多种订阅方案

功能特性

  • 全面的事件记录 — 方块破坏/放置、实体击杀、容器操作、交互事件等 29+ 种动作类型
  • 高性能异步写入 — 双缓冲区无锁追加,后台批量入库,主线程几乎零开销
  • 领地物理隔离 — 每个领地独立记录表,便于管理和清理
  • 灵活查询 — 支持按时间、玩家、动作类型、方块、坐标范围等多条件组合筛选
  • 检查模式 — 右键/左键方块即可快速查看该位置的变更历史
  • 回滚与恢复 — 智能 4 阶段依赖排序(固体→重力→附着→液体),支持幽灵方块预览
  • 订阅与经济 — 集成 Vault,支持多档位套餐、配额管理、到期自动清理
  • Folia 兼容 — 调度器抽象层,同时兼容 Paper 和 Folia
  • 多语言 — 内置中文 (zh_cn) 与英文 (en_us) 语言文件

依赖

插件 类型 说明
Dominion 必需 领地系统核心,提供领地范围判定与权限 Flag
Vault 可选 经济系统接口,用于订阅付费功能

此外需要 MariaDB / MySQL 数据库服务。

安装

  1. 确保服务端为 Paper 1.20.1+Folia
  2. 安装 Dominion 插件(4.7.3+)
  3. (可选)安装 Vault 及经济插件以启用订阅付费
  4. DominionProtect-<version>.jar 放入服务器 plugins/ 目录
  5. 启动服务器,插件会自动生成配置文件
  6. 编辑 plugins/DominionProtect/config.yml 配置数据库连接
  7. 重启服务器或执行 /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:24ht: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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages