📋 AdventureRule

规则同意系统 — 玩家必须阅读并同意服务器规则后才能游玩

📦 Paper / Purpur 1.21+ 📖 规则书展示 🔑 AuthMe / 铁砧登录兼容 👤 作者: Feiiy

这是什么?

AdventureRule 是一个服务器规则同意插件。新玩家加入时必须阅读并签署规则书,同意后才能正常游戏。未同意规则的玩家将被限制移动、交互、聊天等行为,并显示视觉提示效果。支持多规则、过期重签、AuthMe / AuthMeAnvilLogin (铁砧登录) 兼容、虚空保护等功能。

核心功能

📖
规则书系统
自定义规则书内容,玩家打开并阅读完毕后视为同意
🚫
行为限制
未同意的玩家禁止移动/聊天/命令/交互/攻击/破坏/放置
视觉提示
失明/缓慢等药水效果 + 自定义标题/消息/音效提醒
🔑
AuthMe / 铁砧登录兼容
等待玩家登录/注册后再触发规则,自动检测 AuthMeAnvilLogin 铁砧登录插件
过期重签
规则同意可设置有效期,到期后要求重新阅读签署
🛡️
虚空保护
未同意规则的玩家掉入虚空时自动传送回出生点

📥 安装与依赖

环境要求

项目要求
服务端Paper / Purpur 1.21+
JavaJava 21+
可选依赖AuthMe (登录插件兼容)
可选依赖AuthMeAnvilLogin (铁砧登录插件,自动检测)
可选依赖AdventureManage

安装步骤

  1. AdventureRule.jar 放入 plugins/
  2. 重启服务器,生成默认配置
  3. 编辑 config.yml,按需配置规则、效果和限制
  4. 准备规则书内容(原版书与笔写好后放入规则书文件夹)
  5. 执行 /ar reload

文件结构

plugins/AdventureRule/
├── config.yml          # 主配置
├── messages.yml        # 消息配置
├── rules/              # 规则书目录
│   └── default.yml     # 默认规则书内容
└── data/               # 玩家同意数据

📖 规则书系统

工作原理

  1. 新玩家加入(或规则过期后重新加入)触发规则检查
  2. 插件向玩家发放规则书并自动打开
  3. 玩家阅读完毕关闭规则书,视为同意
  4. 同意后解除所有行为限制和视觉效果

多规则支持

支持配置多个规则 ID,每个规则有独立的规则书内容和过期策略。玩家需要全部同意才能正常游戏。

规则书配置

# config.yml
rule-check:
  enabled: true
  check-on-join: true           # 登录时检查
  first-rule: "default"         # 首次触发的规则ID
  expire-days: 0                # 过期天数 (0=永不过期)
  auto-open-book: true          # 自动打开规则书
  delay-ticks: 20               # 延迟几tick后打开
ℹ️ 规则书制作

使用原版"书与笔"写好规则内容,然后在游戏中手持书执行配置中指定的命令将书保存到插件目录。

视觉效果

药水效果

未同意规则的玩家会被施加药水效果作为视觉提示:

effects:
  enabled: true
  potion-effects:
    - type: BLINDNESS
      amplifier: 0
      duration: 999999      # 极长时间 (同意后移除)
    - type: SLOWNESS
      amplifier: 255         # 极高等级 = 无法移动
      duration: 999999

提醒消息

reminder:
  enabled: true
  interval-ticks: 100       # 提醒间隔 (tick)
  title:
    enabled: true
    title: "&c请先阅读服务器规则"
    subtitle: "&7输入 /rule 打开规则书"
  sound:
    enabled: true
    sound: ENTITY_EXPERIENCE_ORB_PICKUP
    volume: 1.0
    pitch: 1.0

🚫 行为限制

限制配置

未同意规则的玩家以下行为将被完全禁止:

restrictions:
  block-move: true           # 禁止移动
  block-chat: true           # 禁止聊天
  block-command: true        # 禁止执行命令
  block-interact: true       # 禁止交互
  block-attack: true         # 禁止攻击
  block-break: true          # 禁止破坏方块
  block-place: true          # 禁止放置方块
  block-drop: true           # 禁止丢弃物品
  block-pickup: true         # 禁止拾取物品
  allowed-commands:          # 白名单命令 (即使block-command=true)
    - "/rule"
    - "/login"
    - "/register"
    - "/l"
💡 白名单命令

allowed-commands 中的命令即使在禁止命令状态下也可以执行,确保玩家可以使用 /rule 和登录命令。

🔑 AuthMe / 铁砧登录兼容

工作原理

当服务器安装了 AuthMe 登录插件时,AdventureRule 会等待玩家完成 登录或注册 后再触发规则书检查,避免与登录流程冲突。

AuthMe 模式

监听 AuthMe 的 LoginEventRegisterEvent,玩家登录或注册成功后延迟触发规则书。内置去重机制防止注册自动登录时重复触发。

AuthMeAnvilLogin (铁砧登录) 兼容 v1.2.0

AuthMeAnvilLogin 是一个使用铁砧界面作为登录注册 UI 的插件。它通过 AuthMe API 的 forceLogin() / forceRegister() 完成认证,会自动触发 AuthMe 事件。

AdventureRule 自动检测 AuthMeAnvilLogin 插件:

  • 检测到 AuthMeAnvilLogin 时,即使 authme.enabled: false,也会自动启用 AuthMe 挂钩模式
  • 玩家在铁砧 GUI 中完成登录/注册后,自动弹出规则书
  • 建议将 delay-after-login 设为 40-60,等待铁砧 GUI 完全关闭

配置

# config.yml
settings:
  authme:
    # 手动启用 AuthMe 挂钩 (检测到 AuthMeAnvilLogin 时自动启用)
    enabled: false
    # 登录/注册成功后延迟触发 (tick)
    # 使用 AuthMeAnvilLogin 时建议 40-60
    delay-after-login: 40
✅ 自动检测

如果服务器同时安装了 AuthMe 和 AuthMeAnvilLogin,无需手动设置 enabled: true,插件会自动启用挂钩模式并在控制台显示:
已挂钩 AuthMe + AuthMeAnvilLogin (铁砧登录),将在玩家登录/注册后触发规则书。

ℹ️ 命令白名单

确保 allowed-commands 中包含 AuthMe 的登录命令(/login, /register, /l, /reg),否则玩家在规则书打开前无法登录。

流程图

玩家加入服务器
  └─ AuthMeAnvilLogin 打开铁砧 GUI
      └─ 玩家输入密码 → 登录/注册成功
          └─ AuthMe 触发 LoginEvent / RegisterEvent
              └─ AdventureRule 监听到事件
                  └─ 延迟 40 tick 后弹出规则书

🏠 出生点配置

概览

可配置未同意规则的玩家强制传送到指定出生点,防止玩家在受限状态下走失。

配置

spawn:
  enabled: false
  world: "world"
  x: 0.0
  y: 64.0
  z: 0.0
  yaw: 0.0
  pitch: 0.0
  teleport-on-join: true      # 未同意时每次登录传送

🛡️ 虚空保护

概览

未同意规则的玩家掉入虚空时,自动传送回出生点,防止死亡循环。

配置

void-protection:
  enabled: true
  min-y: -64                  # 低于此 Y 坐标触发保护

⚙️ config.yml 完整配置

完整参考

# AdventureRule v1.1.5 主配置

rule-check:
  enabled: true
  check-on-join: true
  first-rule: "default"
  expire-days: 0
  auto-open-book: true
  delay-ticks: 20

effects:
  enabled: true
  potion-effects:
    - type: BLINDNESS
      amplifier: 0
      duration: 999999
    - type: SLOWNESS
      amplifier: 255
      duration: 999999

restrictions:
  block-move: true
  block-chat: true
  block-command: true
  block-interact: true
  block-attack: true
  block-break: true
  block-place: true
  block-drop: true
  block-pickup: true
  allowed-commands:
    - "/rule"
    - "/login"
    - "/register"
    - "/l"

reminder:
  enabled: true
  interval-ticks: 100
  title:
    enabled: true
    title: "&c请先阅读服务器规则"
    subtitle: "&7输入 /rule 打开规则书"
  sound:
    enabled: true
    sound: ENTITY_EXPERIENCE_ORB_PICKUP

spawn:
  enabled: false
  world: "world"
  x: 0.0
  y: 64.0
  z: 0.0

void-protection:
  enabled: true
  min-y: -64

database:
  type: sqlite
  mysql:
    host: localhost
    port: 3306
    database: adventurerule
    username: root
    password: ""
    table-prefix: "ar_"

expiry-task:
  interval-minutes: 30

💬 消息配置

消息文件

所有玩家可见的文本都在 messages.yml 中配置,支持颜色代码和变量:

# messages.yml (部分)
prefix: "&8[&cRule&8] "
consent-success: "&a你已成功同意服务器规则!祝你游戏愉快!"
consent-expired: "&c你的规则同意已过期,请重新阅读规则。"
rule-not-agreed: "&c你尚未同意服务器规则,请先阅读规则书。"
block-chat: "&c请先同意规则后再聊天。"
block-command: "&c请先同意规则后再使用命令。"
block-interact: "&c请先同意规则。"

🗄️ 数据库

存储类型

database:
  type: sqlite              # sqlite / mysql
  mysql:
    host: localhost
    port: 3306
    database: adventurerule
    username: root
    password: ""
    table-prefix: "ar_"

数据清理

expiry-task:
  interval-minutes: 30      # 定时清理过期记录

⌨️ 命令列表

玩家命令

命令说明权限
/rule打开规则书adventurerule.use

管理员命令

命令说明权限
/ar trigger <玩家> [规则ID]对玩家触发规则书adventurerule.admin
/ar list [规则ID] [页码]列出规则同意记录adventurerule.admin
/ar check <玩家>查看玩家同意状态adventurerule.admin
/ar reset <玩家> [规则ID]重置玩家同意状态adventurerule.admin
/ar reload重载配置文件adventurerule.admin

使用示例

# 对玩家触发默认规则
/ar trigger Steve

# 对玩家触发指定规则
/ar trigger Steve privacy_policy

# 查看玩家是否已同意所有规则
/ar check Steve

# 重置玩家的某个规则(要求重新同意)
/ar reset Steve default

# 重置玩家所有规则
/ar reset Steve

🔐 权限节点

权限说明默认
adventurerule.use使用 /rule 命令所有人
adventurerule.bypass跳过规则检查OP
adventurerule.admin管理员命令OP

📝 更新日志

v1.2.0 LATEST

  • NEW AuthMeAnvilLogin 铁砧登录兼容 — 自动检测插件,铁砧登录/注册后弹出规则书
  • NEW AuthMe 注册事件 — 同时监听 LoginEvent + RegisterEvent,内置去重机制
  • IMPROVED 自动挂钩 — 检测到 AuthMeAnvilLogin 时自动启用 AuthMe 模式,无需手动配置
  • CONFIG delay-after-login — 默认值调整为 40 tick,适配铁砧 GUI

v1.1.5

  • IMPROVED 虚空保护 — 可自定义触发 Y 坐标
  • IMPROVED 过期清理 — 定时任务自动清理过期记录
  • CONFIG softdepend — 新增 AdventureManage

v1.1.0

  • NEW 多规则支持 — 可配置多个独立规则 ID
  • NEW 过期重签 — 规则同意可设有效期
  • NEW MySQL 支持 — 跨服数据共享

v1.0.0

  • NEW 初始版本 — 规则书、行为限制、视觉效果、AuthMe 兼容