📖 AdventureLectern

一、简介

AdventureLectern —— 一款读经台保护与交互式书本 GUI 插件

AdventureLectern 允许服务器管理员将读经台标记为"受保护"状态,放上成书后自动持久化。玩家右键读经台可直接打开书本GUI阅读,而书本和读经台均受到完整保护,无法被任何人(包括创造模式)破坏。适用于服务器规则公告板、NPC 对话展示台、主城告示牌、活动说明等场景。

AdventureLectern 支持 Paper / Purpur 1.21.4+ 服务器(Java 21),并且会第一时间支持未来版本。

AdventureLectern

  • 完整保护 > 受保护的读经台无法被任何人破坏,只能通过命令移除
  • 书本 GUI > 玩家右键即可打开书本界面阅读,使用 Paper openBook API
  • 全息文字 > Display Entity API 显示 MiniMessage 格式提示文字
  • 数据持久化 > 书本自动序列化保存,重启后自动恢复
  • 爆炸/活塞防护 > 防止 TNT、苦力怕、活塞等间接破坏
  • 交互冷却 > 可配置的右键冷却防止刷屏
  • 粒子效果 > 保护读经台上方显示可配置粒子特效
  • MiniMessage > 全息文字支持 MiniMessage 富文本格式
  • 轻量无依赖 > 无需任何前置插件即可运行

二、插件前置说明

都是非必须

  • 无前置依赖 — 本插件为纯独立插件,无需任何前置

📥 安装部署

环境要求

项目要求
服务端Paper / Purpur 1.21.4+
JavaJava 21+
依赖无(纯 Paper API)

安装步骤

  1. AdventureLectern-1.1.0.jar 放入服务器 plugins/ 目录
  2. 重启服务器
  3. 编辑 plugins/AdventureLectern/config.yml 按需调整
  4. 执行 /al reload 重载配置
⚠️ 注意

不支持 Spigot,仅支持 Paper / Purpur(依赖 Paper 专属 API)。

文件结构

plugins/AdventureLectern/
├── config.yml          # 主配置
└── lecterns.yml        # 受保护读经台数据

📋 使用流程

管理员操作流程

  1. 在地图上放置一个读经台方块
  2. 面对读经台,执行 /al create — 读经台被标记为受保护,全息文字和粒子效果出现
  3. 手持成书(WRITTEN_BOOK),右键读经台 — 书本自动放入并保存到文件
  4. 完成!玩家现在可以右键阅读

玩家使用

  • 右键受保护的读经台 → 直接打开书本界面阅读
  • 无法取走书本、无法破坏读经台

移除保护

  1. 面对受保护的读经台,执行 /al remove
  2. 保护标记、全息文字将被移除
  3. 读经台恢复为普通方块
💡 提示

/al remove 是解除保护的唯一方式,即使管理员也无法直接破坏受保护的读经台。

🛡️ 保护机制

保护范围

威胁保护方式
玩家手动破坏BlockBreakEvent 取消,无权限绕过
创造模式破坏同上,创造模式也被拦截
TNT / 苦力怕爆炸EntityExplodeEvent 从爆炸列表移除
方块爆炸(床/重生锚)BlockExplodeEvent 从爆炸列表移除
活塞推动/拉动BlockPistonExtend/RetractEvent 取消
取走书本(按钮)PlayerTakeLecternBookEvent 取消
取走书本(物品栏点击)InventoryClickEvent 取消

全息文字

技术实现

使用 Paper 原生 Display Entity APITextDisplay),无需额外依赖。

  • 支持 MiniMessage 格式(如 <yellow><gradient:red:blue>
  • 自动面向玩家(Billboard.CENTER)
  • 可配置缩放、阴影、背景色、可见距离
  • 实体标记为非持久化(persistent=false),插件禁用时自动清除
  • 插件启用时自动重建所有全息文字

配置

hologram:
  enabled: true
  text: "<yellow>右键查看规则"    # MiniMessage 格式
  y-offset: 1.2                    # Y轴偏移
  visibility-distance: 16          # 可见距离(格)
  text-shadow: false
  scale: 1.0
  background-color: "40000000"     # ARGB十六进制

⚙️ config.yml 完整配置

完整参考

# AdventureLectern v1.1.0 主配置

# 读经台保护设置
protection:
  protect-lectern: true    # 是否保护读经台不被破坏
  protect-book: true       # 是否禁止取走书本

# 全息文字设置
hologram:
  enabled: true
  text: "<yellow>右键查看规则"
  y-offset: 1.2
  visibility-distance: 16
  text-shadow: false
  scale: 1.0
  background-color: "40000000"

# 粒子效果设置
glow:
  enabled: true
  particle-type: ENCHANT    # ENCHANT / END_ROD / FLAME
  particle-count: 3
  particle-interval: 20     # tick

# 书本GUI设置
book-gui:
  cooldown: 200    # 毫秒

# 消息设置(支持 & 颜色代码)
messages:
  prefix: "&8[&6读经台&8] "
  # ... 各类消息可自定义

🗄️ 数据存储

lecterns.yml

所有受保护的读经台数据存储在 plugins/AdventureLectern/lecterns.yml

lecterns:
  world;100;64;200:
    world: world
    x: 100
    y: 64
    z: 200
    created-at: 1712000000000
    book-data: "rO0ABXNyA..."    # Base64 序列化的书本
  • 管理员放书后自动保存 book-data 字段
  • 服务器重启后自动从 book-data 恢复书本到读经台
  • 使用 Bukkit 序列化(BukkitObjectOutputStream)确保完整保留书本的所有数据

⌨️ 命令列表

主命令:/adventurelectern,别名:/alectern/al

命令说明权限
/al create将面前的读经台标记为受保护adventurelectern.create
/al remove移除面前读经台的保护(唯一解除方式)adventurelectern.destroy
/al list列出所有受保护的读经台坐标adventurelectern.admin
/al reload重载插件配置adventurelectern.reload

🔐 权限节点

权限说明默认
adventurelectern.admin管理员权限(包含所有子权限)OP
adventurelectern.create创建保护 + 放置书本OP
adventurelectern.destroy移除保护(仅通过命令)OP
adventurelectern.reload重载配置OP

📝 更新日志

v1.1.0 LATEST

  • FIX 管理员放书 — 手持成书可以放置到受保护的空读经台
  • FIX 完全保护 — 受保护的读经台任何人都无法破坏(移除权限绕过)
  • NEW 书本持久化 — 放书后自动保存到 lecterns.yml,重启自动恢复
  • NEW 爆炸/活塞防护 — TNT、苦力怕、活塞等间接破坏全面防护

v1.0.0

  • NEW 初始版本 — 读经台保护、全息文字、粒子效果、书本GUI、管理命令