功能介绍
Bingo 是一种填格子类型游戏玩法,此插件与 Bingo 玩法类似,玩家通过完成卡片任务获得奖励并累计任务组进度解锁更高级的任务组,但这都取决于你的设定。
此插件不仅可实现 Bingo
游戏类型玩法,还可以做为 剧情任务
、活动任务
、新手任务
等多种功能。
因为此插件定制性极高,所以文件类型较多,在查看本篇 Wiki 之前请确保你已经生成了一份 默认配置
,并结合默认配置与文中样例配置进行理解。
插件本体校验
市面上可能存在篡改过的版本,为了您的系统安全考虑,如果你无法确定你的插件来源,请校验文件版本。
Pixelmon
Pixelmon 模组的 1.12.2 与 1.16.5 版本在插件本体内部自带模块,无需安装额外插件。
| 文件 | 说明 | SHA256 |
|:------------------------------------------😐:------------------😐:----------------------------------------------------------------😐
| Bingo-1.4.0-SNAPSHOT.jar | Bingo 插件本体 | f342575d81868351a5c47807e6723ac3f27d53ab936d74393b6582acc9ee5fe5 |
| BingoPixelmonExpansions-1.0.0-SNAPSHOT.jar | Pixelmon 1.20.1 扩展 | 9e9f2dc2ed7d605aab0186247caf4f80fe97826a44e246662a6997167d118a7e |
| BingoPixelmonExpansions-1.20.2-0.1.jar | Pixelmon 1.20.2 扩展 | 3b9bec8d0a3bc830dd5f6ef7ed5f5a19deb0b7ad57429d8380e0b7a52127b67d |
CustomCrops / CustomFishing
| 文件 | 说明 | SHA256 |
| :--------------------------------------: | :-------------: | :----------------------------------------------------------: |
| BingoCustomExpansions-1.0.0-SNAPSHOT.jar | Custom 系列拓展 | 575fbcd732cf385c4e4e1bec4882a64110b452f376f81a3b5df2cd066f6299ab |
任务类型
原版
|任务类型|类型说明|条件参数|
|:---😐:----|:----|
|break|当玩家破坏方块|方块材质名|
|place|当玩家放置方块|方块材质名|
|level|当玩家达到某个等级|指定等级数(例:100)|
|level_up|当玩家提升等级|无|
|kill_entity|当玩家击杀生物|生物名称(当生物没有展示名时则传入生物类型)|
|craft_item|当玩家合成物品|物品名(当物品没有自定义名称时则传入材质名)|
|shear_entity|当玩家使用剪刀修剪实体|生物名称(当生物没有展示名时则传入生物类型)|
|shear_leaves|当玩家修剪树叶|树叶类型|
|item_consume|当玩家消耗物品时|物品类型(例:食物、药水、牛奶等)|
|enchant|当玩家附魔时|无|
|caught_fish|当玩家钓到鱼时|生物名称(当生物没有展示名时则传入生物类型)|
|caught_entity|当玩家钓到实体时|生物名称(当生物没有展示名时则传入生物类型)|
PixelmonReforged
|任务类型|类型说明|条件参数|
|:---😐:----|:----|
|beat_wild_pixelmon|击败野外宝可梦|精灵名(例如:Pikachu)|
|beat_raid_governor|击败巢穴宝可梦|精灵名(例如:Pikachu)|
|capture_pixelmon|捕捉宝可梦|精灵名(例如:Pikachu)|
|capture_raid_pixelmon|捕捉巢穴精灵|精灵名(例如:Pikachu)|
|beat_trainer|击败野外训练师|训练师名称|
|fishing_catch|钓鱼|钓到的实体名|
|pick_apricorn|采摘球果|果球类型|
|pixelmon_level_up|精灵等级提升|精灵名(例如:Pikachu)|
|trade_pokemon|交换宝可梦|精灵名(例如:Pikachu)|
|set_nick_name|设置宝可梦昵称|精灵名(例如:Pikachu)|
|evs_gained|宝可梦 EVs 提升|精灵名(例如:Pikachu)|
|experience_gain|宝可梦获得经验|精灵名(例如:Pikachu)|
|poke_post_evolve|进化后事件|精灵名(例如:Pikachu)|
|shopkeeper_purchase|宝可梦商人购买|无|
|shopkeeper_sell|宝可梦商人出售|无|
|activate_shrine|激活祭坛|祭坛类型名|
|quest_complete|完成宝可梦任务|任务全限定名|
CustomCrops
|任务类型|类型说明|条件参数|
|:---😐:----|:----|
|custom_crops_plant|玩家种植农作物|农作物编号|
|custom_crops_break|玩家采摘农作物|农作物编号|
CustomFishing
|任务类型|类型说明|条件参数|
|:---😐:----|:----|
|custom_fishing_success|玩家钓得战利品|战利品编号|
文件结构
说明
插件运行后会生成一份 默认配置
,下面为配置文件的结构以及作用。
|文件名|文件说明|
|:---😐:----|
|config.yml|插件存储类型与杂项设定(如:进度条
等)|
|node.yml|设定奖励节点领取权限(未来将会支持 PlaceholderAPI
做为条件)|
<br>
|目录名|目录说明|
|:---😐:----|
|groups|任务分组,支持设定条件解锁,条件达成后会自动对玩家解锁对应任务|
|quests|用于存放单个任务配置的地方,文件名没有约束,但推荐和任务分组一致|
|view|可视化界面,配置玩家打开面板后能看到什么信息(如: 任务详情、任务组切换等)|
|jobs|事务管理,用于重置任务,支持 cron 表达式|
quests 目录文件
quests
目录内所有文件都会读取并将配置转换为对应的任务详情,文件名字没有约束,但请注意:多个文件之间的 键
不能重复。
在 默认配置
生成之后,目录内会有 default.yml
与 rare.yml
,这里指的是 quests
目录内,下面以 default.yml
为例。
example1:
name: "挖十个石头"
type: "break"
condition: "STONE"
amount: 10
commands:
default: [ "say %player_name% hahahaha." ]
vip: [ "say %player_name% hahahaha VIP." ]
example2:
name: "挖十个泥土"
type: "break"
condition: "DIRT"
amount: 10
commands:
default: [ "say %player_name% hahahaha." ]
vip: [ "say %player_name% hahahaha VIP." ]
example3:
name: "挖十个沙子"
type: "break"
condition: "SAND"
amount: 10
commands:
default: [ "say %player_name% hahahaha." ]
vip: [ "say %player_name% hahahaha VIP." ]
在 default.yml
中,有 3 个默认任务,他们的任务键分别是 example1
,example2
,example3
,而他们的任务设定如下
name
:任务名称
type
:任务类型, 如: break, place, level, level_up 等,具体请看 任务类型
condition
:任务条件, 如: type
为 break(破坏方块)时, condition
可写方块名
amount
:任务要求数量
commands
:玩家完成任务后执行的命令, 这里的 default
与 vip
内对应节点,支持 PlaceholderAPI
node.yml 文件
node.yml
文件可理解为领取奖励的权限与条件判定,服主可用于扩展奖励(如:VIP 奖励等),只需在任务设定 comamnds
写上对应节点即可。
而节点的条件与权限判断取决于节点的参数设定,如下方: default
设定为 { }
,则代表不设置条件(无条件),而 vip
含有 permission
则代表需要有对应权限。
下方默认配置的 node.yml
样例, 结合上方 example1
任务的解释为:
当玩家完成 挖十个石头
任务时,会给予玩家 commands.default
奖励并判断是否有 bingo.node.vip
权限, 如果有则给予 commands.vip
奖励。
这里的 commands
指的是上方任务设定的 example1.commands.default
与 example1.commands.vip
奖励。
default: { }
vip:
permission: "bingo.node.vip"
groups 目录文件
groups.yml
内每一个文件代表一个 任务组
,当玩家符合任务组解锁条件时,会对玩家解锁对应的 任务
文件内设定对应为
name
:任务组名称
condition
:任务组解锁条件,支持 PlaceholderAPI
unlock
:条件满足后解锁的任务
下方为默认配置文件 default.yml
与 rare.yml
default.yml
default.yml
文件的意思为不判定玩家的 condition
即 无条件
解锁的任务(example1
,example2
,example3
)
name: "&7Common"
condition: [ ]
unlock:
- "example1"
- "example2"
- "example3"
rare.yml
rare.yml
文件的意思判定玩家对应的 condition
是否满足,如这里的 %bingo_group_progress_default% >= 100
如果 PlaceholderAPI
变量 %bingo_group_progress_default%
返回的值大于等于 100
则解锁的任务(example4
,example5
,example6
)
name: "&aRare"
condition:
- "%bingo_group_progress_default% >= 100"
unlock:
- "example4"
- "example5"
- "example6"
view 目录文件
view
目录内每一个文件代表一个可视化界面,即玩家可以打开 Gui 界面,全页面物品描述均支持 PlaceholderAPI
,具体设定如下。
title
:界面标题
size
:界面大小
require-quests
:要求任务(玩家已经解锁了这里设定的任务才能打开这个界面)
quest-item
:任务展示物品设定
state-item
:任务状态物品设定(当玩家完成指定的任务时会展现出不同的状态: 已领取、待领取、未完成),注意:三种状态的设定顺序必须以默认顺序为准
items
:杂项物品设定(一般用于装饰)
如果你会 YAML
语法(这是绝大部分 Bukkit 插件配置通用的语法格式),可以直接查看默认生成的 view/default.yml
,view/rare.yml
如果你还未完全掌握 YAML
语法,请看下方单独新建的一个示例文件。
title: "&8Common"
size: 27
# 当 ViewType 为 random 时, 才需要配置此参数, 并且 quest-item 配置失效, 改由 random-item 设定
viewType: default
# 每次查看都会计算条件, 语法与 group 条件语法一致
always-condition: [ ]
require-quests: &requreQuests [ "example1", "example2", "example3" ]
# 对 require-quests 数量匹配, 如果为 -1 则需要玩家有 requre-quests 全部任务才允许打开面板
# 这个参数一般用于配合 jobs 中类型为 random 的设定配合使用
require-count: -1
# repeat-quest-item 和 repeat-state-item 并非插件配置, 而是 YAML 语法, 只是方便利用重复的设定
repeat-quest-item: &questItem
amount: 1
data: 0
# customModel: 0
# nbt: "{}"
name: "&f%questName%"
lore:
- ""
- "%appendLore%"
- " &f当前进度 %progress% &f(%pct%%) "
- ""
repeat-state-item: &stateItem
commands:
- "say hahahahaha."
state:
- type: GREEN_STAINED_GLASS_PANE
amount: 1
data: 13
name: "&a已领取"
lore: [ ]
- type: YELLOW_STAINED_GLASS_PANE
amount: 1
data: 4
name: "&e待领取"
lore: [ ]
- type: RED_STAINED_GLASS_PANE
amount: 1
data: 14
name: "&c未完成"
lore: [ ]
#random-item:
# # 显示的槽位
# slots: [ 13,14,15 ]
# item:
# type: STONE
# <<: *questItem
quest-item:
- type: STONE
<<: *questItem
slot: 13
quest: "example1"
- type: DIRT
<<: *questItem
slot: 14
quest: "example2"
- type: SAND
<<: *questItem
slot: 15
quest: "example3"
state-item:
- slot: 12
quests: *requreQuests
claimKey: "default-1"
<<: *stateItem
- slot: 16
quests: *requreQuests
claimKey: "default-1"
<<: *stateItem
items:
- type: BLACK_STAINED_GLASS_PANE
amount: 1
data: 15
name: "&f"
lore: [ ]
slot: 0-9,17-26
- type: IRON_INGOT
amount: 1
data: 0
name: "&c▶ &aCommon"
lore:
- ""
- "&e点击查看"
slot: 10
view: "default"
- type: GOLD_INGOT
amount: 1
data: 0
name: "&7Rare"
lore:
- ""
- "&e点击查看"
slot: 11
view: "rare"
其实 quest-item
,state-item
与 items
的设定没有太大区别,只有个别参数有差异,通用参数
如下,具体差异参数看下方小段,请配合配置文件一起参考。
type
: 物品材质名,如: STONE,PAPER,DIAMOND 等
amount
:物品数量
data
:1.13 以下(不包含 1.13)版本可使用
customData
:1.13 及以上版本可使用
name
:物品展示名
lore
:物品描述
slot
:显示槽位
节点 quest-item 额外参数
quest
:用于指向某个任务,用于解析:任务进度、任务名等
节点 state-item 额外参数
如果想实现玩家完成 不同行不同列不同对角线
的任务后可领取额外奖励,就需要使用此设定。
quests
:用于指向某些任务(单个或多个),当这些任务处于不同进度情况时,state-item
会显示出不同的物品,具体显示取决于你配置。
commands
:当玩家完成当前 state-item
的 quests
设定全部任务时,可领取此奖励(后台执行命令)。
claimKey
: 用于做为奖励领取标识,如果你想多个地方显示同一个 state-item
,请确保他们的 claimKey
一致且与其他 state-item
不重复。
state-item
:当多个任务处于不同状态时,显示的物品设定,如下方显示
state:
- type: GREEN_STAINED_GLASS_PANE
amount: 1
data: 13
name: "&a已领取"
lore: [ ]
- type: YELLOW_STAINED_GLASS_PANE
amount: 1
data: 4
name: "&e待领取"
lore: [ ]
- type: RED_STAINED_GLASS_PANE
amount: 1
data: 14
name: "&c未完成"
lore: [ ]
节点 items 额外参数
view
:用于跳转其他可视化面板,如 默认配置
从default.yml
跳到 rare.yml
,则需要在 default.yml
的 items
增加物品并设置 view: rare
即可。
jobs 目录
jobs 目录内每一个文件代表一个计划任务(task),当 cron
表达式成立时会根据配置重置指定任务。
可以实现包括但不限于:每日、每周、每月、每年、指定日期等任务类型。
默认配置
# cron 表达式(如果不会可以百度搜:cron 表达式在线生成)
expression: "0 0 0 1 * ? *"
#quests: "example1,example2,example3",要重置的任务列表,多个按:任务编号,任务编号,任务编号.. 这样子写
quests: ""
#segmentRewards: "default-1" # 对应 view 文件内 state-item 的 claimKey
segmentRewards: ""
# 当前只有 NORMAL, RANDOM
type: NORMAL
#random: 1 # 随机任务数, 当 type 为 RANDOM 时, 此处生效.
常见问题
1. 为什么后台一直输出表达式解析失败?
输出日志例子
Cannot invoke 'ScriptUtil.detectionCondition', beacuse 'ScriptUtil.scriptEngine' is null
如果出现这个日志,请将 config.yml
内配置项 script-engine
的值修改为 nashorn