Skip to content

配置说明

本文档详细说明 QueDP 的各项配置选项,所有内容基于实际代码和示例配置。

主配置文件

plugins/QueDP/config.yml 是插件的主配置文件。

基础设置

yaml
# 语言设置
# 可选值: zh_CN, en_US
language: zh_CN

# 调试模式 - 启用后会输出详细日志
debug: false

数据库配置

yaml
database:
  # 数据库类型
  # YAML - 使用 YAML 文件存储(默认)
  # SQLITE - 使用 SQLite 数据库
  # MYSQL - 使用 MySQL 数据库
  type: YAML
  
  # MySQL 配置(仅当 type=MYSQL 时生效)
  host: localhost
  port: 3306
  database: quedp
  user: root
  password: password

地牢设置

yaml
dungeon:
  # 实例清理超时时间(秒)- 兜底安全机制
  # 用于清理异常情况:玩家全掉线、实例卡死、创建失败等
  # 正常完成的地牢会立即清理,无需等待此时间
  instance-timeout: 7200

重要说明

  • 每个地牢的实例数量限制在各自的 config.yml 中配置(实例限制.最大数量
  • 每个地牢的时间限制在各自的 config.yml 中配置(时间.限制
  • 主配置只保留全局的实例清理超时设置

队伍设置

yaml
party:
  # 最大队伍人数
  max-size: 4
  
  # 邀请超时时间(秒)
  invite-timeout: 60

性能设置

yaml
performance:
  # 异步世界复制(推荐开启)
  # 开启后创建副本时不会卡服
  async-world-copy: true
  
  # 单个副本最大实体数量
  # 超过此数量将不再生成新实体
  entity-limit: 100
  
  # 自动保存间隔(秒)
  # 0 = 禁用自动保存
  auto-save-interval: 600

排行榜设置

yaml
leaderboard:
  # 是否启用排行榜
  enabled: true
  
  # 每页显示条目数
  entries-per-page: 10
  
  # 数据保留天数(0=永久)
  retention-days: 30
  
  # 排行榜更新间隔(秒)
  update-interval: 60

战斗统计设置

yaml
statistics:
  # 是否启用战斗统计
  enabled: true
  
  # 是否在地牢结束时自动显示统计
  auto-show: true
  
  # 是否追踪伤害
  track-damage: true
  
  # 是否追踪承伤
  track-damage-taken: true
  
  # 是否追踪治疗
  track-healing: false
  
  # 统计展示时长(秒)
  display-duration: 30

体力系统设置(可选)

体力系统配置需要手动添加到 config.yml 中:

yaml
# 体力系统(可选配置)
stamina:
  # 是否启用体力系统
  enabled: true
  
  # 最大体力值
  max-stamina: 100
  
  # 体力回复速率(每次回复多少点)
  recovery-rate: 1
  
  # 体力回复间隔(秒)
  recovery-interval: 60

说明:

  • 如果不配置此部分,体力系统默认禁用
  • 启用后,玩家进入地牢会消耗体力(在各地牢的 config.yml 中配置 体力消耗 值)
  • 体力会按照设定的间隔自动回复
  • 体力不足时无法进入需要消耗体力的地牢

地牢配置

每个地牢都有独立的配置文件夹:plugins/QueDP/dungeons/<地牢ID>/

基础配置 (config.yml)

支持中文键和英文键两种格式。

yaml
# 地牢基本信息
地牢:
  ID: "example"
  名称: "&6&l示例地牢"
  图标: "DIAMOND_SWORD"
  难度: "普通"
  描述:
    - "&7这是一个示例地牢"
    - "&7推荐人数: 1-4人"
    - "&7预计用时: 15分钟"

# 世界设置
世界:
  # 模板世界文件夹名称或 schematic 文件名
  # 世界文件夹:位于 plugins/QueDP/maps/ 目录
  # Schematic:位于 plugins/QueDP/maps/schematics/ 目录
  模板: "dungeon_example_template"
  
  # 出生点坐标 "x,y,z,yaw,pitch"
  出生点: "0,64,0,0,0"

# 进入要求
要求:
  # 等级限制
  最小等级: 10
  最大等级: 100
  
  # 人数限制
  最小人数: 1
  最大人数: 4
  
  # 冷却时间(秒)
  冷却时间: 3600
  
  # 体力消耗(0=不消耗)
  # 玩家进入地牢时消耗的体力值
  # 需要先在主配置中启用体力系统
  体力消耗: 0
  
  # 所需物品(消耗)
  # 格式: "材料:数量" 或 "材料"
  需要物品: []
  
  # 所需权限
  需要权限: []

# 时间限制
时间:
  # 时间限制(秒)
  限制: 1800  # 30分钟
  
  # 超时后的处理方式
  # KICK - 踢出地牢
  # FAIL - 标记为失败
  超时处理: "FAIL"

# 实例数量限制
实例限制:
  # 该地牢最多同时运行的实例数量
  # -1 = 无限制
  # 1 = 同一时间只能有一个实例在运行(单例地牢)
  # 3 = 同一时间最多3个实例
  最大数量: -1

英文格式(游戏内编辑器生成的格式):

yaml
dungeon:
  name: "&6&lExample Dungeon"
  icon: "DIAMOND_SWORD"
  difficulty: "NORMAL"
  description: [...]

world:
  template: "dungeon_example"
  spawn: "0,64,0,0,0"

requirements:
  min_level: 10
  max_level: 100
  min_players: 1
  max_players: 4
  cooldown: 3600
  stamina_cost: 0      # 体力消耗
  required_items: []
  required_permissions: []

time:
  limit: 1800
  timeout_action: "FAIL"

instance:
  max_instances: -1

脚本配置 (scripts.yml)

地牢生命周期脚本:

yaml
# 地牢初始化脚本(世界复制完成后执行)
初始化:
  - 发送消息 @所有玩家 "&e地牢正在准备中..."
  - 等待 3秒
  - 播放音效 @所有玩家 "BLOCK_PORTAL_TRAVEL"

# 地牢开始脚本
开始:
  # 开始条件(可选)
  条件:
    - 玩家数量 >= 1
  
  # 条件满足时执行的脚本
  脚本:
    - 发送消息 @所有玩家 "&a&l===== 地牢开始 ====="
    - 发送标题 @所有玩家 "&6&l开始冒险" "&7击败所有怪物"
    - 播放音效 @所有玩家 "ENTITY_PLAYER_LEVELUP" 1.0 1.5
    - 生成怪物组 "第一波"

# 地牢完成脚本
完成:
  - 发送消息 @所有玩家 "&a&l===== 恭喜通关! ====="
  - 发送标题 @所有玩家 "&a&l挑战成功" "&7获得丰厚奖励"
  - 播放音效 @所有玩家 "UI_TOAST_CHALLENGE_COMPLETE"
  - 播放特效 "TOTEM" 在 "0,65,0" 数量=50 速度=0.2
  - 发放奖励 "基础奖励"
  - 等待 5秒
  - 传送所有玩家 到 主世界spawn

# 地牢失败脚本
失败:
  - 发送消息 @所有玩家 "&c&l===== 挑战失败 ====="
  - 发送标题 @所有玩家 "&c&l任务失败" "&7下次再来吧"
  - 播放音效 @所有玩家 "ENTITY_ENDER_DRAGON_GROWL"
  - 等待 3秒
  - 传送所有玩家 到 主世界spawn

# 玩家死亡脚本(单个玩家死亡时触发)
玩家死亡:
  - 发送消息 @触发者 "&c你已死亡!"
  - 等待 5秒
  - 传送 @触发者 到 "0,64,0"
  - 治疗 @触发者
  - 发送消息 @触发者 "&a你已复活!"

# 全队死亡脚本
全队死亡:
  - 发送消息 @所有玩家 "&c&l全队覆灭!"
  - 失败地牢 "全队死亡"

英文格式

yaml
init: [...]
start:
  condition: [...]
  script: [...]
complete: [...]
fail: [...]
player_death: [...]
all_death: [...]

怪物配置 (monsters.yml)

需要 MythicMobs 插件支持。

yaml
怪物组:
  第一波:
    # 是否在地牢开始时自动启动
    自动启动: false
    
    # 怪物列表
    怪物:
      - ID: "SkeletonKing"        # MythicMobs 怪物 ID
        位置: "10,64,10"          # 生成位置 x,y,z
        数量: 3                    # 生成数量
        等级: 5                    # 怪物等级
      
      - ID: "SkeletonKing"
        位置: "-10,64,-10"
        数量: 2
        等级: 5
    
    # 完成条件(可选)
    条件:
      - 存活怪物 <= 0
    
    # 怪物组启动时执行的脚本
    开始时:
      - 发送消息 @所有玩家 "&c&l===== 第一波来袭! ====="
      - 发送标题 @所有玩家 "&c&l第一波" "&7击败所有骷髅"
      - 播放音效 @所有玩家 "ENTITY_WITHER_SPAWN"
      - 播放特效 "EXPLOSION_LARGE" 在 "10,64,10" 数量=5
    
    # 怪物组完成时执行的脚本(条件达成时)
    完成时:
      - 发送消息 @所有玩家 "&a&l第一波已清理!"
      - 播放音效 @所有玩家 "ENTITY_PLAYER_LEVELUP"
      - 删除障碍物 "能量屏障"
      - 等待 3秒
      - 生成怪物组 "第二波"

  Boss战:
    自动启动: false
    
    怪物:
      - ID: "AncientGuardian"
        位置: "0,64,0"
        数量: 1
        等级: 10
    
    条件:
      - 存活怪物 <= 0
    
    开始时:
      - 发送消息 @所有玩家 "&c&l============================================"
      - 发送消息 @所有玩家 "&c&l          BOSS 出现!"
      - 发送标题 @所有玩家 "&c&lBOSS战" "&7击败远古守护者"
      - 播放音效 @所有玩家 "ENTITY_ENDER_DRAGON_GROWL"
      - 闪电 "0,65,0" false
    
    完成时:
      - 发送消息 @所有玩家 "&a&l          BOSS 已击败!"
      - 发送标题 @所有玩家 "&6&l胜利" "&a你们做到了!"
      - 播放音效 @所有玩家 "UI_TOAST_CHALLENGE_COMPLETE"
      - 播放特效 "TOTEM" 在 "0,65,0" 数量=100 速度=0.5
      - 完成地牢

英文格式

yaml
groups:
  wave1:
    auto_start: false
    monsters: [...]
    condition: [...]
    on_start: [...]
    on_end: [...]

障碍物配置 (obstacles.yml)

障碍物是可以动态创建和删除的方块组,支持触碰触发。

yaml
障碍物:
  能量屏障:
    # 方块列表,格式: "x,y,z,方块类型"
    方块:
      - "10,65,10,BARRIER"
      - "10,65,11,BARRIER"
      - "10,65,12,BARRIER"
      - "10,66,10,BARRIER"
      - "10,66,11,BARRIER"
      - "10,66,12,BARRIER"
    
    # 创建时执行的脚本
    创建时:
      - 播放特效 "END_ROD" 在 "10,65,11" 数量=30 速度=0.1
      - 播放音效 @所有玩家 "BLOCK_BEACON_ACTIVATE"
      - 发送消息 @所有玩家 "&c能量屏障已激活!"
    
    # 删除时执行的脚本
    删除时:
      - 播放特效 "EXPLOSION_LARGE" 在 "10,65,11" 数量=10
      - 播放音效 @所有玩家 "ENTITY_GENERIC_EXPLODE"
      - 发送消息 @所有玩家 "&a能量屏障已解除!"
      - 发送标题 @所有玩家 "&a通路打开" "&7继续前进"
    
    # 是否在副本开始时自动创建
    # true - 副本开始时自动放置方块
    # false - 需要通过脚本手动创建
    自动创建: true
    
    # 触发配置
    # 触发模式:无触发、进入触发、离开触发、持续触发
    触发模式: "进入触发"
    
    # 触发时执行的脚本(@触发者 表示触碰的玩家)
    触发脚本:
      - 播放音效 @触发者 "ENTITY_GENERIC_HURT"
      - 造成伤害 @触发者 5
      - 发送消息 @触发者 "&c你触碰到了能量屏障!受到了伤害!"
    
    # 触发冷却时间(秒)避免频繁触发
    触发冷却: 2
    
    # 是否只能触发一次
    仅触发一次: false

  铁门:
    方块:
      - "20,64,20,IRON_BARS"
      - "20,65,20,IRON_BARS"
      - "20,66,20,IRON_BARS"
    
    创建时:
      - 播放音效 @所有玩家 "BLOCK_IRON_DOOR_CLOSE"
      - 播放特效 "SMOKE_NORMAL" 在 "20,65,20" 数量=20
    
    删除时:
      - 播放音效 @所有玩家 "BLOCK_IRON_DOOR_OPEN"
      - 发送消息 @所有玩家 "&a铁门已打开"
    
    # 不自动创建,由脚本控制
    自动创建: false

英文格式

yaml
obstacles:
  barrier1:
    blocks: [...]
    on_create: [...]
    on_delete: [...]
    auto_create: true
    trigger_mode: "enter"
    trigger_script: [...]
    trigger_cooldown: 2
    trigger_once: false

任务配置 (tasks.yml)

定时或循环执行的任务。

yaml
任务:
  # 任务类型1: 定时任务(在特定时间点执行)
  倒计时提醒:
    类型: "定时"
    
    # 时间点配置(秒): 脚本
    时间:
      300:  # 5分钟时
        - 发送消息 @所有玩家 "&e[提醒] 还剩 25 分钟"
        - 播放音效 @所有玩家 "BLOCK_NOTE_BLOCK_PLING"
      
      1200:  # 20分钟时
        - 发送消息 @所有玩家 "&c[警告] 还剩 10 分钟!"
        - 发送标题 @所有玩家 "&c10分钟" "&7加快速度"
        - 播放音效 @所有玩家 "BLOCK_NOTE_BLOCK_BELL"

  # 任务类型2: 循环任务(定期重复执行)
  鼓励提示:
    类型: "循环"
    # 间隔时间(秒)
    间隔: 180  # 每3分钟
    
    # 循环执行的脚本
    脚本:
      - 发送消息 @所有玩家 "&a[提示] 保持团队协作,互相支援!"
      - 播放音效 @所有玩家 "ENTITY_EXPERIENCE_ORB_PICKUP"

  # 任务类型3: 事件任务(特定事件触发)
  治疗波:
    类型: "事件"
    触发: "wave_complete"  # 波次完成时触发
    
    脚本:
      - 发送消息 @所有玩家 "&d[治疗波] 神秘力量治愈了你们!"
      - 治疗 @所有玩家
      - 播放音效 @所有玩家 "BLOCK_BEACON_POWER_SELECT"
      - 播放特效 "HEART" 在 "0,65,0" 数量=30 速度=0.2

英文格式

yaml
tasks:
  timer1:
    type: "timed"
    times:
      300: [...]
  
  loop1:
    type: "loop"
    interval: 180
    script: [...]
  
  event1:
    type: "event"
    trigger: "wave_complete"
    script: [...]

交互点配置 (interacts.yml)

玩家可触发的交互点。

yaml
交互:
  # 类型1: 放置方块触发
  能量块激活:
    类型: "放置方块"
    仅一次: true  # 是否只能触发一次
    
    参数:
      位置: "-5,51,-28"        # 坐标 x,y,z
      方块类型: "DIAMOND_BLOCK"  # 需要放置的方块
      方块名称: "能量块"          # 显示名称(可选)
    
    脚本:
      - 发送消息 @触发者 "&a&l你激活了能量块!"
      - 播放音效 @触发者 "BLOCK_BEACON_ACTIVATE"
      - 播放特效 "FIREWORK" 在 "-5,51,-28" 数量=50 速度=0.3
      - 删除障碍物 "能量屏障"
      - 生成怪物组 "第一波"

  # 类型2: 右键方块触发
  按钮激活:
    类型: "右键方块"
    仅一次: false  # 可重复触发
    
    参数:
      位置: "15,64,15"
      方块类型: "STONE_BUTTON"
    
    脚本:
      - 发送消息 @触发者 "&e你按下了按钮"
      - 播放音效 @所有玩家 "BLOCK_STONE_BUTTON_CLICK_ON"
      - 删除障碍物 "铁门"
      - 等待 10秒
      - 创建障碍物 "铁门"

  # 类型3: 右键实体触发(NPC)
  神秘商人:
    类型: "右键实体"
    仅一次: false
    
    参数:
      实体类型: "VILLAGER"      # Minecraft 实体类型
      实体名称: "&6神秘商人"     # 显示名称
      位置: "5,64,5"
    
    脚本:
      - 发送消息 @触发者 "&e[商人] &7需要帮助吗?"
      - 给予物品 @触发者 "COOKED_BEEF" 5
      - 给予物品 @触发者 "GOLDEN_APPLE" 1
      - 播放音效 @触发者 "ENTITY_VILLAGER_YES"

  # 类型4: 进入区域触发
  危险区域:
    类型: "进入区域"
    仅一次: false
    
    参数:
      最小点: "-20,60,-20"  # 区域的一个对角点
      最大点: "-15,70,-15"  # 区域的另一个对角点
    
    脚本:
      - 发送消息 @触发者 "&c&l你进入了危险区域!"
      - 发送标题 @触发者 "&c危险" "&7小心陷阱"
      - 播放音效 @触发者 "ENTITY_ELDER_GUARDIAN_CURSE"
      - 创建障碍物 "岩浆陷阱"

  # 类型5: 击杀怪物触发
  击杀Boss奖励:
    类型: "击杀怪物"
    仅一次: true
    
    参数:
      怪物ID: "AncientGuardian"  # MythicMobs ID
      数量: 1                     # 需要击杀的数量
    
    脚本:
      - 发送消息 @触发者 "&a&l你获得了击杀奖励!"
      - 给予物品 @触发者 "DIAMOND_SWORD" 1
      - 给予物品 @触发者 "EMERALD" 10
      - 播放音效 @触发者 "UI_TOAST_CHALLENGE_COMPLETE"

  # 类型6: 拾取物品触发
  收集钥匙:
    类型: "拾取物品"
    仅一次: false
    
    参数:
      物品类型: "TRIPWIRE_HOOK"
      物品名称: "&6神秘钥匙"  # 必须完全匹配
    
    脚本:
      - 发送消息 @触发者 "&a你获得了神秘钥匙!"
      - 播放音效 @触发者 "ENTITY_ITEM_PICKUP"
      - 设置变量 has_key true

英文格式

yaml
interacts:
  interact1:
    type: "place_block"
    once: true
    parameters:
      location: "x,y,z"
      block_type: "DIAMOND_BLOCK"
    script: [...]

权限节点

yaml
# 管理员权限
quedp.admin                    # 所有管理员权限

# 命令权限
quedp.command.dungeon         # 地牢命令 (/dg)
quedp.command.party           # 队伍命令 (/pt)
quedp.command.editor          # 编辑器命令 (/dgedit)
quedp.command.admin           # 管理命令 (/dga)

# 地牢权限
quedp.dungeon.<地牢ID>        # 进入特定地牢
quedp.dungeon.vip             # VIP地牢权限(示例)

# 编辑器权限
quedp.editor.use              # 使用编辑器
quedp.editor.create           # 创建地牢
quedp.editor.delete           # 删除地牢

下一步

了解配置后,你可以:

基于 MIT 许可发布