• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
[简易任务]MainQuest-1.12.2-1.21.4

原创 闭源 [简易任务]MainQuest-1.12.2-1.21.4 1.2.0

请登录后获取
版权类型
原创
插件中文名称
主线任务
插件英文名称
MainQuest
原帖地址
#
支持的核心(服务端)
  1. Spigot
  2. Paper
语言支持
中文(简体)
前置组件
PlaceholderAPI
Vault
Playerpoints
NashornJs
适配版本(Java)
  1. 1.21
  2. 1.20
  3. 1.19
  4. 1.18
  5. 1.17
  6. 1.16
  7. 1.15
  8. 1.14
  9. 1.13
  10. 1.12
蓝奏网盘密码: hnc6

时隔。。。不知道多久又来发插件了
这回给大伙带来的是一个简单的任务插件


任务配置介绍
有多简单呢,任务的类型只有五种:击杀、收集、提交、地点、空白

示例任务: example
YAML:
example:
  # 任务ID(越小越靠前)
  id: 1
  # 任务名称
  name: "&a示例任务"
  # 任务图标
  icon:
    material: "BOOK"
    data: 0
    name: "&a示例任务"
    lore:
      - "&a任务ID: 1"
      - "&7这是一个示例任务"
      - " "
      - "<task-stage>"
      - " "
      - "&a左键领取任务,&c右键放弃任务"
      - "&a任务状态: <status>"
      - "&a当前阶段: &b<current-stage>"
    custom-model-data: 0
    tooltip-style: ""
  settings:
    # 该任务是否显示到任务列表中(默认true)
    show-in-list: true
    # 任务是否可重复接取
    repeatable: false
    # 任务可重复接取的次数(可重复接取时才生效,为0则不限制)
    repeat-count: 0
    # 任务领取间隔(单位:秒)
    interval: 86400
    # 接取时执行指令(命令执行者:player、console、op)
    commands:
      - "[player]say &a <player> 接取了任务 <task>"
  # 任务接取条件 (需要满足所有条件才可接取)
  conditions:
    # 前置任务ID(可选,多个任务ID用逗号隔开[1,2],若为空则不指定前置任务)
    prerequisite-tasks: []
    # papi变量判断(>,>=,<,<=,==,!=)
    papi-variables:
      - "%player_level% <= 10"
      - "%player_level% >= 0"

  # 任务内容
  tasks:
    # 阶段1(可写多个阶段)
    1:
      # 任务类型[击杀、收集、提交、空白]
      type: "击杀"
      # 任务内容
      content:
        amount: 1
        # 生物类型
        type: "ZOMBIE"
        # 生物名称(若为空则不指定)
        name: "&a测试任务僵尸"
        # 任务描述(可选)
        description:
          - "&f任务阶段1:"
          - "&f击杀1只&a测试任务僵尸"
          - " "
      # 任务奖励
      reward:
        # 经济奖励
        eco:
          vault: 100
          playerpoints: 0
        # 命令执行(命令执行者:player、console、op)
        commands:
          - "[player]say &a恭喜 <player> 完成了任务阶段 1"
          - "[player]say &a请继续努力完成任务"
    2:
      # 收集:需要玩家将指定类型、指定名字的物品拾取到背包中(物品名完全匹配)
      type: "收集"
      # 任务内容
      content:
        amount: 1
        # 物品类型
        type: "PAPER"
        # 物品名称(若为空则不指定)
        name: "&a测试任务物品"
      # 任务奖励
      reward:
        # 经济奖励
        eco:
          vault: 100
          playerpoints: 0
        # 命令执行(命令执行者:player、console、op)
        commands:
          - "[player]say &a恭喜 <player> 完成了任务阶段 2"
          - "[player]say &a请继续努力完成任务"
    3:
      # 提交:需要玩家将指定类型、指定名字或lore的物品提交
      # [SIZE=15px]四种提交匹配方式[/SIZE]
      # 提交:name:精准 完全匹配物品名字
      # 提交:name:包含 包含匹配物品名字
      # 提交:lore:精确 完全匹配物品lore
      # 提交:lore:包含 包含匹配物品lore
      type: "提交"
      # 任务内容
      content:
        amount: 1
        # 物品类型
        type: "PAPER"
        # 物品名称(若为空则不指定)
        name: "&a测试任务物品"
      # 任务奖励
      reward:
        # 经济奖励
        eco:
          vault: 100
          playerpoints: 0
        # 命令执行(命令执行者:player、console、op)
        commands:
          - "[player]say &a恭喜 <player> 完成了任务阶段 3"
          - "[player]say &a请继续努力完成任务"
    4:
      # 空白:任务阶段,需要指令完成该阶段任务
      type: "空白"
      content:
        description:
          - "&e任务阶段 4 :"
          - "&f该阶段无任务内容"
          - "&f需要执行指令完成该阶段任务"
      reward:
        # 经济奖励
        eco:
          vault: 100
          playerpoints: 0
        # 命令执行(命令执行者:player、console、op)
        commands:
          - "[player]say &a恭喜 <player> 完成了任务阶段 4"
          - "[player]say &a请继续努力完成任务"
    5:
      # 地点: 任务阶段,需要玩家到达指定地点
      type: "地点"
      content:
        # 地点坐标 (世界, X, Y, Z, 半径) 半径默认为5格
        type: "world,0,64,0,5"
        description:
          - "&e任务阶段 8 :"
          - "&f请到达指定地点"
          - "&f坐标: world 0,64,0"
      reward:
        # 经济奖励
        eco:
          vault: 100
          playerpoints: 0
        # 命令执行(命令执行者:player、console、op)
        commands:
          - "[player]say &a恭喜 <player> 完成了任务阶段 8"
          - "[player]say &a请继续努力完成任务"
任务类型
击杀:击杀一定数量的指定生物类型和指定名称的怪物
收集:拾取一定数量指定类型和指定名称的物品
地点: 前往指定的世界坐标
提交:提交一定数量指定类型和指定名称的物品

四种提交匹配方式
提交:name:精准 完全匹配物品名字
提交:name:包含 包含匹配物品名字
提交:lore:精确 完全匹配物品lore
提交:lore:包含 包含匹配物品lore
空白:没有要求,只有描述,该阶段只能由指令去完成

那么空白阶段有什么用呢?这就得发挥你的想象力了
你可以让一个任务里全是空白阶段,然后与指定NPC对话结束后
执行指令/mq complete <玩家> <任务key> <阶段>
这样就算完成了一个对话任务的交互
其他的,例如方块的交互,可以使用脚本方块的形式
右键指定方块后执行完成任务阶段的指令
(绝对不是因为懒,而懒得做交互触发器)

哦对了~任务奖励中的指令支持PAPI变量解析


settings配置
在这里可以配置这个任务是否可以重复接取
以及可重复接取的次数和接取间隔(单位:秒)
是否显示在/mq open的任务大厅中

接取间隔可以设置成86400秒,这样就可以做一个每日任务


conditions配置
在这里可以设置任务的接取条件:前置任务、PAPI变量判断

插件指令
/mq reload - 重载配置和任务"
/mq open [页数] [玩家] - 可为指定玩家打开任务大厅
/mq complete <玩家> <任务key> <阶段> - 强制完成任务阶段
/mq submit <玩家> <任务key> - 提交当前阶段的物品
/mq quest add <玩家> <任务key> - 为玩家添加任务(需判断conditions)
/mq quest set <玩家> <任务key> - 强制为玩家添加任务
/mq quest remove <玩家> <任务key> - 移除玩家的任务
/mq debug - 切换调试模式

在这些指令中,需要注意的是/mq quest add 和 /mq quest set 指令
有什么用呢?由于本插件会将所有任务都显示在任务大厅中
而你可以将一些任务进行隐藏,不显示在任务大厅中
只通过NPC或其他方式向玩家添加任务



一些图片
玩家可使用/mq open指令打开任务大厅
1.webp



插件主配置文件
YAML:
# 数据库配置 (可选sqlite、mysql)
database:
type: sqlite
host: localhost
port: 3306
username: root
password: 123456
database: mainquest
driver-class-name: com.mysql.cj.jdbc.Driver
table-prefix: mainquest_

settings:
# 启动JS任务加载
  # 该功能提供动手能力强的用户,动手能力弱的不需要开启
  # 注意:若使用的java版本高于14,则需要下载NashornJs作为依赖
  # 以下是下载地址: https://wwaos.lanzouu.com/iDmdv3rieved
  js-task: false
# 任务状态变量设置(用于替换任务图标上的<status>变量)
  task-status:
# 待领取任务状态
    pending: "&e待领取"
    # 任务领取状态
    status: "&a已领取"
    # 任务完成状态
    complete: "&6已完成"
    # 任务待提交物品
    submit: "&a待提交"
  # 任务当前阶段变量设置(未接取任务时显示,替换<current-stage>变量)
  task-current-stage:
# 任务当前阶段
    current: "&b未领取任务"
    # 任务已完成阶段
    complete: "&6已完成"
  # 可同时接取的任务数量
  # 0表示不限制
  # 若设置为 1 ,则可以使用PAPI变量
  task-count: 3
  # %MainQuest_Task_id% 返回当前任务ID
  # %MainQuest_Task_stage% 返回任务当前阶段 (指定ID %MainQuest_Task_{任务id}_stage% )
  # %MainQuest_Task_name% 返回当前阶段名称 (指定ID %MainQuest_Task_{任务id}_name% )
  # %MainQuest_Task_type% 返回当前阶段任务类型 (指定ID %MainQuest_Task_{任务id}_type% )
  # %MainQuest_Task_amount% 返回当前阶段任务需求数量 (指定ID %MainQuest_Task_{任务id}_amount% )
# %MainQuest_Task_progress% 返回当前阶段任务进度 (指定ID %MainQuest_Task_{任务id}_progress% )
  # %MainQuest_Task_description_{行数}% 返回当前阶段任务描述 (%MainQuest_Task_{任务id}_description_{行数}% )
  # papi变量在未接取任务时的默认返回值
  task-papi:
id: "无"
    stage: "无"
    name: "无"
    type: "无"
    amount: "无"
    progress: "无"
    description: "无"

  # 任务描述生成模版(若阶段任务有描述则不使用模板)
  task-description-template:
- "&e任务阶段 <stage> :"
    - "- &f<type> <name> x &b<amount>"
    - " "
messages:
# 领取任务成功
  task-success: "&a<player> 领取了任务 <task>"
  # 任务领取失败
  task-fail: "&c<player> 领取任务 <task> 失败"
  # 任务完成成功
  task-complete: "&a<player> 完成了任务 <task>"
  # 任务放弃成功
  task-abandon: "&a已放弃任务 <task>"
  # 任务放弃取消
  task-abandon-fail: "&c放弃任务 <task> 已取消(超时)"
  # 任务物品提交成功
  submit-success: "&a<player> 提交了任务物品 <task>"
  # 任务物品提交失败
  submit-fail: "&c<player> 提交任务物品 <task> 失败, &c背包中没有足够的提交物品"
  # 前置任务未完成
  prerequisite-fail: "&c<player> 领取任务 <task> 失败,前置任务未完成 <list>"
  # 任务正在进行中
  task-active: "&c<task> 该任务正在进行中"
  # 任务不可重复接取
  task-not-repeatable: "&c<task> 该任务不可重复接取"
  # 达到最大接取次数
  task-max-repeats: "&c<task> 该任务已达到最大接取次数 (<count>次)"
  # 领取冷却中
  task-cooldown: "&c<task> 请等待 <time> 秒后再领取该任务"
sounds:
# 点击音效
  click: ""
  # 任务领取成功音效
  task-success: ""
  # 任务领取失败音效
  task-fail: ""
  # 任务完成成功音效
  task-complete: ""

gui:
# 任务GUI标题
  title: "&a任务大厅"
  # 任务GUI大小(9的倍数)
  size: 54
# 任务GUI布局 (M:任务大厅、O:任务图标、P:下一页、N:上一页)
  layout:
- "XXXXMXXXX"
    - "XOOOOOOOX"
    - "XOOOOOOOX"
    - "XOOOOOOOX"
    - "XOOOOOOOX"
    - "PXXXXXXXN"
  items:
# 任务GUI图标
    M:
material: "OAK_SIGN"
      data: 0
name: "&a任务大厅"
      lore:
- "&7信息面板"
      custom-model-data: 0
tooltip-style: ""
    X:
material: "GLASS_PANE"
      data: "0"
      name: "&a边框"
      lore:
- "&7我是边框"
      custom-model-data: 0
tooltip-style: ""
    P:
material: "ARROW"
      data: 0
name: "&a上一页"
      lore:
- "&7上一页"
      custom-model-data: 0
tooltip-style: ""
    N:
material: "ARROW"
      data: 0
name: "&a下一页"
      lore:
- "&7下一页"
      custom-model-data: 0
tooltip-style: ""

重头戏来咯
JS任务引擎API注册自定义任务类型

插件在1.1版本后,新增NashornJs引擎依赖
低版本java(11-14)不需要安装
高版本java(15+)需要安装该依赖
安装后,可在scripts文件中创建自定义JS任务类型
觉得插件默认提供的任务类型太少了?没关系,插件提供了接口
可通过自己的动手能力手动注册任务类型

(JS任务类型加载需要在config.yml中启用,否则不加载)

而API注册任务类型的相关介绍在更新中也有
这里就不过多赘述了


有BUG还请发在评论区里,若没及时回复也可以加QQ群:747657416 反馈

最后依旧是那一句,能用,就不要苛求太多啦~
虽然我只测试到1.21.4,但是更高的版本也可以试试,若可以使用,麻烦发到评论区
十分感谢:给你心心:
作者
Drbiaodi
价格
50.00金粒
下载
22
查看
594
首次发布
最后更新

评分

0.00 星 0 次评分

Drbiaodi 的其他资源

最新更新

  1. 新增随机任务指令、任务数量PAPI变量解析

    1.新增指令/mq quest random <玩家> <多个任务key或任务id> 该指令可知道让某个玩家随机接取任务池中的某个任务 例如/mq quest random...
  2. 新增任务完成后自动领取后续任务

    该功能启用方式如下: settings: # 该任务是否显示到任务列表中(默认true) show-in-list: true # 任务是否可重复接取...
  3. 优化任务类型 击杀

    将任务类型击杀的匹配方式从精确匹配,改为包含匹配
后退
顶部 底部