- 版权类型
- 原创
- 插件中文名称
- 主线任务
- 插件英文名称
- MainQuest
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- 语言支持
- 中文(简体)
- 前置组件
- PlaceholderAPI
Vault
Playerpoints
NashornJs
- 适配版本(Java)
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
- 1.15
- 1.14
- 1.13
- 1.12
蓝奏网盘密码: hnc6
时隔。。。不知道多久又来发插件了
这回给大伙带来的是一个简单的任务插件
任务配置介绍
有多简单呢,任务的类型只有五种:击杀、收集、提交、地点、空白
示例任务: example
时隔。。。不知道多久又来发插件了
这回给大伙带来的是一个简单的任务插件
任务配置介绍
有多简单呢,任务的类型只有五种:击杀、收集、提交、地点、空白
示例任务: 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指令打开任务大厅
插件主配置文件
击杀:击杀一定数量的指定生物类型和指定名称的怪物
收集:拾取一定数量指定类型和指定名称的物品
地点: 前往指定的世界坐标
提交:提交一定数量指定类型和指定名称的物品
四种提交匹配方式
提交: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指令打开任务大厅
插件主配置文件
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,但是更高的版本也可以试试,若可以使用,麻烦发到评论区
十分感谢
JS任务引擎和API注册自定义任务类型
插件在1.1版本后,新增NashornJs引擎依赖
低版本java(11-14)不需要安装
高版本java(15+)需要安装该依赖
安装后,可在scripts文件中创建自定义JS任务类型
觉得插件默认提供的任务类型太少了?没关系,插件提供了接口
可通过自己的动手能力手动注册任务类型
(JS任务类型加载需要在config.yml中启用,否则不加载)
而API注册任务类型的相关介绍在更新中也有
这里就不过多赘述了
有BUG还请发在评论区里,若没及时回复也可以加QQ群:747657416 反馈
最后依旧是那一句,能用,就不要苛求太多啦~
虽然我只测试到1.21.4,但是更高的版本也可以试试,若可以使用,麻烦发到评论区
十分感谢