冷却时间
接取条件
完成条件
完成奖励
ymal
或 mysql
储存调试模式
可方便大家配置任务需要求或条件插件支持所有可以使用Bukkit插件的服务端,如果有无法使用请联系作者
XinxinPluginCore 、 PlaceholderAPI
插件只兼容下列MOD并进行测试,正常使用,其它版本未知,请自行测试。
pixelmon模块:重铸宝可梦
1.12.2-8.4.3
1.16.5-9.1.11
1.20.2-9.2.10
cobblemon模块:方块宝可梦fabric-1.6.1
xtask list
—— 显示任务列表xtask open [界面名]
—— 打开一个任务界面xtask accept [任务id]
—— 手动接取任务xtask accept [任务id]
—— 手动接取任务xtask progress
—— 查看任务进度[] 为必填项,<> 可不填有默认值
xtask reset [界面名]
—— 刷新界面任务xtask clear [任务id] [玩家]
—— 清空任务冷却(任务id写all则刷新所有任务)xtask reload
—— 重载插件%无%
—— 待更新……我们将插件加入服务器并填写好key后启动会生成下列文件
playerdata
玩家数据储存(可无视)
task_gui
此文件夹储存插件界面文件,可在此文件夹以及子文件自定义任务界面内容tasks
此文件夹用于自定义任务界面,可在此文件夹以及子文件夹设置任务config.yml
插件基本配置文件key.yml
用于存放用户验证码文件lang.yml
插件的语言提示文件,可自定义插件提示语
我们首次运行插件时会在插件配置中生成一个 tasks
文件夹
打开 tasks
文件夹可以看到一个默认的配置文件 example.yml
根据默认配置我们可以参考并创建一个新的任务
新任务可以写在默认文件example.yml
或者新建一个文件中新建文件方便各位分类
创建任务时首先我们先来设置任务在界面中的 展示物品
根据下方配置按指定格式设置即可
这里需要注意的是
lore
配置中支持变量%a% = 任务进度
%status% = 任务状态
# 任务id,不可重复
新建的任务:
# 任务展示配置
display:
# 展示物品类型
type: "DIAMOND_BLOCK"
# 展示物品子id
data: 0
# 任务名字,用于展示和设置物品名
name: "放置方块任务"
# 任务介绍
lore:
- "&6这是我任务介绍"
- "&6放置方块即可完成任务!"
- "%a%/10"
- ""
- "%status%"
每个任务单独需要配置是否自动接取
自动发放奖励
奖励执行命令
默认是需要手动接取并在完成任务后自动发放奖励
如果有特殊需求可以在任务配置中自行设置
这里需要讲解的是
accept_condition
配置
这里面可以写多条不同的 条件表达式 进行判定,当玩家全部满足后即可接取任务
# 任务id,不可重复
新建的任务:
# 是否自动接取
auto_accept: false
# 接取任务条件(可使用papi变量进行判定)
accept_condition:
- "'%player_name%' == 'Xinxin'"
# 是否自动发放奖励
auto_reward: true
# 完成任务奖励
rewards:
- "give %player% minecraft:emerald 1"
- "eco give %player% 100"
如果你需要你的任务在一段时间内只能做几次,你可以通过此配置来设置任务刷新的时间
例子1:这个任务我想让玩家在 一周
内只能做 5次
那么你就只需要将 reset_time
设置为 week
再将 reset_amount
设置为 5
例子2:如果你想让玩家完成 一次
任务后 7200秒
才能再次进行这个任务
那么你就只需要将 reset_time
设置为 sec:7200
再将 reset_amount
设置为 1
刷新时间格式
repeat
= 一直重复
never
= 永不重复
day
= 则每天0点刷新
week
= 每周一0点刷新
month
= 每月1号0点刷新
sec:600
= 根据后方数字多少秒刷新
# 任务id,不可重复
新建的任务:
reset_data:
# 任务重置时间
reset_time: "sec:3"
# 如果配置了重置时间
# 做多少次任务后进行重置
reset_amount: 3
这条配置也是任务的核心配置,它用于判断玩家的动作是否能够完成任务条件
如果玩家完成数量达到 amount
配置的数量则代表此任务完成
在配置此项目时建议打开 config.yml
中找到 debug
配置将他设置为 true
然后在游戏中输入 /xtask reload
即可打开 调试模式
在调试模式下我们进行的所有操作都会在后台输出信息
只要你做的动作在后台有类似的输出,则代表你这个动作可以当做任务条件
例如在世界 world
放置了一个 STONE
方块触发的提示
[XinxinTask] 收到事件: BlockPlaceEvent
[XinxinTask] 任务判定数据: {world=world, x=100, y=68, z=259, type=STONE}
例如我们现在想让任务完成条件为 放置10个钻石块
即可完成任务
则将 event
配置修改为 BlockPlaceEvent
然后 amount
设置为 10
为完成所需数量
然后配置 condition
这里面可以写多条不同的 条件表达式 进行判定
当玩家全部满足后才可以视为完成一次任务数量,当完成数量达到 amount
时即为完成任务
这里我设置的任务条件解释为:在 X
位置 >= 68
的位置由玩家名 Xinxin
放置一个 DIAMOND_BLOCK
方块
# 任务id,不可重复
新建的任务:
# 任务要求
requirements:
# 触发事件名
event: "BlockPlaceEvent"
# 判定条件写事件中代表的条件,删除则不判定条件
# 可开debug查看事件返回的数据
condition:
- "%type% == 'DIAMOND_BLOCK'"
- "%x% >= 68"
- "'%player_name%' == 'Xinxin'"
# 任务所需数量
amount: 10
这里需要注意的是我们事件有一些
自定义变量
参数是不用给字符串添加'单引号'
哪些属于自定义变量呢?
在调试模式下
执行动作后台输出的数据[XinxinTask] 任务判定数据: {world=world, x=100, y=68, z=259, type=STONE}
在这条数据中我们可以使用自定义变量数据%world%
%x%
%y%
%z%
%type%
他们的值分别对应后台输出的等号后面的值,可以用来制作一些特殊判定
将刚刚我们写的配置整合在一起,就得到了下方的完整配置
将任务界面保存,并在游戏中发送 /xtask reload
即可加载任务
玩家可发送 /xtask accept 新建的任务
来接取任务
你也可以将这个任务添加到 任务界面 让玩家在任务界面中点击接取任务
概括一下这个任务内容就是:
任务需要手动
接取,接取条件必须满足玩家名是Xinxin
接取后玩家Xinxin
在X
位置>= 68
的位置放置10
个DIAMOND_BLOCK
方块
完成任务后自动
在后台执行give %player% minecraft:emerald 1
命令给予玩家奖励
新建的任务:
display:
type: "DIAMOND_BLOCK"
data: 0
name: "放置方块任务"
lore:
- "&6这是我任务介绍"
- "&6放置方块即可完成任务!"
- "%a%/10"
- ""
- "%status%"
auto_accept: false
accept_condition:
- "'%player_name%' == 'Xinxin'"
auto_reward: true
rewards:
- "give %player% minecraft:emerald 1"
reset_data:
reset_time: "sec:3"
reset_amount: 3
requirements:
event: "BlockPlaceEvent"
condition:
- "%type% == 'DIAMOND_BLOCK'"
- "%x% >= 68"
- "'%player_name%' == 'Xinxin'"
amount: 10
在配置到可以自定义表达式的时候我们可以用 >=
>
<
<=
==
来计算或判断变量是否达到要求
下面的内容则是判断 papi变量%player_name%
是否=Xinxin
因为是 字符串
判断所以需要在判断的字符串前后添加单引号 '字符'
condition:
- "'%player_name%' == 'Xinxin'"
如果是通过整数进行判断则不需要添加单引号例如下方进行 点券变量
的判断
下方判断条件为玩家需要 拥有权限 任务权限
并且 点券数量
大于 100
condition:
- "%playerpoints_points% > 100"
- "'%player_has_permission_任务权限%' == 'yes'"
如果你还是不太懂这个表达式可以开启 调试模式
在进行任务的时候查看后台输出可以检查玩家是否满足你设置的条件
条件是否通过返回的是 false
则代表不满足,如果返回的是 true
则代表满足设置条件
[XinxinTask] 'DIAMOND_BLOCK' == 'STONE'条件是否通过: false
我们首次运行插件时会在插件配置中生成一个 task_gui
文件夹
打开 task_gui
文件夹可以看到一个默认的配置文件 任务界面示例.yml
根据默认配置我们可以参考并在
task_gui
文件夹或他的子文件夹
创建一个新的任务界面
打开默认配置界面可以看到 gui
配置下可以自定义设置 界面大小
标题
自定义按钮
界面大小配置 size
只能设置 9的倍数
且不能大于 54
自定义按钮 custom_button
配置中的 slot
代表这个按钮在界面上的位置 command
玩家点击后会发送的命令
其他配置根据格式自己设置就好
# 界面配置
gui:
title: "&8测试任务接取页面"
size: 36
# 自定义按钮示例
custom_button:
返回按钮:
type: "DIAMOND"
data: 0
name: "&6★ &f返回页面 &6★"
# 展示lore
lore: [ ]
# 按钮所在槽位
slot: 0
# 点击后执行的命令
command:
- "say 我返回了主菜单"
- "trmenu open 主菜单"
第二页:
type: "ARROW"
data: 0
name: "&6★ &f打开第二页 &6★"
lore: [ ]
slot: 8
command:
- "xtask open 任务界面示例2"
# 装饰边框
border:
type: STAINED_GLASS_PANE
data: 15
name: "&6★ &f点击任务按钮接取 &6★"
lore: [ ]
slot:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
task_list
列表下可以写入这个界面可以展示的任务id 可以随意添加
tasks_slot
配置则代表任务所展示的界面位置
reset_time
界面刷新展示任务的时间格式,当你界面任务数过多需要定时随机任务则可以通过这个配置做到定时刷新
如果
tasks_slot
数量大于或等于task_list
数量将会按照tasks_slot
的顺序摆放任务
如果tasks_slot
数量小于task_list
数量将会在界面初始化时随机摆放任务如果你是固定界面并且修改了界面配置
那么你需要先在游戏中发送/xtask reload
然后发送/xtask reset 界面名
重新加载界面才能看到你新增的任务
#界面任务配置
task_set:
# 写这个界面会展示的任务列表
task_list:
- "每日破坏方块"
- "新建的任务"
# 界面展示任务刷新时间配置
# never = 永不重复
# day = 则每天0点随机
# week = 每周一0点随机
# month = 每月1号0点随机
# sec:600 = 根据后方数字多少秒随机
reset_time: "week"
# 任务按钮槽位
# 这里设置多少槽位代表展示多少任务
# 如果任务数量小于槽位数量则按照顺序摆放任务
# 如果任务数量大于槽位数量,则随机摆放指定数量任务
tasks_slot:
- 9
- 10
将我们制作好后就得到了下方配置
再将任务界面整合并保存到 task_gui
文件夹下的一个 xxx.yml
文件中
即可在游戏中输入命令 /xtask open xxx
打开我们的界面了
#界面任务配置
task_set:
# 写这个界面会展示的任务列表
task_list:
- "每日破坏方块"
- "每日破坏方块2"
# 界面展示任务刷新时间配置
# never = 永不重复
# day = 则每天0点随机
# week = 每周一0点随机
# month = 每月1号0点随机
# sec:600 = 根据后方数字多少秒随机
reset_time: "week"
# 任务按钮槽位
# 这里设置多少槽位代表展示多少任务
# 如果任务数量小于槽位数量则按照顺序摆放任务
# 如果任务数量大于槽位数量,则随机摆放指定数量任务
tasks_slot:
- 9
- 10
# 界面配置
gui:
title: "&8测试任务接取页面"
size: 36
# 自定义按钮示例
custom_button:
返回按钮:
type: "DIAMOND"
data: 0
name: "&6★ &f返回页面 &6★"
# 展示lore
lore: [ ]
# 按钮所在槽位
slot: 0
# 点击后执行的命令
command:
- "say 我返回了主菜单"
- "trmenu open 主菜单"
第二页:
type: "ARROW"
data: 0
name: "&6★ &f打开第二页 &6★"
lore: [ ]
slot: 8
command:
- "xtask open 任务界面示例2"
# 装饰边框
border:
type: STAINED_GLASS_PANE
data: 15
name: "&6★ &f点击任务按钮接取 &6★"
lore: [ ]
slot:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
事件名 | 作用 | 自定义参数 | 参数作用 | 数值参数 |
---|---|---|---|---|
AsyncPlayerChatEvent |
玩家发送聊天消息 | message |
聊天内容 | 1 |
PlayerBedEnterEvent |
玩家上床睡觉 | x , y , z , world |
床位置坐标 | 1 |
PlayerBedLeaveEvent |
玩家起床 | x , y , z , world |
床位置坐标 | 1 |
PlayerBucketFillEvent |
玩家用桶装液体 | x , y , z , world |
目标方块位置 | 1 |
PlayerChangedMainHandEvent |
切换主手物品 | 无 | 无 | 1 |
PlayerChangedWorldEvent |
切换世界 | from |
原世界名称 | 1 |
PlayerCommandPreprocessEvent |
执行命令前 | message |
命令内容 | 1 |
PlayerDropItemEvent |
丢弃物品 | name , type , x , y , z , world |
物品信息和位置 | 物品数量 |
PlayerExpChangeEvent |
经验值变化 | 无 | 无 | 经验变化量 |
PlayerFishEvent |
钓鱼 | type , x , y , z , world |
钓到实体信息和位置 | 1 |
PlayerInteractEntityEvent |
与实体交互 | name , type , x , y , z , world |
实体信息和位置 | 1 |
PlayerInteractEvent |
与方块/物品交互 | name , type |
物品信息 | 1 |
PlayerItemBreakEvent |
物品损坏 | name , type |
物品信息 | 1 |
PlayerLevelChangeEvent |
等级变化 | oldLevel , newLevel |
新旧等级 | 新等级-旧等级 |
PlayerRespawnEvent |
玩家重生 | 无 | 无 | 1 |
PlayerShearEntityEvent |
剪羊毛 | name , type , x , y , z , world |
实体信息和位置 | 1 |
PlayerToggleFlightEvent |
切换飞行状态 | isFlying |
飞行状态 | 1 |
PlayerToggleSneakEvent |
切换潜行状态 | isSneaking |
潜行状态 | 1 |
PlayerToggleSprintEvent |
切换疾跑状态 | isSprinting |
疾跑状态 | 1 |
事件名 | 作用 | 自定义参数 | 参数作用 | 数值参数 |
---|---|---|---|---|
EntityDamageByEntityEvent |
实体被攻击 | name , type , x , y , z , world |
被攻击实体信息 | 伤害值 |
PlayerDeathEvent |
玩家死亡 | 无 | 无 | 1 |
EntityDeathEvent |
实体死亡 | name , type , x , y , z , world |
死亡实体信息 | 1 |
事件名 | 作用 | 自定义参数 | 参数作用 | 数值参数 |
---|---|---|---|---|
BlockBreakEvent |
破坏方块 | type , x , y , z , world |
方块信息 | 1 |
BlockPlaceEvent |
放置方块 | type , x , y , z , world |
方块信息 | 1 |
事件名 | 作用 | 自定义参数 | 参数作用 | 数值参数 |
---|---|---|---|---|
CaptureEvent |
捕捉精灵成功 | ball , pokemon , x , y , z , world |
精灵球类型、精灵名称、位置 | 1 |
BeatWildPixelmonEvent |
击败野生精灵 | pokemon , x , y , z , world |
精灵名称、位置 | 1 |
BeatTrainerEvent |
击败NPC训练师 | name , x , y , z , world |
NPC名称、位置 | 1 |
LostToTrainerEvent |
被NPC训练师击败 | name , x , y , z , world |
NPC名称、位置 | 1 |
BattleEndEvent-VICTORY |
战斗胜利 | ispvp , x , y , z , world |
是否PVP、位置 | 1 |
BattleEndEvent-DEFEAT |
战斗失败 | ispvp , x , y , z , world |
是否PVP、位置 | 1 |
BattleEndEvent-DRAW |
战斗平局 | ispvp , x , y , z , world |
是否PVP、位置 | 1 |
RidePokemonEvent |
骑乘精灵 | pokemon , x , y , z , world |
精灵名称、位置 | 1 |
PixelmonSendOutEvent |
放出精灵 | pokemon , x , y , z , world |
精灵名称、位置 | 1 |
PlayerActivateShrineEvent |
激活神鸟祭坛 | pokemon , x , y , z , world |
祭坛类型、位置 | 1 |
IlexShrineEvent |
雪拉比祠堂 | pokemon , x , y , z , world |
精灵名称、位置 | 1 |
ArceusEvent-PlayFlute |
召唤阿尔宙斯 | x , y , z , world |
位置 | 1 |
TimespaceEvent-PlaceChain |
放置项链 | x , y , z , world |
位置 | 1 |
BottleCapEvent |
使用王冠 | type , x , y , z , world |
王冠类型、位置 | 1 |
EVsGainedEvent |
增加努力值 | pokemon , type , x , y , z , world |
精灵名称、努力值类型、位置 | 努力值量 |
ItemFormChangeEvent |
使用道具更改形态 | pokemon , isFusion , item , x , y , z , world , fusion |
精灵名称、是否融合、道具、位置、融合精灵 | 1 |
ItemInteractionEvent |
使用道具交互 | pokemon , item , x , y , z , world |
精灵名称、道具、位置 | 1 |
MovesetEvent-LearntMoveEvent |
学会招式 | pokemon , move , move_0 -move_3 , x , y , z , world |
精灵名称、招式、招式列表、位置 | 1 |
MovesetEvent-ForgotMoveEvent |
遗忘招式 | pokemon , move , move_0 -move_3 , x , y , z , world |
精灵名称、招式、招式列表、位置 | 1 |
ExperienceGainEvent |
获取经验 | pokemon , type , x , y , z , world |
精灵名称、经验类型、位置 | 经验值 |
LevelUpEvent |
等级提升 | pokemon , newLevel , x , y , z , world |
精灵名称、新等级、位置 | 1 |
EvolveEvent |
精灵进化 | pokemon , preEvo , evoType , x , y , z , world |
精灵名称、进化前形态、进化类型、位置 | 1 |
RareCandyEvent |
使用糖果 | pokemon , item , x , y , z , world |
精灵名称、道具、位置 | 1 |
PokeLootEvent-Drop |
打开奖励箱 | item , x , y , z , world |
掉落物品、位置 | 1 |
ApricornEvent-PickApricorn |
采摘树果 | type , x , y , z , world |
树果类型、位置 | 1 |
BerryEvent-PickBerry |
采摘浆果(仅1.12.2) | type , x , y , z , world |
浆果类型、位置 | 1 |
FishingEvent-Catch |
钓鱼捕获 | rod , entity , marks , tick , x , y , z , world |
钓竿类型、实体、标记、时间、位置 | 1 |
AttackEvent-Use |
使用招式 | target , move , x , y , z , world |
目标精灵、招式名称、位置 | 1 |
SetNicknameEvent |
更改昵称 | nickname , pokemon , x , y , z , world |
昵称、精灵名称、位置 | 1 |
PixelmonTradeEvent |
交换精灵 | pokemon , pokemon2 , x , y , z , world |
精灵1、精灵2、位置 | 1 |
ShopkeeperEvent-Sell |
出售商品 | item , type , x , y , z , world |
物品、类型、位置 | 1 |
ShopkeeperEvent-Purchase |
购买商品 | item , type , x , y , z , world |
物品、类型、位置 | 1 |
LensUsedEvent |
使用透镜 | pokemon , type , x , y , z , world |
精灵名称、透镜类型、位置 | 1 |
事件名 | 作用 | 自定义参数 | 参数作用 | 数值参数 |
---|---|---|---|---|
POKEMON_CAPTURED |
捕捉宝可梦 | ball , pokemon , x , y , z , world |
精灵球类型、宝可梦名称、玩家坐标和世界 | 1 |
POKEMON_RELEASED_EVENT_POST |
放生宝可梦 | pokemon , x , y , z , world |
宝可梦名称、坐标、世界名 | 1 |
POKEMON_GAINED |
获得新宝可梦 | pokemon , x , y , z , world |
宝可梦名称、坐标、世界名 | 1 |
POKEMON_SEEN |
首次看到宝可梦 | pokemon , x , y , z , world |
宝可梦名称、坐标、世界名 | 1 |
BATTLE_VICTORY |
战斗胜利 | ispvp , isPvW , isPvN , x , y , z , world |
战斗类型标识(ispvp = PvP, isPvW = PvW, isPvN = PvN)、坐标、世界名 |
1 |
MEGA_EVOLUTION |
Mega进化 | ispvp , isPvW , isPvN , pokemon , x , y , z , world |
战斗类型标识(ispvp = PvP, isPvW = PvW, isPvN = PvN)、宝可梦名称、坐标、世界名 |
1 |
TERASTALLIZATION |
太晶进化 | ispvp , isPvW , isPvN , pokemon , x , y , z , world |
战斗类型标识(ispvp = PvP, isPvW = PvW, isPvN = PvN)、宝可梦名称、坐标、世界名 |
1 |
ZPOWER_USED |
使用Z招式 | ispvp , isPvW , isPvN , pokemon , x , y , z , world |
战斗类型标识(ispvp = PvP, isPvW = PvW, isPvN = PvN)、宝可梦名称、坐标、世界名 |
1 |
EVOLUTION_COMPLETE |
宝可梦进化完成 | pokemon , x , y , z , world |
宝可梦名称、坐标、世界名 | 1 |
FRIENDSHIP_UPDATED |
亲密度变化 | pokemon , newFriend , x , y , z , world |
宝可梦名称、新亲密度、坐标、世界名 | 新值 - 旧值 |
POKEMON_NICKNAMED |
更改昵称 | pokemon , nick , x , y , z , world |
宝可梦名称、新昵称、坐标、世界名 | 1 |
HELD_ITEM_POST |
携带道具 | pokemon , received , returned , x , y , z , world |
宝可梦名称、新旧道具、坐标、世界名 | 1 |
LEVEL_UP_EVENT |
升级事件 | pokemon , x , y , z , world |
宝可梦名称、坐标、世界名 | 新等级 - 旧等级 |
EXPERIENCE_GAINED_EVENT_POST |
获得经验 | pokemon , level , previousLevel , x , y , z , world |
宝可梦名称、当前/之前等级、坐标、世界名 | 获得经验值 |
BOBBER_SPAWN_POKEMON_POST |
钓鱼钓上宝可梦 | pokemon , bait , bobber , chosenBucket , x , y , z , world |
宝可梦名称、诱饵、浮漂、随机池、坐标、世界名 | 1 |
BERRY_HARVEST |
收获树果 | berry , x , y , z , world |
树果名称、坐标、世界名 | 1 |
LEFTOVERS_CREATED |
制作剩饭 | x , y , z , world |
坐标、世界名 | 1 |
STARTER_CHOSEN |
选择初始宝可梦 | pokemon , x , y , z , world |
宝可梦名称、坐标、世界名 | 1 |
FOSSIL_REVIVED |
化石复活 | pokemon , x , y , z , world |
宝可梦名称、坐标、世界名 | 1 |