• 因近日遭受攻击,百科现已限制新用户的编辑权限,一段时间后成为自动确认用户方可编辑。

Difference between revisions of "GuillaumeVDN的插件文档/QuestCreator/详细特性"

From Minecraft插件百科
Jump to: navigation, search
(任务池)
m (SERVER_PLAYER_EFFECTS_REMOVE|移除效果)
 
(29 intermediate revisions by the same user not shown)
Line 429: Line 429:
  
 
<source lang="yaml">object:
 
<source lang="yaml">object:
 
 
   # …… 执行的目标(见“任务目标”)
 
   # …… 执行的目标(见“任务目标”)
 
 
  
 
min_streak: 1  # 执行目标所需最低连续完成数
 
min_streak: 1  # 执行目标所需最低连续完成数
 
 
max_streak: 5  # 最高连续完成数:如果连续完成数大于该值则不会执行目标</source>
 
max_streak: 5  # 最高连续完成数:如果连续完成数大于该值则不会执行目标</source>
  
 
= 任务组 =
 
= 任务组 =
  
You create group of quests to apply some properties. They’re located under <source lang="yaml">/quest_groups/</source>.
+
你可以创建使用一些属性的任务组。任务组位于<code>/quest_groups/</code>
  
 
== 分组设置 ==
 
== 分组设置 ==
  
<source lang="yaml">models: [quest_1,quest_2]  # a list of quests for this group
+
<source lang="yaml">models: [quest_1,quest_2]  # 组内的任务
 
 
 
 
 
 
max_concurrent: 1  # the maximum amount of active concurrent quests from this group
 
  
 +
max_concurrent: 1  # 可同时进行组内的任务数
  
 +
execution_order: true  # 需要玩家按顺序完成任务</source>
  
execution_order: true  # to require the player to complete the quests in order</source>
 
 
= Goto|前往类型 =
 
= Goto|前往类型 =
  
 
普通:
 
普通:
  
* <source lang="yaml">OBJECT &lt;object from the same branch&gt;</source> : set the current branch object (it can be the same object to loop it)
+
* <code>OBJECT &lt;同一分支的目标&gt;</code>:设置当前分支的目标(可以是同一目标)
* <source lang="yaml">BRANCH &lt;branch id&gt;</source> : stops the current branch and starts another one
+
* <code>BRANCH &lt;分支id&gt;</code>:停止当前分支并开始其它分支
  
 
任务结束:
 
任务结束:
  
* <source lang="yaml">QUEST_SUCCESS</source> : stops the quest as successfully completed
+
* <code>QUEST_SUCCESS</code>:停止任务并标记为成功完成
* <source lang="yaml">QUEST_SUCCESS_THEN_START</source> : stops the quest as successfully completed, then start another quest
+
* <code>QUEST_SUCCESS_THEN_START</code>:停止任务并标记为成功完成,然后开始其它任务
* <source lang="yaml">QUEST_SUCCESS_THEN_START_BYPASS</source> : stops the quest as successfully completed, then start another quest (bypassing start restrictions)
+
* <code>QUEST_SUCCESS_THEN_START_BYPASS</code>:停止任务并标记为成功完成,然后开始其它任务(忽略任务开始条件限制)
* <source lang="yaml">QUEST_FAIL</source> : stops the quest as failed
+
* <code>QUEST_FAIL</code>:停止任务并标记为任务失败
* <source lang="yaml">QUEST_FAIL_THEN_START</source> : stops the quest as failed, then start another quest
+
* <code>QUEST_FAIL_THEN_START</code>:停止任务并标记为任务失败,然后开始其它任务
* <source lang="yaml">QUEST_FAIL_THEN_START_BYPASS</source> : stops the quest as failed, then start another quest (bypassing start restrictions)
+
* <code>QUEST_FAIL_THEN_START_BYPASS</code>:停止任务并标记为任务失败,然后开始其它任务(忽略任务开始条件限制)
* <source lang="yaml">QUEST_CANCEL</source> : cancel the quest
+
* <code>QUEST_CANCEL</code>:取消任务
* <source lang="yaml">QUEST_CANCEL_THEN_START</source> : cancel the quest, then start another quest
+
* <code>QUEST_CANCEL_THEN_START</code>:取消任务,然后开始其它任务
* <source lang="yaml">QUEST_CANCEL_THEN_START_BYPASS</source> : cancel the quest, then start another quest (bypassing start restrictions)
+
* <code>QUEST_CANCEL_THEN_START_BYPASS</code>:取消任务,然后开始其它任务(忽略任务开始条件限制)
* <source lang="yaml">QUEST_COOP_LEAVE</source> : leave the quest, if the player is a coop player and allowed to leave it (this will be useful in individual branches)
+
* <code>QUEST_COOP_LEAVE</code>:离开任务。如果玩家在多人任务则可以离开任务(在独立分支里很有用)
* <source lang="yaml">QUEST_COOP_LEAVE_OR_STOP</source> : leave the quest, if the player is a coop player and allowed to leave it, or cancel it, if the player is the quest leader
+
* <code>QUEST_COOP_LEAVE_OR_STOP</code>:离开任务。如果玩家在多人任务内则可以离开或取消任务
  
 
= 任务身份 =
 
= 任务身份 =
  
Some objects and settings allow you to apply them only to some actors of the quest. An actor is a player inside a quest.
+
你可以仅对部分任务身份的玩家应用一些目标和设置。
  
For player-driven objects, this setting will restrict who can progress the object. For server-driven objects, it’ll restrict to who the effects of the object will be applied.
+
对于玩家驱动型目标,该设置会限制哪些玩家可以执行这类目标。对于服务器驱动型目标,该设置会限制应用的目标会给予谁效果。
  
Actor types :
+
身份类型:
  
* <source lang="yaml">NONE|无</source> : no restriction, all players in the quest
+
* <code lang="yaml">NONE|无</code>:无身份限制
* <source lang="yaml">ROLE LEADER|队长</source> : only the quest leader
+
* <code lang="yaml">ROLE LEADER|队长</code>:仅限任务队长
* <source lang="yaml">ROLE COOP</source> : only the coop players (so every player except the leader)
+
* <code lang="yaml">ROLE COOP</code>:仅限组队玩家(除了队长之外的玩家)
* <source lang="yaml">RANDOM</source> : select a random player in the quest
+
* <code lang="yaml">RANDOM</code>:随机选取一名任务中的幸运玩家
* <source lang="yaml">JOIN_ORDER &lt;list of numbers, separated by a space&gt;</source> : only the players at the specific join order ; order start at 0 and the first in the join order list is always the leader
+
* <code lang="yaml">JOIN_ORDER &lt;数字列表,用空格分隔&gt;</code>:仅限特定加入顺序的玩家:从0开始排序或第一个加入任务的玩家总是会成为队长
  
Example for the join order one : <source lang="yaml">JOIN_ORDER 1 2</source> will be players who joined at order 1 and 2. <source lang="yaml">JOIN_ORDER 2</source> would be only the second player.
+
示例:<code lang="yaml">JOIN_ORDER 1 2</code>会是第一和第二个加入任务的玩家。
 +
<code lang="yaml">JOIN_ORDER 2</code>会是第二个加入任务的玩家。
  
= 记录点 =
+
= 检查点 =
  
Each quest can have at most one active checkpoint. When an object with a defined checkpoint starts, it overwrites the current checkpoint, says what information must be saved and when the checkpoint should be restored.
+
每个任务最多可以有一个活跃的检查点。当一个定义了检查点的目标开始时,它会覆盖当前的检查点。
  
 
<source lang="yaml">checkpoint:
 
<source lang="yaml">checkpoint:
  
   # Things to save
+
   # 检查点保存的东西
   save_location: true  # to save the location of all players
+
   save_location: true  # 保存全部玩家的位置
   save_specific_location: world,x,y,z  # to save a specific location instead of the players' location
+
   save_specific_location: world,x,y,z  # 保存特定位置而非玩家位置
   save_branches: true  # to save the current states of all branches
+
   save_branches: true  # 保存全部分支的当前状态
   save_individual_branches: true  # to save the current states of all individual branches
+
   save_individual_branches: true  # 保存全部独立分支的当前状态
   save_model_variables: true  # to save the current model variables
+
   save_model_variables: true  # 保存当前模型的变量
   save_user_variables: []  # a list of user variables to save
+
   save_user_variables: []  # 保存的用户变量
  
   # When to restore them
+
   # 何时回到检查点
   restore_on_respawn: RESTORE_TYPE  # when the player respawns
+
   restore_on_respawn: RESTORE_TYPE  # 当玩家重生时
   restore_on_connect: RESTORE_TYPE  # when the player reconnects
+
   restore_on_connect: RESTORE_TYPE  # 当玩家重连时
   restore_on_resume: RESTORE_TYPE  # when the quest resumes
+
   restore_on_resume: RESTORE_TYPE  # 当任务暂停时
 
   restore_conditons:
 
   restore_conditons:
     # ... some extra conditions that will lead to checkpoint restore if respected (see "conditions")
+
     # …… 会导致回到检查点的一些额外条件(见“条件”)
 
   individual_restore_conditons:
 
   individual_restore_conditons:
     # ... some extra conditions that will lead to individual checkpoint restore if respected (see "conditions")</source>
+
     # …… 会导致回到独立检查点的一些额外条件(见“条件”)</source>
RESTORE_TYPE can be either <source lang="yaml">GLOBAL</source>, <source lang="yaml">INDIVIDUAL</source> or <source lang="yaml">NONE</source>. Global will restore the checkpoint of the whole quest, and individual will restore only the particular player’s location and individual branches. If the checkpoint is restored individually for GuillaumeVDN, coop player Notch will not get his location or individual branches restored.
+
RESTORE_TYPE可以是<code lang="yaml">GLOBAL|全局</code><code lang="yaml">INDIVIDUAL|个人</code><code lang="yaml">NONE|无</code>。 Global会回到整个任务的检查点,INDIVIDUAL会让特定玩家回到特定位置和独立分支。如果玩家GuillaumeVDN单独回到了检查点,组队的玩家Notch不会回到检查点位置或独立分支。
  
 
= 任务点数 =
 
= 任务点数 =
 +
任务点数分成了不同类别,所以你可以有多个不同的点数排行榜。你必须在<code>/points_categories.yml</code>内注册类别。
  
Quest points are separated in different categories, so you can have different points leaderboards. You have to register those categories in <source lang="yaml">/points_categories.yml</source>.
+
你可以使用SERVER_LOGIC_POINTS或LOGIC_QUEST_POINTS来修改任务点数。
  
You can modify those points using the [http://www.guillaumevdn.com/plugins/doc/#/questcreator/detailed/quest_objects_types_server?id=type-server_logic_points SERVER''LOGIC''POINTS] object and use them as a requirement using the [http://www.guillaumevdn.com/plugins/doc/#/questcreator/detailed/conditions?id=type-logic_quest_points LOGIC''QUEST''POINTS] condition.
+
输入<code lang="yaml">/qc points</code>指令可以查看并修改任务点数。任务点数可以显示在GUI内,排名GUI会显示玩家的任务点数。
 
 
They can be seen and manipulated using the <source lang="yaml">/qc points</source> command. You can display them in GUIs and open ranking GUIs that will display the player’s points.
 
  
 
=任务目标=
 
=任务目标=
 
==设置==
 
==设置==
===显示设置===
+
=== 显示设置 ===
===预目标设置===
+
<source lang="yaml">name_long: >  # 描述目标的长名称;主要用于GUI描述
===激活设置===
+
  &a在重生点附近挖掘100块圆石
===目标结束设置===
+
name_short: >  # 描述目标的短名称;用在actionbar/计分板/……内
===位置设置===
+
  &a在重生点附近挖掘圆石
===所需物品设置===
+
===进度条件设置===
+
objective_detail: >  # 该目标的{objective}占位符的自定义值
===事件驱动目标设置===
+
  &7主要目标&b{objective_progression:a}&7/&b{objective_goal:a} &7| 次要目标:&b{objective_progression:b}&7/&b{objective_goal:b}
===计时驱动目标设置===
+
 +
objective_detail_verbose: >  # 显示目标进度的自定义值;用在GUI和计分板内
 +
  &7主要目标:&b{objective_progression:a}&7/&b{objective_goal:a}
 +
  &7次要目标:&b{objective_progression:b}&7/&b{objective_goal:b}
 +
 +
start_notify:
 +
  # …… 开始目标时发送的提醒(见“通用配置/提醒”)
 +
 +
complete_notify:
 +
  # …… 完成目标时发送的提醒(见“通用配置/提醒”)
 +
complete_notify_particle_script: script_id  # 完成目标时在该目标位置执行的脚本(见“通用配置/粒子脚本”)
 +
 +
progress_notify:
 +
  # …… 目标去的进展时发送的提醒(见“通用配置/提醒”)
 +
  # 请注意,如果你在config.yml内开启了循环,这里的actionbar/bossbar/标题不会一直循环下去
 +
  # 可在config.yml内修改重复延迟
 +
 +
update_notify:
 +
  # …… 当玩家在一段时间内未取得任何进展时发送提醒(见“通用配置/提醒”)
 +
update_notify_particle_script: script_id  # 在发送更新提醒时同时执行的粒子脚本(见“通用配置/粒子脚本”)
 +
update_notify_delay: 30 MINUTE  # 发送更新提醒的延迟</source>
 +
 
 +
=== 开始目标设置 ===
 +
<source lang="yaml">start_delay: 3 SECOND  # 开始目标延迟
 +
 +
time_limit:
 +
  duration: 15 MINUTE  # 完成目标限时
 +
  reminder:
 +
    # …… 每隔一段时间提醒玩家任务剩余时间(见“通用配置/提醒”)
 +
    # - 显示剩余时间的占位符:{time}
 +
  fail_goto: QUEST_FAIL  # 时间结束时使用的goto
 +
 +
execution_chance: 75.0  # 执行该目标的百分比几率
 +
execution_chance_fail_goto: OBJECT ACTUALLY_LETS_DO_THAT_INSTEAD  # 执行失败时使用的goto
 +
 +
checkpoint:
 +
  # …… 检查点设置(见上面的“检查点”)</source>
 +
 
 +
=== 激活设置 ===
 +
<source lang="yaml">hide_chat: true  # 该目标活跃时隐藏聊天框
 +
 +
hide_players: true  # 该目标活跃时隐藏其它玩家(其它玩家也看不到任务中的玩家)
 +
 +
no_match_fail_goto: QUEST_FAIL  # 玩家错误地执行特定操作时使用的goto(比如玩家破坏了错误的方块)
 +
 +
progress_chance: 75.0  # 目标取得进展的百分比几率
 +
progress_chance_fail_goto: OBJECT UNLUCKY  # 取得进展失败时使用的goto
 +
 +
progress_actor_restriction:
 +
    # …… 仅允许特定身份的玩家能够取得进展(见上面的“任务身份”)</source>
 +
 
 +
=== 结束目标设置 ===
 +
<source lang="yaml">goto: OBJECT NEXT  # 完成该目标时使用的goto
 +
 +
goto_start_branches: []  # 完成该目标时使用开始的分支
 +
 +
goto_stop_branches: []  # 完成该目标时停止的分支
 +
 +
goto_start_individual_branches: []  # 完成目标时开始的独立分支
 +
                                    # 只对PLAYER|玩家目标有效
 +
                                    # 比如,最后一名完成“破坏方块”目标的玩家会开始独立分支
 +
                                    # 这堆简单目标或触发器目标很有用;只有一个触发器目标循环的分支可让多人任务中的每个玩家开始独立分支
 +
 +
complete_journal_entry:  # 目标完成时添加的日志条目
 +
                          # 任务条目会在给予玩家任务日志或玩家打开时更新
 +
  entry_title: >
 +
    &a条目标题
 +
  entry_detail: >
 +
    &7你见到了提米,他请求你带点东西给他。
 +
    &7你把东西带给了他。
 +
    &7作为回报,他给了你一份精美的礼物。
 +
  end_types: [SUCCESS]  # 只对一些任务结束类型添加条目;值:SUCCESS|成功FAIL|失败、CANCEL|取消、COOP_LEAVE|离开多人任务</source>
 +
 
 +
=== 位置设置 ===
 +
你可以配置每个目标的位置,只有极少部分目标没有位置设置。
 +
 
 +
对于玩家驱动型目标,该设置代表玩家必须在特定位置执行操作(比如玩家该破坏哪里的方块,杀死哪里的怪物等)。
 +
 
 +
对于服务器驱动型目标,该设置代表执行操作的位置(比如在哪里生成实体,在哪里显示粒子效果等)。
 +
<source lang="yaml">position:
 +
  # …… 位置设置(见“通用配置/位置”)</source>
 +
 
 +
=== 所需物品设置 ===
 +
你可以为每个目标配置一个“所需物品”设置。
 +
<source lang="yaml">items_needed:
 +
  # …… 见“通用配置/所需物品”</source>
 +
少部分目标没有该设置,主要是PLAYER_ITEMS_<…>。这类目标已经有其它物品设置了,再加个所需物品设置会造成混淆。
 +
 
 +
=== 进度条件设置 ===
 +
你可以配置额外的进度条件。玩家必须匹配条件才能让目标取得进展。
 +
<source lang="yaml">progress_conditions:
 +
  # …… 见“条件”
 +
 +
progress_conditions_fail_goto: QUEST_FAIL  # 不匹配进度条件时使用的goto</source>
 +
 
 +
=== 事件驱动型目标设置 ===
 +
对于事件驱动型目标,你也可以配置“位置停留”设置。该设置要求玩家待在特定位置做点事。
 +
<source lang="yaml">position_stay:
 +
  warning_delay: 15 SECOND  # 玩家必须回到该位置的时间
 +
  warning_notify:  # 玩家不在位置内时每隔一段时间发送的提醒
 +
    message: >
 +
      &c警告!你必须在{time}内回到该位置,否则任务失败!
 +
  fail_goto: QUEST_FAIL  # 玩家未在规定时间内回到指定位置时使用的goto</source>
 +
这些配置可以在一些情况下取消事件:
 +
<source lang="yaml">no_match_cancel_event: true  # 在玩家操作正确,但设置出错时取消事件(比如需要破坏特定类型的方块,而玩家破坏了错误类型的玩家)
 +
progress_cancel_event: true  # 目标取得近战时取消事件
 +
progress_chance_fail_cancel_event: true  # 目标取得进展失败时取消事件
 +
progress_conditions_fail_cancel_event: true  # 目标条件失败时取消事件</source>
 +
 
 +
=== 定时驱动型目标设置 ===
 +
由于定时驱动型目标的检测频率非常高,所以有一个设置可以避免过于频繁地重复检测匹配(目标/位置/所需物品/进度条件)。它默认设置为50刻。如果定时目标的某个元素不匹配,那么在尝试再次检测之前,插件会等待该份时间量。
 +
<source lang="yaml">wait_after_match_fail: 50 TICKS  # 默认等待时间</source>
 +
 
 
==特殊类型==
 
==特殊类型==
===NONE|无===
+
=== NONE|无 ===
===GROUP|分组===
+
该目标类型没有设置,它会在被任何定时器调用时即时进行。
===RANDOM|随机前往===
+
 
===CONDITIONS_SWITCH|条件切换===
+
你可以用来配置通用配置。比如你可以设置进度条件、位置设置或“所需物品”设置,来让玩家满足特定条件才能取得任务进展。
===LOGIC_SWITCH|逻辑切换===
+
<source lang="yaml">type: NONE</source>
===DIVERGE_CHAT|聊天分支===
+
 
===DIVERGE_GUI|GUI分支===
+
=== GROUP|分组 ===
===DIVERGE_OBJECTS|目标分支===
+
通过分组你可以把同一分支的不同目标混合使用。玩家必须按顺序完成它们才能继续任务。
==PLAYER玩家类型==  
+
<source lang="yaml">MY_BRANCH:
===方块===
+
  objects:
===实体===
+
    MY_GROUP:
===物品===
+
      type: GROUP
===移动===
+
      objects: [A,B]  # 组内的目标
===物理===
+
      ordered_objects: true  # 玩家必须按顺序完成目标
===其它===
+
      required_objects: 2  # 所需完成目标数
==SERVER服务器类型==
+
    A:
===SERVER_ACTIONS|服务器操作===
+
      # 其它目标
===实体===
+
    B:
===物品===
+
      # 其它目标</source>
===物理===
+
 
===逻辑===
+
=== RANDOM|随机 ===
===其它===
+
用于应用随机goto。
 +
<source lang="yaml">type: RANDOM
 +
gotos: |  # 应用的goto列表
 +
  OBJECT A
 +
  OBJECT B
 +
  BRANCH MY_BRANCH
 +
  QUEST_FAIL
 +
avoid_repeat_end_types: []  # 检测重复的结束类型列表
 +
                            # 如果该列表不为空,则插件会检测玩家的任务历史
 +
                            # 并避免重复使用相同的goto
 +
                            # 如果没有更多抉择项,则会使用普通目标goto</source>
 +
 
 +
=== CONDITIONS_SWITCH|条件切换 ===
 +
根据条件使用不同的goto。
 +
<source lang="yaml">type: CONDITIONS_SWITCH
 +
cases:
 +
  a:
 +
    # 示例配置(见下方)
 +
  b:
 +
    # 示例配置(见下方)</source>
 +
示例配置:
 +
<source lang="yaml">conditions:
 +
  # …… 匹配的条件(见“条件”)
 +
goto: QUEST_SUCCESS  # 选择该案例时使用的goto</source>
 +
 
 +
=== LOGIC_SWITCH|逻辑切换 ===
 +
根据逻辑字符串应用不同的goto。
 +
<source lang="yaml">type: LOGIC_SWITCH
 +
cases:
 +
  a:
 +
    # 示例配置(见下方)
 +
  b:
 +
    # 示例配置(见下方)</source>
 +
示例配置:
 +
<source lang="yaml">logic: {variable:test} >= 10  # …… 选取该案例时需匹配的逻辑字符串(见“通用逻辑”)
 +
goto: QUEST_SUCCESS  # 选择该案例时使用的goto</source>
 +
 
 +
=== DIVERGE_CHAT|聊天分支 ===
 +
允许玩家在聊天框内点击文本来选择分支。
 +
<source lang="yaml">type: DIVERGE_CHAT
 +
choices:
 +
  a:
 +
    # 抉择配置(见下方)
 +
  b:
 +
    # 抉择配置(见下方)
 +
repeat_delay: 1 MINUTE  # 如果玩家未作出抉择则在这段时间后重新发送抉择选项</source>
 +
抉择配置:
 +
<source lang="yaml">text: >  # 选择该抉择时发送的文本
 +
  &a点击选择
 +
redo_text: >  # 确认文本
 +
  &a点击选择(确认)
 +
unavailable_text: >  # 玩家无法选择该选项时发送的文本(可选)
 +
  &7抱歉,你无法选择该选项
 +
max_completions: 1  # 玩家可选择的最大次数
 +
conditions:
 +
  # …… 选择该选项所需的条件
 +
goto: OBJECT CHOICE_1  # 选择该抉择选项时使用的goto</source>
 +
 
 +
=== DIVERGE_GUI|GUI分支 ===
 +
允许玩家在GUI中点击不同选项来选择分支。
 +
<source lang="yaml">type: DIVERGE_GUI
 +
choices:
 +
  a:
 +
    # 抉择配置(见下方)
 +
  b:
 +
    # 抉择配置(见下方)
 +
reopen_delay: 5 SECOND  # 如果玩家未作出抉择并关闭了GUI则在这段时间后重新打开GUI</source>
 +
抉择配置:
 +
<source lang="yaml">slot: 10  # 选项在GUI中的栏位
 +
item:
 +
  # …… 物品图标(见“通用配置/物品”)
 +
redo_item:
 +
  # …… 玩家点击一次该物品后显示的图标
 +
unavailable_text:
 +
  # …… 玩家无法选择该选项时显示的图标
 +
 +
max_completions: 1  # 玩家可选择的最大次数
 +
conditions:
 +
  # …… 选择该选项所需的条件
 +
goto: OBJECT CHOICE_1  # 选择该抉择选项时使用的goto</source>
 +
 
 +
=== DIVERGE_OBJECTS|目标分支 ===
 +
允许玩家通过完成目标来选择不同的分支。
 +
<source lang="yaml">type: DIVERGE_OBJECTS
 +
choices:
 +
  a:
 +
    # 抉择配置(见下方)
 +
  b:
 +
    # 抉择配置(见下方)</source>
 +
抉择配置:
 +
<source lang="yaml">object: CHOICE_OBJECT_1  # 选择该选项所需完成的目标
 +
conditions:
 +
  # …… 选择该选项所需的条件
 +
goto: OBJECT CHOICE_1  # 选择该抉择选项时使用的goto</source>
 +
==玩家类型==
 +
=== 方块 ===
 +
以<code>PLAYER_BLOCKS</code>开头的目标都有一个可配置方块目标的通用方块设置:
 +
<source lang="yaml">blocks:
 +
  a:
 +
    types: [STONE,COBBLESTONE]  # 允许的方块列表(留空则允许全部)
 +
    states: []  # 所需方块状态列表(留空则无需方块状态)
 +
    goal: 100.0  # 该方块的目标数
 +
  b:
 +
    # …… 其它方块目标</source>
 +
 
 +
==== PLAYER_BLOCK_FARM|耕地 ====
 +
玩家必须用锄头耕地。
 +
<source lang="yaml">type: PLAYER_BLOCK_FARM</source>
 +
 
 +
==== PLAYER_BLOCK_FROST_WALK|冰霜行者 (1.9+) ====
 +
玩家必须用冰霜行者附魔形成冰块。
 +
<source lang="yaml">type: PLAYER_BLOCK_FROST_WALK</source>
 +
 
 +
==== PLAYER_BLOCKS_BREAK|破坏方块 ====
 +
玩家必须破坏方块。
 +
<source lang="yaml">type: PLAYER_BLOCKS_BREAK
 +
allow_player_blocks: false  # 允许破坏玩家放置的方块也可完成目标
 +
allow_player_blocks_error_message: >  # 当玩家尝试破坏玩家放置的方块时发送的消息
 +
  &c破坏玩家放置的方块无法给让你的任务取得进展!</source>
 +
 
 +
==== PLAYER_BLOCKS_IGNITE|点燃方块 ====
 +
玩家必须点燃一些方块。
 +
<source lang="yaml">type: PLAYER_BLOCKS_IGNITE
 +
allow_player_blocks: false  # 允许已被点燃的方块
 +
allow_player_blocks_error_message: >  # 当玩家尝试点燃已点燃的方块时发送的消息
 +
  &c你不能用那些方块来完成任务!</source>
 +
 
 +
==== PLAYER_BLOCKS_INTERACT|交互方块 ====
 +
玩家必须与一些方块交互。
 +
<source lang="yaml">type: PLAYER_BLOCKS_INTERACT
 +
click_type: LEFT_CLICK  # 仅允许特定点击类型;值:LEFT_CLICK|左击、RIGHT_CLICK|右击、PHYSICAL|物理
 +
allow_player_blocks: false  # 允许玩家放置的方块
 +
allow_player_blocks_error_message: >  # 当玩家尝试与玩家放置的方块交互时发送的消息
 +
  &c你不能用那些方块来完成任务!
 +
allow_same_blocks: false  # 允许多次与同种类型的方块交互
 +
allow_same_blocks_error_message: >  # 当玩家尝试用同种方块时发送的消息
 +
  &c你不能用同种方块完成任务!</source>
 +
 
 +
==== PLAYER_BLOCKS_PLACE|放置方块 ====
 +
玩家必须放置方块。
 +
<source lang="yaml">type: PLAYER_BLOCKS_PLACE</source>
 +
 
 +
==== PLAYER_BLOCKS_STRIP|去皮原木 (1.13+) ====
 +
玩家必须给原木去皮
 +
<source lang="yaml">type: PLAYER_BLOCKS_STRIP
 +
allow_player_blocks: false  # 允许玩家放置的方块
 +
allow_player_blocks_error_message: >  # to be sent when the player tries to progress with a player block even though allow_player_blocks is false
 +
  &c你不能用那些方块来完成任务!</source>
 +
 
 +
==== PLAYER_TREE_GROW|植树 ====
 +
玩家必须让树长大。
 +
<source lang="yaml">type: PLAYER_TREE_GROW
 +
tree_type: ACACIA  # 仅允许特定类型的数;值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/TreeType.html</nowiki></source>
 +
 
 +
=== 实体 ===
 +
以<code>PLAYER_ENTITIES</code>开头的目标都有可配置实体目标的通用实体配置和允许刷怪笼实体的配置。
 +
<source lang="yaml">entities:
 +
  a:
 +
    types: [CREEPER]  # 允许的实体类型列表(留空则允许全部);值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html</nowiki>
 +
    names: []  # 允许的自定义名称列表(留空则允许全部)
 +
    colors: []  # 允许的颜色列表(留空则允许全部)
 +
    goal: 100.0  # 实体目标数
 +
  b:
 +
    # …… 其它实体类型
 +
 +
allow_spawner_entities: false  # 允许刷怪笼实体
 +
allow_player_blocks_error_message: >  # 当玩家尝试用刷怪笼实体完成任务时发送的消息
 +
  &c你不能用刷怪笼刷出来的实体完成任务!</source>
 +
 
 +
==== PLAYER_ENTITIES_BREED|饲养 ====
 +
玩家必须饲养一些实体。
 +
<source lang="yaml">type: PLAYER_ENTITIES_BREED</source>
 +
 
 +
==== PLAYER_ENTITIES_INTERACT|交互实体 ====
 +
玩家必须与实体交互。
 +
<source lang="yaml">type: PLAYER_ENTITIES_INTERACT
 +
allow_same_entities: false  # 允许多次与同类型的实体交互
 +
allow_same_entities_error_message: >  # 当玩家尝试多次与同类型实体交互时发送的消息
 +
  &c你不能用同类型的实体来完成任务!</source>
 +
 
 +
==== PLAYER_ENTITIES_CATCH|捕捉实体 ====
 +
玩家必须用钓鱼竿捕捉实体。
 +
<source lang="yaml">type: PLAYER_ENTITIES_CATCH
 +
allow_same_entities: false  # 允许同类型的实体
 +
allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
 +
  &c你不能用同类型的实体来完成任务!</source>
 +
 
 +
==== PLAYER_ENTITIES_DAMAGE|伤害实体 ====
 +
玩家必须对一些实体造成伤害。
 +
<source lang="yaml">type: PLAYER_ENTITIES_DAMAGE
 +
allow_same_entities: false  # 允许同类型的实体
 +
allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
 +
  &c你不能用同类型的实体来完成任务!</source>
 +
 
 +
==== PLAYER_ENTITIES_DISMOUNT|取消骑乘 ====
 +
玩家必须取消骑乘实体。
 +
<source lang="yaml">type: PLAYER_ENTITIES_DISMOUNT
 +
allow_same_entities: false  # 允许同类型的实体
 +
allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
 +
  &c你不能用同类型的实体来完成任务!</source>
 +
 
 +
==== PLAYER_ENTITIES_GET_DAMAGED|让实体受伤 ====
 +
玩家必须让实体受伤。
 +
<source lang="yaml">type: PLAYER_ENTITIES_GET_DAMAGED
 +
allow_same_entities: false  # 允许同类型的实体
 +
allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
 +
  &c你不能用同类型的实体来完成任务!</source>
 +
 
 +
==== PLAYER_ENTITIES_KILL|击杀实体 ====
 +
玩家必须杀死一些实体。
 +
<source lang="yaml">type: PLAYER_ENTITIES_KILL</source>
 +
 
 +
==== PLAYER_ENTITIES_MOUNT|骑乘实体 ====
 +
玩家必须骑乘一些实体。
 +
<source lang="yaml">type: PLAYER_ENTITIES_MOUNT
 +
allow_same_entities: false  # 允许同类型的实体
 +
allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
 +
  &c你不能用同类型的实体来完成任务!</source>
 +
 
 +
==== PLAYER_ENTITIES_SHEAR|剪羊毛 ====
 +
玩家必须给羊剪羊毛。
 +
<source lang="yaml">type: PLAYER_ENTITIES_SHEAR</source>
 +
 
 +
==== PLAYER_ENTITIES_SPAWN|生成实体 ====
 +
玩家必须用刷怪生成实体。
 +
<source lang="yaml">type: PLAYER_ENTITIES_SPAWN</source>
 +
 
 +
==== PLAYER_ENTITIES_TAME|驯服 ====
 +
玩家必须驯服一些生物。
 +
<source lang="yaml">type: PLAYER_ENTITIES_TAME</source>
 +
 
 +
=== 物品 ===
 +
以<code>PLAYER_ITEMS</code>开头的目标都有可配置物品目标的通用物品设置:
 +
<source lang="yaml">items:
 +
  a:
 +
    item:
 +
      # …… 必须匹配的物品(见通用配置/物品)
 +
    check: ExactMatch  # 执行的检测类型(见通用配置/物品匹配)
 +
    goal: 100.0  # 物品目标数
 +
    take: true  # 在完成目标后取走物品
 +
  b:
 +
    # …… 其它物品目标</source>
 +
 
 +
==== PLAYER_ITEMS_BREW|酿造 ====
 +
玩家必须酿造点药水。
 +
<source lang="yaml">type: PLAYER_ITEMS_BREW</source>
 +
 
 +
==== PLAYER_ITEMS_CONSUME|食用 ====
 +
玩家必须食用一些物品
 +
<source lang="yaml">type: PLAYER_ITEMS_CONSUME</source>
 +
 
 +
==== PLAYER_ITEMS_CONTAINER_PUT|放入容器 ====
 +
玩家必须将一些物品放入容器。
 +
<source lang="yaml">type: PLAYER_ITEMS_CONTAINER_PUT
 +
inventory_types: []  # 允许的库存类型(留空则允许全部);值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/inventory/InventoryType.html</nowiki></source>
 +
 
 +
==== PLAYER_ITEMS_CONTAINER_TAKE|取出物品 ====
 +
玩家必须从容器中取出物品。
 +
<source lang="yaml">type: PLAYER_ITEMS_CONTAINER_TAKE
 +
inventory_types: []  # 允许的库存类型(留空则允许全部);值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/inventory/InventoryType.html</nowiki></source>
 +
 
 +
==== PLAYER_ITEMS_CRAFT|合成物品 ====
 +
玩家必须合成物品。
 +
<source lang="yaml">type: PLAYER_ITEMS_CRAFT</source>
 +
 
 +
==== PLAYER_ITEMS_DROP|丢弃物品 ====
 +
玩家必须丢弃物品。
 +
<source lang="yaml">type: PLAYER_ITEMS_DROP</source>
 +
 
 +
==== PLAYER_ITEMS_ENCHANT|附魔物品 ====
 +
玩家必须给物品附魔。
 +
<source lang="yaml">type: PLAYER_ITEMS_ENCHANT</source>
 +
 
 +
==== PLAYER_ITEMS_FISH|钓鱼 ====
 +
玩家必须钓上一些物品。
 +
<source lang="yaml">type: PLAYER_ITEMS_FISH</source>
 +
 
 +
==== PLAYER_ITEMS_INTERACT|物品交互 ====
 +
玩家必须与一些物品交互(手持点击物品)。
 +
<source lang="yaml">type: PLAYER_ITEMS_INTERACT
 +
click_type: RIGHT_CLICK  # 值:RIGHT_CLICK|右击、LEFT_CLICK|左击</source>
 +
 
 +
==== PLAYER_ITEMS_MELT|熔炼 ====
 +
玩家必须熔炼一些物品。
 +
<source lang="yaml">type: PLAYER_ITEMS_MELT</source>
 +
 
 +
==== PLAYER_ITEMS_PICKUP|捡起 ====
 +
玩家必须捡起一些物品。
 +
<source lang="yaml">type: PLAYER_ITEMS_PICKUP</source>
 +
 
 +
==== PLAYER_ITEMS_REPAIR|修复 ====
 +
玩家必须修复一些物品
 +
<source lang="yaml">type: PLAYER_ITEMS_REPAIR</source>
 +
 
 +
==== PLAYER_ITEMS_THROW|投掷 ====
 +
玩家必须投掷一些物品(药水、附魔之瓶等)。
 +
<source lang="yaml">type: PLAYER_ITEMS_THROW</source>
 +
 
 +
==== PLAYER_ITEMS_TRADE|交易 ====
 +
玩家必须与村民交易。
 +
<source lang="yaml">type: PLAYER_ITEMS_TRADE
 +
allow_same_villagers: false  # 允许和同一村民多次交易
 +
allow_same_villagers_error_message: >  # 当玩家尝试多次与同一村民交易时发送的消息
 +
  &c你不能与同一村民多次交易!</source>
 +
 
 +
=== 移动 ===
 +
 
 +
==== PLAYER_ELYTRA_FLY_DISTANCE|鞘翅飞行距离 (1.9+) ====
 +
玩家必须用鞘翅飞行一段距离。
 +
<source lang="yaml">type: PLAYER_ELYTRA_FLY_DISTANCE
 +
goal: 256.0</source>
 +
 
 +
==== PLAYER_ELYTRA_LAND|鞘翅着陆 (1.9+) ====
 +
玩家必须带着鞘翅着陆。
 +
<source lang="yaml">type: PLAYER_ELYTRA_LAND</source>
 +
 
 +
==== PLAYER_FALL_DISTANCE|摔落距离 ====
 +
玩家必须摔落一段高度。
 +
<source lang="yaml">type: PLAYER_FALL_DISTANCE
 +
goal: 256.0</source>
 +
 
 +
==== PLAYER_HORSE_JUMP|骑马跳跃 ====
 +
玩家必须骑马时让马跳跃。
 +
<source lang="yaml">type: PLAYER_HORSE_JUMP
 +
goal: 10</source>
 +
 
 +
==== PLAYER_JUMP|跳跃 ====
 +
玩家必须跳跃。
 +
<source lang="yaml">type: PLAYER_JUMP
 +
goal: 10</source>
 +
 
 +
==== PLAYER_MOVE_BY_FOOT_DISTANCE|徒步移动 ====
 +
玩家必须徒步移动一段距离。
 +
<source lang="yaml">type: PLAYER_MOVE_BY_FOOT_DISTANCE
 +
goal: 256.0</source>
 +
 
 +
==== PLAYER_POSITION|位置 ====
 +
玩家必须到达指定位置。
 +
<source lang="yaml">type: PLAYER_POSITION
 +
display_distance: true  # 显示剩余距离</source>
 +
 
 +
==== PLAYER_SPRINT_DISTANCE|冲刺距离 ====
 +
玩家必须冲刺一段距离。
 +
<source lang="yaml">type: PLAYER_SPRINT_DISTANCE
 +
goal: 256.0</source>
 +
 
 +
==== PLAYER_SWIM_DISTANCE|游泳距离 ====
 +
玩家必须游泳一段距离。
 +
<source lang="yaml">type: PLAYER_SWIM_DISTANCE
 +
goal: 256.0</source>
 +
 
 +
==== PLAYER_VEHICLE_DISTANCE|载具距离 ====
 +
玩家必须乘坐载具移动一段距离。
 +
<source lang="yaml">type: PLAYER_VEHICLE_DISTANCE
 +
vehicle_type: BOAT  仅允许特定类型的载具;值:BOAT|船、MINECART|矿车、HORSE|马、DONKEY|驴、MULE|骡、LLAMA|羊驼、PIG|猪
 +
goal: 256.0</source>
 +
 
 +
==== PLAYER_WALK_DISTANCE|行走距离 ====
 +
玩家必须行走一段距离。
 +
<source lang="yaml">type: PLAYER_WALK_DISTANCE
 +
goal: 256.0</source>
 +
 
 +
=== 物理 ===
 +
 
 +
==== PLAYER_BED_ENTER|上床 ====
 +
玩家必须躺在床上。
 +
<source lang="yaml">type: PLAYER_BED_ENTER
 +
goal: 10</source>
 +
 
 +
==== PLAYER_BED_LEAVE|下床 ====
 +
玩家必须离开床。
 +
<source lang="yaml">type: PLAYER_BED_LEAVE
 +
goal: 10</source>
 +
 
 +
==== PLAYER_BUCKET_FILL|装桶 ====
 +
玩家必须装满桶。
 +
<source lang="yaml">type: PLAYER_BUCKET_FILL
 +
bucket_type: WATER  # 仅允许特定类型的桶;值:LAVA|岩浆桶、WATER|水桶、MILK|牛奶桶</source>
 +
 
 +
==== PLAYER_BURN|燃烧 ====
 +
玩家必须燃起来 è_é
 +
<source lang="yaml">type: PLAYER_BURN
 +
goal: 1 MINUTE</source>
 +
 
 +
==== PLAYER_DIE|死亡 ====
 +
玩家必须狗带 è_é
 +
<source lang="yaml">type: PLAYER_DIE
 +
goal: 10</source>
 +
 
 +
==== PLAYER_GAIN_HEALTH|回血 ====
 +
玩家必须回血。
 +
<source lang="yaml">type: PLAYER_GAIN_HEALTH
 +
goal: 20.0
 +
final_health: true  # 将目标视为固定生命值(目标数为20时玩家要有10颗心的生命值)
 +
causes: []  # 仅允许一些回血手段;值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityRegainHealthEvent.RegainReason.html</nowiki></source>
 +
 
 +
==== PLAYER_GAIN_XP|获得经验 ====
 +
玩家必须获得点经验。
 +
<source lang="yaml">type: PLAYER_GAIN_XP
 +
goal: 100.0
 +
final_health: true  # 将目标数视为固定经验值</source>
 +
 
 +
==== PLAYER_PORTAL_ENTER|进入传送门 ====
 +
玩家必须进入传送门。
 +
<source lang="yaml">type: PLAYER_PORTAL_ENTER</source>
 +
 
 +
==== PLAYER_PORTAL_LEAVE|离开传送门 ====
 +
玩家必须离开传送门。
 +
<source lang="yaml">type: PLAYER_PORTAL_LEAVE</source>
 +
 
 +
==== PLAYER_SHOOT_PROJECTILE|发射弹射物 ====
 +
玩家必须发射弹射物。
 +
<source lang="yaml">type: PLAYER_SHOOT_PROJECTILE
 +
projectile_types: [ARROW]  # 仅允许特定类型的弹射物;值:ARROW|箭、SPECTRAL_ARROW|光灵箭、EGG|鸡蛋、SNOWBALL|雪球、FIREBALL|火球、EXP_BOTTLE|附魔之瓶、ENDER_PEARL|末影珍珠、TRIDENT|三叉戟</source>
 +
 
 +
==== PLAYER_SNEAK|潜行 ====
 +
玩家必须潜行一段时间。
 +
<source lang="yaml">type: PLAYER_SNEAK
 +
goal: 1 MINUTE</source>
 +
 
 +
==== PLAYER_TAKE_DAMAGE|受伤 ====
 +
玩家必须受到伤害。
 +
<source lang="yaml">type: PLAYER_TAKE_DAMAGE
 +
goal: 100.0
 +
causes: []  # 仅允许一些受伤方式;值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityDamageEvent.DamageCause.html</nowiki></source>
 +
 
 +
==== PLAYER_TOGGLE_SNEAK|切换潜行 ====
 +
玩家必须切换几次潜行状态。
 +
<source lang="yaml">type: PLAYER_TOGGLE_SNEAK
 +
goal: 10</source>
 +
 
 +
==== PLAYER_VEHICLE_ENTER|进入载具 ====
 +
玩家必须进入载具。
 +
<source lang="yaml">type: PLAYER_VEHICLE_ENTER
 +
goal: 10
 +
vehicle_type: BOAT  # 仅允许特定类型的载具;值:BOAT|船、MINECART|矿车、HORSE|马、DONKEY|驴、MULE|骡、LLAMA|羊驼、PIG|猪</source>
 +
 
 +
==== PLAYER_VEHICLE_LEAVE|离开载具 ====
 +
玩家必须离开载具。
 +
<source lang="yaml">type: PLAYER_VEHICLE_LEAVE
 +
goal: 10
 +
vehicle_type: BOAT  # 仅允许特定类型的载具;值:BOAT|船、MINECART|矿车、HORSE|马、DONKEY|驴、MULE|骡、LLAMA|羊驼、PIG|猪</source>
 +
 
 +
=== 杂项 ===
 +
 
 +
==== PLAYER_ACHIEVEMENT_AWARD|成就/进度奖励 (1.12+) ====
 +
玩家必须获得成就。
 +
<source lang="yaml">type: PLAYER_ACHIEVEMENT_AWARD
 +
achievement_type: BAKE_CAKE  # 仅允许特定成就;值:<nowiki>https://neolumia.github.io/spigot-docs/1.12.2/org/bukkit/Achievement.html</nowiki></source>
 +
 
 +
==== PLAYER_CHAT|聊天 ====
 +
玩家必须发送聊天消息或执行指令。
 +
<source lang="yaml">type: PLAYER_CHAT
 +
goal: 10  # 所需完成次数
 +
whitelist: []  # 白名单
 +
blacklist: []  # 黑名单
 +
regex: ^[a-zA-Z0-9_]*$  # 仅接受匹配正则表达式的值(默认正则为英文子母)
 +
min_length: 10  # 最小长度
 +
max_length: 20  # 最大长度
 +
error_message: >  # 输入值无效时发送的消息
 +
  &c你输入的消息无效!
 +
store_in_variable: my_variable  #存储结果到变量内</source>
 +
 
 +
==== PLAYER_CONNECT|进服 ====
 +
玩家必须连接服务器 \o/
 +
<source lang="yaml">type: PLAYER_CONNECT
 +
goal: 10</source>
 +
 
 +
==== PLAYER_DISCONNECT|下线 ====
 +
玩家必须离开服务器 /o\
 +
<source lang="yaml">type: PLAYER_DISCONNECT
 +
goal: 10</source>
 +
 
 +
==== PLAYER_RESPAWN|重生 ====
 +
玩家必须重生。
 +
<source lang="yaml">type: PLAYER_RESPAWN
 +
goal: 10</source>
 +
 
 +
==== PLAYER_WAIT|等待 ====
 +
玩家必须等待一段时间
 +
<source lang="yaml">type: PLAYER_WAIT
 +
goal: 30 MINUTE</source>
 +
==服务器类型==
 +
 
 +
=== SERVER_ACTIONS ===
 +
这个目标有点特殊。它可让你方便地在同一目标内执行多个操作。
 +
<source lang="yaml">type: SERVER_ACTIONS
 +
actions: | # 操作列表
 +
  ACTION 1
 +
  ACTION 2
 +
complete_journal_entry_messages: true  # 添加消息操作到该目标的日志条目内;这只对含有{messages}的条目有效</source>
 +
显示操作:
 +
 
 +
*<code lang="yaml">SEND_MESSAGE <message></code>:对匹配身份的玩家发送消息
 +
*<code lang="yaml">SEND_TITLE <淡入刻> <持续刻> <淡出刻> <标题>,<子标题></code>:对匹配身份的玩家发送标题
 +
*<code lang="yaml">SEND_SOUND <音效> [音量] [音高]</code>:对匹配身份的玩家播放音效
 +
*<code lang="yaml">SEND_PARTICLES <粒子效果> <数量> <quest players only></code>:对匹配身份的玩家发送粒子效果(如果quest players only为false则对全部玩家发送)
 +
*<code lang="yaml">GIVE_EFFECT <药水效果> <强度> <刻></code>:给予匹配身份的玩家药水效果
 +
 
 +
执行操作:
 +
 
 +
*<code lang="yaml">PERFORM_COMMAND [as player] <指令></code>:对匹配身份的玩家执行指令;将‘as player’设置为true或不填
 +
*<code lang="yaml">PERFORM_COMMAND_AS_OP_PLAYER <指令></code>:用OP权限对匹配身份的玩家执行指令
 +
*<code lang="yaml">PERFORM_OBJECT <分支id> <目标id></code>:对匹配身份的玩家执行任务目标
 +
*<code lang="yaml">PERFORM_PARTICLE_SCRIPT <脚本></code>:对匹配身份的玩家执行粒子脚本
 +
 
 +
分支/任务操作:
 +
 
 +
*<code lang="yaml">START_BRANCH <分支></code>:开始分支
 +
*<code lang="yaml">STOP_BRANCH <分支></code>:停止分支
 +
*<code lang="yaml">START_INDIVIDUAL_BRANCH <分支> [身份限制]</code>:让匹配身份的玩家或全部玩家开始独立分支
 +
*<code lang="yaml">START_QUEST <任务></code>:开始匹配身份的玩家或全部玩家的任务
 +
*<code lang="yaml">STOP_QUEST <任务></code>:停止匹配身份的玩家或全部玩家的任务
 +
*<code lang="yaml">START_FUNCTIONAL_QUEST <功能性任务></code>:开始匹配身份的玩家或全部玩家的功能性任务
 +
*<code lang="yaml">STOP_FUNCTIONAL_QUEST <功能性任务></code>:停止匹配身份的玩家或全部玩家的功能性任务
 +
 
 +
暂时性操作:
 +
 
 +
*<code lang="yaml">WAIT_TICKS <刻></code>:等待刻数
 +
*<code lang="yaml">PROMPT_NEXT <message></code>:发送可在聊天框内点击的消息;玩家必须点击消息才能继续任务
 +
*<code lang="yaml">CITIZENS_NPC_NAVIGATE <npc id> [自定义位置] [等待完成时间] [等待玩家范围]</code>:开始导航到目标NPC处;可等待NPC到达目标处再继续操作;或等待玩家到特定范围内继续
 +
 
 +
=== 实体 ===
 +
以<code>SERVER_ENTITIES</code>开头的目标都有可匹配实体的通用实体设置:
 +
<source lang="yaml">entities:
 +
  a:
 +
    types: [CREEPER]  # 允许的实体类型a list of allowed entity types (留空则允许全部)值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html</nowiki>
 +
    names: []  # 允许的实体自定义名称 (留空则允许全部)
 +
    colors: []  # 允许的颜色(留空则允许全部)
 +
    goal: 100.0  # 实体目标数
 +
  b:
 +
    # …… 其它实体目标</source>
 +
 
 +
==== SERVER_ENTITIES_DAMAGE|伤害实体 ====
 +
服务器会对实体造成伤害。
 +
<source lang="yaml">type: SERVER_ENTITIES_DAMAGE
 +
damage: 5.0</source>
 +
 
 +
==== SERVER_ENTITIES_KILL|击杀实体 ====
 +
服务器会杀死一些实体 è_é
 +
<source lang="yaml">type: SERVER_ENTITIES_KILL</source>
 +
 
 +
==== SERVER_ENTITIES_SPAWN|生成实体 ====
 +
服务器会生成一些实体。
 +
<source lang="yaml">type: SERVER_ENTITIES_SPAWN
 +
link_to_quest: true  # 链接实体到任务中(任务外的玩家无法与之交互)</source>
 +
 
 +
==== SERVER_ENTITIES_TELEPORT|传送实体 ====
 +
服务器会传送一些实体。
 +
<source lang="yaml">type: SERVER_ENTITIES_TELEPORT
 +
teleport_position:
 +
  # …… 传送实体位置(见“通用配置/位置”)</source>
 +
 
 +
=== 物品 ===
 +
 
 +
==== SERVER_ITEMS_CLEAR|清空物品 ====
 +
服务器会清空匹配身份的玩家背包内物品。
 +
<source lang="yaml">type: SERVER_ITEMS_CLEAR</source>
 +
 
 +
==== SERVER_ITEMS_DROP|掉落物品 ====
 +
服务器会掉落一些物品
 +
<source lang="yaml">type: SERVER_ITEMS_DROP
 +
items:
 +
  a:
 +
    # …… 见“通用配置/物品”
 +
  b:
 +
    # …… 见“通用配置/物品”
 +
count: 1  # 掉落物品数
 +
          # 如果该值低于列表内物品数,则随机选取物品掉落
 +
          # 如果等于,则掉落列表内的全部物品
 +
          # 如果大于,则掉落列表内的全部物品并重复掉落</source>
 +
 
 +
==== SERVER_ITEMS_GIVE|给予物品 ====
 +
服务器会给予匹配身份的玩家物品。
 +
<source lang="yaml">type: SERVER_ITEMS_GIVE
 +
items:
 +
  a:
 +
    # …… 见“通用配置/物品”
 +
  b:
 +
    # …… 见“通用配置/物品”
 +
count: 1  # 给予物品数
 +
          # 如果该值低于列表内物品数,则随机选取物品给予
 +
          # 如果等于,则给予列表内的全部物品
 +
          # 如果大于,则给予列表内的全部物品并重复给予</source>
 +
 
 +
==== SERVER_ITEMS_MODIFY ====
 +
服务器会修改匹配身份的玩家背包内的物品。
 +
<source lang="yaml">type: SERVER_ITEMS_MODIFY
 +
items:  # 请注意,这写是匹配的物品,而不只是物品
 +
  a:
 +
    # …… 见“通用配置/物品匹配”
 +
  b:
 +
    # …… 见“通用配置/物品匹配”
 +
count: 1  # 修改物品数
 +
          # 如果该值低于列表内物品数,则随机选取物品修改
 +
          # 如果等于,则修改列表内的全部物品
 +
          # 如果大于,则修改列表内的全部物品并重复修改
 +
quest_unlink: true  # 取消链接物品
 +
durability_set: 0  # 设置耐久度
 +
custom_model_data_set: 0  # 设置自定义模型数据 (1.14+)
 +
name_set: 物品名  # 设置名称
 +
name_remove: Remove from name  # 从名称中删除特定字词
 +
lore_set: [New lore]  # 设置lore
 +
lore_add: [Add to lore]  #添加到lore内的文本
 +
lore_remove: [Remove from lore]  # 如果lore内包含特定字词则删除这行lore
 +
enchantments_add:  # 添加附魔
 +
  DAMAGE_ALL: 1
 +
  # …… 附魔列表:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html</nowiki>
 +
enchantments_remove: [DAMAGE_ALL]  # 移除附魔</source>
 +
 
 +
==== SERVER_ITEMS_TAKE|拿取物品 ====
 +
服务器会拿走匹配身份的玩家背包内的物品。
 +
<source lang="yaml">type: SERVER_ITEMS_TAKE
 +
items:  # 请注意,这写是匹配的物品,而不只是物品
 +
  a:
 +
    # …… 见“通用配置/物品匹配”
 +
  b:
 +
    # …… 见“通用配置/物品匹配”
 +
count: 1  # 拿取物品数
 +
          # 如果该值低于列表内物品数,则随机选取物品拿取
 +
          # 如果等于,则拿取列表内的全部物品
 +
          # 如果大于,则拿取列表内的全部物品并重复拿取</source>
 +
 
 +
=== 物理 ===
 +
 
 +
==== SERVER_BLOCKS_PLACE|放置方块 ====
 +
服务器会放置方块。
 +
<source lang="yaml">type: SERVER_BLOCKS_PLACE
 +
block_type: STONE  # 放置的方块类型
 +
block_states: []  # 方块状态列表</source>
 +
 
 +
==== SERVER_EXPLOSIONS_CREATE|制造爆炸 ====
 +
服务器会制造爆炸。
 +
<source lang="yaml">type: SERVER_EXPLOSIONS_CREATE
 +
power: 2.0  # 爆炸强度(2是普通TNT爆炸强度)
 +
count: 10</source>
 +
 
 +
==== SERVER_FIREWORKS_LAUNCH|发射烟花火箭 ====
 +
服务器会发射烟花火箭
 +
<source lang="yaml">type: SERVER_FIREWORKS_LAUNCH
 +
effects:
 +
  1:
 +
    # …… 见“通用配置/烟花效果”
 +
  2:
 +
    # …… 见“通用配置/烟花效果”
 +
count: 10</source>
 +
 
 +
==== SERVER_LIGHTNING_STRIKE|雷击 ====
 +
服务器会召唤闪电。
 +
<source lang="yaml">type: SERVER_LIGHTNING_STRIKE
 +
damage: true  # 允许雷击对实体造成伤害
 +
count: 10</source>
 +
 
 +
==== SERVER_PLAYER_DAMAGE|伤害玩家 ====
 +
服务器会对匹配身份的玩家造成伤害
 +
<source lang="yaml">type: SERVER_PLAYER_DAMAGE
 +
damage: 10.0</source>
 +
 
 +
==== SERVER_PLAYER_EFFECTS_GIVE|给予效果 ====
 +
服务器会给予匹配身份的玩家药水效果。
 +
<source lang="yaml">type: SERVER_PLAYER_EFFECTS_GIVE
 +
effects:
 +
  1:
 +
    # …… 见“通用配置/药水效果”
 +
  2:
 +
    # …… 见“通用配置/药水效果”
 +
count: 1  # 给予效果数
 +
          # 如果该值低于玩家拥有效果数,则随机给予效果
 +
          # 如果等于,则给予全部效果
 +
          # 如果大于,则给予全部效果并重复给予</source>
 +
 
 +
==== SERVER_PLAYER_EFFECTS_REMOVE|移除效果 ====
 +
服务器会移除匹配身份的玩家的药水效果。
 +
<source lang="yaml">type: SERVER_PLAYER_EFFECTS_REMOVE
 +
effects: [SPEED]  # 移除的效果列表;值:https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html
 +
count: 1  # 移除效果数
 +
          # 如果该值低于玩家拥有效果数,则随机移除效果
 +
          # 如果等于,则移除全部效果
 +
          # 如果大于,则移除全部效果并重复移除</source>
 +
 
 +
==== SERVER_PLAYER_TELEPORT|传送玩家 ====
 +
服务器会传送匹配身份的玩家到特定位置。
 +
<source lang="yaml">type: SERVER_PLAYER_TELEPORT</source>
 +
 
 +
=== 逻辑 ===
 +
 
 +
==== SERVER_LOGIC_MONEY|金钱 ====
 +
服务器会修改玩家的金钱。
 +
<source lang="yaml">type: SERVER_LOGIC_MONEY
 +
currency: VAULT  # 要修改的货币
 +
value_formula: {value} + 100.0  # 金钱占位符:{value}</source>
 +
 
 +
==== SERVER_LOGIC_POINTS|任务点数 ====
 +
服务器会修改玩家的任务点数。
 +
<source lang="yaml">type: SERVER_LOGIC_POINTS
 +
category: global  # 修改的类别
 +
value_formula: {value} + 10  # 占位符:{value}</source>
 +
 
 +
==== SERVER_LOGIC_VARIABLE|变量 ====
 +
服务器会修改玩家的变量。
 +
<source lang="yaml">type: SERVER_LOGIC_VARIABLE
 +
variable: my_variable  # 要修改的变量
 +
value_formula: {value} + 10  # 占位符:{value}</source>
 +
 
 +
==== SERVER_LOGIC_MODEL_VARIABLE|任务变量 ====
 +
服务器会修改任务变量。
 +
<source lang="yaml">type: SERVER_LOGIC_MODEL_VARIABLE
 +
variable: my_variable  # 要修改的变量
 +
value_formula: {value} + 10  # 占位符:{value}</source>
 +
 
 +
==== SERVER_LOGIC_SERVER_VARIABLE|服务器变量 ====
 +
服务器会修改服务器变量。
 +
<source lang="yaml">type: SERVER_LOGIC_SERVER_VARIABLE
 +
variable: my_variable  # 要修改的变量
 +
value_formula: {value} + 10  # 占位符:{value}</source>
 +
 
 +
==== SERVER_LOGIC_XP|经验值 ====
 +
服务器会修改玩家的经验值。
 +
<source lang="yaml">type: SERVER_LOGIC_XP
 +
value_formula: {value} + 10  # 占位符:{value}</source>
 +
 
 +
=== 杂项 ===
 +
 
 +
==== SERVER_ACHIEVEMENT_AWARD|成就 ====
 +
服务器会给予玩家成就。
 +
<source lang="yaml">type: SERVER_ACHIEVEMENT_AWARD
 +
achievement_type: BAKE_CAKE  # 给予的成就值:<nowiki>https://neolumia.github.io/spigot-docs/1.12.2/org/bukkit/Achievement.html</nowiki></source>
 +
 
 +
==== SERVER_CAMERA_MODE_TOGGLE|切换模式 ====
 +
服务器会切换任务相机模式。
 +
<source lang="yaml">type: SERVER_CAMERA_MODE_TOGGLE
 +
toggle: true  # 是否启用</source>
 +
 
 +
==== SERVER_COMMANDS_PERFORM|执行指令 ====
 +
服务器会对玩家执行指令
 +
<source lang="yaml">type: SERVER_COMMANDS_PERFORM
 +
commands: |  # 执行的指令
 +
  say &a你好。
 +
  say &a{player},你今天过得怎么样?
 +
as_player: false  # 是否以玩家身份执行指令</source>
  
 
=条件=
 
=条件=
 
==设置==
 
==设置==
===条件元素===
+
==== 条件元素 ====
===条件配置===
+
有时候,你只有在某些条件下才能做一些事情。
 +
 
 +
以下是条件设置。
 +
<source lang="yaml">conditions:  # 条件列表
 +
  a:
 +
    # …… 条件配置(见下方)
 +
  b:
 +
    # …… 条件配置(见下方)
 +
 +
match_amount: 1  # 必须匹配的条件数
 +
no_match_amount: 1  # 必须不匹配的条件数
 +
 +
 +
error_message: >  # 不匹配条件时发送的消息
 +
  &c错误!你必须只能满足一个条件!</source>
 +
 
 +
==== 条件配置 ====
 +
以下是通用条件配置。
 +
<source lang="yaml">error_message: >  # 发送错误消息;如果在条件元素里设置了'error_message',则不会发送这里的消息
 +
  &c错误!D:
 +
 +
actor_restriction:
 +
  # …… 身份限制
 +
 +
must_take: true  # 稍后取走条件(仅支持部分条件)</source>
 +
 
  
  
 
==类型==
 
==类型==
 +
=== NONE|无 ===
 +
无类型的激活器(用于内部;该激活器无法开始任务)。
 +
 +
=== 玩家条件 ===
 +
 +
==== INVENTORY_FREE_FOR_ITEMS|背包空余 ====
 +
需要玩家的背包有空位。
 +
<source lang="yaml">type: INVENTORY_FREE_FOR_ITEMS
 +
items:
 +
  a:
 +
    item:
 +
      # …… 物品配置(见“通用配置/物品”)
 +
    goal: 100
 +
  b:
 +
    item:
 +
      # …… 物品配置(见“通用配置/物品”)
 +
    goal: 250</source>
 +
 +
==== ITEMS|物品 ====
 +
需要拥有特定物品 /<code>can take</code>
 +
<source lang="yaml">type: ITEMS
 +
items:
 +
  # …… 所需物品(见“通用配置/所需物品”)</source>
 +
 +
==== PERMISSION|权限 ====
 +
需要拥有特定权限
 +
<source lang="yaml">type: PERMISSION
 +
permission: my.server.permission</source>
 +
 +
==== POSITION|位置 ====
 +
需要匹配特定位置
 +
<source lang="yaml">type: POSITION
 +
position:
 +
  # …… 匹配的位置(见“通用配置/位置”)</source>
 +
 +
==== SCOREBOARD_TAG|计分板标签 ====
 +
需要拥有(或不能拥有)特定计分板标签
 +
<source lang="yaml">type: SCOREBOARD_TAG
 +
tag_name: my_tag  # 标签名
 +
must_have: true  # 必须拥有或不能拥有</source>
 +
 +
==== GROUP_COMPLETED|完成任务组 ====
 +
需要玩家完成特定任务组;组内的每个任务都至少完成了X次,则该任务组视为完成了X次
 +
<source lang="yaml">type: GROUP_COMPLETED
 +
group: group_id  # 所需任务组
 +
amount: 1  # 所需完成次数</source>
 +
 +
==== QUEST_COMPLETED|完成任务 ====
 +
需要玩家完成特定任务
 +
<source lang="yaml">type: QUEST_COMPLETED
 +
model: model_id  # 所需任务模型
 +
amount: 1  # 所需完成次数
 +
end_types: [SUCCESS,FAIL]  # 仅计算特定结束类型的任务(默认仅限已完成的任务)
 +
in_time: 2 WEEK  # 只计算在上X个时间单位内的完成次数</source>
 +
 +
==== QUEST_COMPLETED_OBJECT|完成任务目标 ====
 +
需要玩家完成特定任务目标
 +
<source lang="yaml">type: QUEST_COMPLETED_OBJECT
 +
model: model_id  # 任务模型
 +
branch: branch_id  # 分支
 +
object: object_id  # 所需任务目标
 +
check_active: true  # 允许检测进行中的任务
 +
amount: 1  # 所需完成次数
 +
end_types: [SUCCESS,FAIL]  # 仅限特定结束类型(默认仅限已完成的任务)
 +
in_time: 2 WEEK  # 只计算在上X个时间单位内的完成次数</source>
 +
 +
==== QUEST_PLAYERS|任务玩家 ====
 +
需要有一定数量的玩家在任务中(只能用在活跃的任务中)
 +
<source lang="yaml">type: QUEST_PLAYERS
 +
amount: 5  # 所需玩家数</source>
 +
 +
== 逻辑条件 ==
 +
 +
==== LOGIC|逻辑 ====
 +
需要匹配逻辑表达式
 +
<source lang="yaml">type: LOGIC
 +
logic: {variable:test} >= 10  # 要解析的逻辑字符串</source>
 +
 +
==== LOGIC_MONEY ====
 +
需要匹配关于金钱的逻辑表达式
 +
<source lang="yaml">type: LOGIC_MONEY
 +
currency: VAULT  # the currency to use
 +
logic: {money} >= 10  # 要解析的逻辑字符串</source>
 +
 +
==== LOGIC_QUEST_POINTS ====
 +
需要匹配关于任务点数的逻辑表达式
 +
<source lang="yaml">type: LOGIC_QUEST_POINTS
 +
category: global  # 任务点数类别
 +
logic: {points} >= 10  # 要解析的逻辑字符串</source>
 +
 +
==== LOGIC_XP_LEVEL ====
 +
需要匹配关于玩家等级的逻辑表达式
 +
<source lang="yaml">type: LOGIC_XP_LEVEL
 +
logic: {level} >= 10  # 要解析的逻辑字符串</source>
 +
 +
==== LOGIC_SCOREBOARD_VALUE ====
 +
需要匹配关于玩家计分板值的逻辑表达式
 +
<source lang="yaml">type: LOGIC_SCOREBOARD_VALUE
 +
tag_name: tag  # 计分板目标
 +
score_name: score  # 目标分数名
 +
logic: {value} >= 10  # 要解析的逻辑字符串</source>
 +
 +
== 时间条件 ==
 +
 +
==== GAME_TIME|游戏时间 ====
 +
需要在游戏内特定的一天时间内
 +
<source lang="yaml">type: GAME_TIME
 +
start_ticks: 0  # from 0 to 23999
 +
end_ticks: 0  # from 0 to 23999 ; 可以在start之前</source>
 +
 +
==== TIME_IN_DAY|天数 ====
 +
需要在现实时间的特定天数
 +
<source lang="yaml">type: TIME_IN_DAY
 +
start:
 +
  hour: 10
 +
  minute: 30
 +
end:  # 可以在start之前
 +
  hour: 16
 +
  minute: 30</source>
 +
 +
==== TIME_IN_WEEK|周数 ====
 +
需要在现实世界内的特定周数
 +
<source lang="yaml">type: TIME_IN_WEEK
 +
start:
 +
  day_of_week: MONDAY
 +
  hour: 10
 +
  minute: 30
 +
end:  # 可以在start之后
 +
  day_of_week: FRIDAY
 +
  hour: 16
 +
  minute: 30</source>
 +
 +
==== TIME_IN_MONTH|月份 ====
 +
需要在现实世界内的特定月份
 +
<source lang="yaml">type: TIME_IN_MONTH
 +
start:
 +
  day_of_month: 16
 +
  hour: 10
 +
  minute: 30
 +
end:  # 可在start之前
 +
  day_of_month: 31
 +
  hour: 16
 +
  minute: 30</source>
 +
 +
==== TIME_IN_YEAR|年份 ====
 +
需要需要在现实世界内的特定年份
 +
<source lang="yaml">type: TIME_IN_YEAR
 +
start:
 +
  month: FEBRUARY
 +
  day_of_month: 16
 +
  hour: 10
 +
  minute: 30
 +
end:  # 可在start 之前
 +
  month: APRIL
 +
  day_of_month: 31
 +
  hour: 16
 +
  minute: 30</source>
  
 
=GUI=
 
=GUI=
 
==GUI==
 
==GUI==
 +
插件包含便捷的多阶段GUI系统。该系统位于<code>/guis/</code>。
 +
 +
如果你安装了ProtocolLib,则插件会使用客户端数据包。这可以在你安装了很多与GUI交互的插件时,避免Spigot处理额外的事件并优化性能。
 +
 +
=== GUI设置 ===
 +
<source lang="yaml">name: >  # GUI名称
 +
  &a我的GUI
 +
type: CHEST_6_ROW  # GUi类型(见“通用配置/GUI类型”)
 +
 +
contents:
 +
  1:
 +
    # …… GUI物品设置(见“GUI物品设置”)
 +
  2:
 +
    # …… GUI物品设置(见“GUI物品设置”)
 +
 +
gui_show_status: [AVAILABLE,PROGRESS]  # GUI内允许使用的任务状态列表(留空则允许全部);值:AVAILABLE、PROGRESS、COOLDOWN、UNAVAILABLE、COMPLETED
 +
 +
quests:  # GUI内的任务列表;任务会显示在第一个可用的栏位内
 +
  - quest1
 +
  - quest2
 +
  - group:group_of_quests</source>
 +
 
==物品设置==
 
==物品设置==
 +
 +
 +
GUI物品也有不同的类型且可以放在GUI内的很多位置里。
 +
 +
=== 图标 ===
 +
一些物品类型需要图标
 +
<source lang="yaml">icon:
 +
  # …… 见“通用物品配置”</source>
 +
 +
=== 位置设置 ===
 +
决定物品在GUI内的哪个栏位出现。格式为<code>页数,栏位</code>或<code>栏位</code> 。
 +
 +
页数和栏位从0开始。
 +
<source lang="yaml">locations: |
 +
  0,1
 +
  0,5
 +
  1,34
 +
  1,35
 +
  6</source>
 +
在这个示例中,物品会出现在<code>第0页的第1和5格</code>,<code>第1页的34和35格</code>和<code>有空位的页面的第36格</code>。
 +
 +
你也可以让物品“永存”。如果开启该选项,则每一页的同一位置都会显示该物品。
 +
<source lang="yaml">persistent: true
 +
locations: |
 +
  1
 +
  5
 +
  6</source>
 +
 +
=== 覆盖点击设置 ===
 +
有些物品类型在你点击它们时会执行一些特有的效果。但你可以覆盖一些点击类型来执行额外的效果。
 +
<source lang="yaml">override_clicks:
 +
  LEFT: # …… 一些操作
 +
  RIGHT: # …… 一些操作</source>
 +
可被覆盖的点击类型:
 +
 +
*<code>LEFT</code>
 +
*<code>SHIFT_LEFT</code>
 +
*<code>RIGHT</code>
 +
*<code>SHIFT_RIGHT</code>
 +
*<code>MIDDLE</code>
 +
*<code>NUMBER_KEY</code>
 +
*<code>NUMBER_KEY_1</code>:不兼容ProtocolLib
 +
*<code>NUMBER_KEY_2</code>:不兼容ProtocolLib
 +
*<code>NUMBER_KEY_3</code>:不兼容ProtocolLib
 +
*<code>NUMBER_KEY_4</code>:不兼容ProtocolLib
 +
*<code>NUMBER_KEY_5</code>:不兼容ProtocolLib
 +
*<code>NUMBER_KEY_6</code>:不兼容ProtocolLib
 +
*<code>NUMBER_KEY_7</code>:不兼容ProtocolLib
 +
*<code>NUMBER_KEY_8</code>:不兼容ProtocolLib
 +
*<code>NUMBER_KEY_9</code>:不兼容ProtocolLib
 +
*<code>DOUBLE_CLICK</code>
 +
*<code>DROP</code>
 +
*<code>CONTROL_DROP</code>
 +
 +
操作列表:
 +
<source lang="yaml"># 以服务器身份执行指令
 +
CLICK_TYPE: COMMANDS_AS_SERVER say &a你好{player},say &a你今天过得怎么样
 +
 +
# 以玩家身份执行指令
 +
CLICK_TYPE: COMMANDS_AS_PLAYER say &b我是{player},say &b今天是个好日子</source>
 +
 +
=== 其它设置 ===
 +
<source lang="yaml">click_sound: ENTITY_PLAYER_LEVELUP  # 当玩家点击该物品时播放音效
 +
 +
icon:  # 一些物品类型需要图标
 +
  # …… 物品设置</source>
 +
 
==物品类型==
 
==物品类型==
 +
 +
=== NONE|无 ===
 +
无类型物品,仅用于展示(或覆盖点击) / <code>需要图标</code>
 +
<source lang="yaml">type: NONE  # 这是默认类型,所以你不需要设置这行选项</code>
 +
 +
=== DYNAMIC_BORDER_LINEAR|线性动态边界 ===
 +
“边界”物品类型,这类物品会显示动态边界效果。动画延迟配置:<code>GCore/config.yml</code>:<code>dynamic_border_refresh_ticks: 5</code>。
 +
<source lang="yaml">type: DYNAMIC_BORDER_LINEAR
 +
on_count: 2  # 同时活跃物品数
 +
icon_on:
 +
  # …… 标记为活跃的位置图标
 +
icon_off:
 +
  # …… 未标记为活跃的位置图标</source>
 +
 +
=== QC_QUESTS|任务 ===
 +
显示任务物品 / <code>需要图标</code>(默认)
 +
<source lang="yaml">type: QC_QUESTS
 +
quests: []  # 模型列表;已完成的任务会显示在其它任务状态后</code>
 +
 +
=== QC_QUEST_QUEUE|修改队列 ===
 +
查看并修改队列状态 /  <code>无需图标</code>(物品可在config.yml内配置)
 +
<source lang="yaml">type: QC_QUEST_QUEUE</source>
 +
 +
=== QC_POINTS_RANKING|点数排名 ===
 +
查看玩家任务点数排名  /  <code>无需图标</code>(物品可在config.yml内配置)
 +
<source lang="yaml">type: QC_POINTS_RANKING
 +
category: global  # 任务点数类别</source>
 +
 +
=== QC_GUI|打开GUI ===
 +
点击时打开其它GUI / <code>需要图标</code>
 +
<source lang="yaml">type: QC_GUI
 +
gui: my_gui  # GUI</source>
 +
 +
=== QC_GUI_ACTIVE_QUESTS|活跃任务 ===
 +
建立并打开包含活跃任务的GUI / <code>需要图标</code>
 +
<source lang="yaml">type: QC_GUI_ACTIVE_QUESTS</source>
 +
 +
=== QC_GUI_POINTS_RANKING|点数排名GUI ===
 +
点击打开查看玩家任务点数排名的GUI / <code>需要图标</code>
 +
<source lang="yaml">type: QC_GUI_POINTS_RANKING
 +
category: global  # 任务点数类别</source>
 +
 +
=== QC_TOGGLE_SETTING|切换设置 ===
 +
切换GUI内的特定设置
 +
<source lang="yaml">type: QC_TOGGLE_SETTING
 +
setting: JOURNAL  # 要切换的设置;值:JOURNAL、GPS、ACTIONBAR、BOSSBAR、TITLE、SCOREBOARD
 +
icon_on:
 +
  # …… 开启设置时显示的图标
 +
icon_off:
 +
  # …… 关闭设置时显示的图标</source>

Latest revision as of 16:51, 28 November 2020

GuillaumeVDN的插件文档
页面

GuillaumeVDN的插件文档 · 迁移

所有插件都有的常见内容

配置 · 杂项 · 关联

QuestCreator

基础内容 · 示例 · 详细特性 · 高级内容 · 关联

Contents

任务模型

全部模型设置

显示

display_name: '&a任务显示名'
 
 description: |
   &7任务描述
   &7任务描述第二行
 
 description_placeholder: |
   &7多行占位符
   &7可和PlaceholderAPI一同使用(见通用变量)
 
 information_message: >
   &a当玩家点击任务物品而未开始任务时发送的消息
 
 progress_notify:
   # …… 每隔一段时间发送给玩家的进度提醒(见通用配置/提醒)
 
 progress_notify_scoreboard: true  # 允许任务显示在计分板上
 
 # 显示优先度
 # 优先度从低到高排序。如果A的优先度为1,B的优先度为2,则A的优先度更高。
 # 你可以用这个来决定任务显示在actionbar、计分板等地方的优先度。
 # 插件会根据优先度分类任务。如果优先度相同,则优先显示进度最新的任务。
 # 这是可选设置,没有设置优先度的任务低于设置了优先度的任务。
 # 请注意GUI物品不会影响这个优先度
 display_priority: 1

GUI物品

任务可以显示在GUI中。你可以给每个任务模型设定物品列表(最终取决于其当前状态)。

要记住,不同的任务状态会有不同的控制选项和lore。比如停止或开始任务以下是可配置的消息。

status_items:
   AVAILABLE:
     # 可开始任务的物品图标
   PROGRESS:
     # 任务进行中的物品图标
   COOLDOWN:
     # 任务冷却中的物品图标
   UNAVAILABLE:
     # 无法开始任务的物品图标
   COMPLETED:
     # 任务完成的物品图标(达到最大完成次数时显示)
 
 all_status_items:
   # 全部状态都显示为同一物品
   # 如果一个状态没有物品,则插件会自动使用一个物品

全部状态的占位符:

  • {quest}:任务名
  • {description}:任务描述
  • {controls}:根据玩家能做什么显示的动态控制列表;如果没有控制,则该占位符为空
  • {completions}:该任务的完成文本;如果任务未完成,则该占位符为空
  • {last_completion}:该任务的上次完成文本;如果未完成过任务,则该占位符为空
  • {cooldown}:该任务的冷却文本;如果没有任务冷却,则该占位符为空
  • {detailed_progression}:该任务的详细进度;如果任务未激活,则该占位符为空
  • {detailed_errors}:显示玩家无法开始的原因的文本;如果如果不是“无法使用”状态,则该占位符为空

PROGRESS状态的占位符:

  • {players}:多个玩家名;如果不是多人任务,则该占位符为空
  • 你也可以使用上面列出的任务占位符。

限制

permission_start_restriction: questcreator.quest.my_quest  # 开始任务所需权限
 
 conditions_start_restriction:
   # …… 开始任务所需条件(见条件)
 
 world_restriction:  # 世界限制
   whitelist: |
     list_of_worlds
     to_allow
   blacklist: |
     list_of_worlds
     to_deny
 
 command_restriction:  # 任务进行时无法使用的指令
   whitelist: |
     /list of commands
     /to allow
   blacklist: |
     /list of commands
     /to deny

完成/限时/冷却

completion:
   max_completions: 10  # 该任务的最大可完成次数
   apply_actor_restriction:
     # …… 只对一些身份的玩家将任务标记为已完成 (见“杂项/身份”)
   notify:
     SUCCESS:
       # …… 任务完成时发送的提醒(见“通用配置/提醒”)
     # …… 键:SUCCESS、FAIL、CANCEL
   notify_coop:
     SUCCESS:
       # …… 如果完成时发送的提醒(多人任务)
     # …… 键:SUCCESS、FAIL、CANCEL
 
 time_limit:
   duration: 1 HOUR  # 任务限时
   reminder:
     # …… 发送提醒玩家剩余时间的消息(见“通用配置/提醒”)
     # - 显示剩余时间的占位符:{time}
   fail_goto: QUEST_FAIL  # a goto to apply when the time is over
 
 cooldown:
   duration: 12 HOUR
   end_types: [SUCCESS]  # 只对一些结束类型使用冷却;值:SUCCESS、FAIL、CANCEL、COOP_LEAVE
   apply_actor_restriction:
     # …… 只对一些身份的玩家设置冷却(见“杂项/身份”)

同时进行任务数/玩家/组队

max_concurrent_instances: 5  # 任务最大同时进行数
 
 # 如果已达任务同时进行数上限,则将玩家加入到队列中
 max_concurrent_instances_queue: true
 
 # 玩家数上下限(包括队长)
 min_players: 1
 max_players: 3  # 设置为大于1的值则允许多人任务
 
 # 允许组队玩家离开任务,该数值需小于最大玩家数
 # 如果组队人数低于该值,则剩下的组队玩家无法离开任务
 min_active_players: 2
 
 allow_leader_stop: true  # 允许队长停止任务
 
 # 队长掉线时的处理方式
 # 设置为false则队长掉线后队员仍能继续进行任务
 # 如果你在任务中使用了变量则不推荐设置为false
 dispose_on_leader_disconnect: true
 
 # 允许队员解析任务设置
 # 如果你的设置包含变量,我建议开启该选项
 only_leader_parsing: true
 
 notify_coop_player_leave:
   # …… 组队玩家离开任务时发送的提醒

保存

saving: ENABLED

值 :

  • ENABLED:保存任务到磁盘/数据库中
  • PLUGIN_ACTIVE:只要加载了插件,任务就会持续活跃
  • PLAYER_ONLINE:只要加载了插件且玩家在线,任务就会持续活跃

变量

# 默认模型变量值
 model_variables:
   my_variable: 默认值

激活器

# 该任务的激活器(详见“任务激活器”)
 activators: |
   first_activator
   second_activator
 
 # 在正式开始任务前发送的对话(只对物理激活器有效)
 # 玩家每激活一次激活器就发送一条对话
 # 发送完全部对话后,玩家可以打开开始任务的确认GUI
 activators_dialog: |
   &7我找你有事!
   &7你想要开始任务吗?
 
 # 自动向范围内的玩家发送第一条对话
 activators_dialog_auto_start_distance: 3.5
 
 # 在特定条件下重置对话
 activators_dialog_reset:
   reset_delay: 30 SECOND  # 在一段时间后重置
   reset_distance: 5  # 在玩家走远后重置
   reset_notify:
     # …… 对话重置时发送的提醒

分支/目标

# 任务的分支
 branches:
   branch_1:
     # …… 见任务分支
   branch_2:
     # …… 见任务分支
 
 # 对一些结束类型的任务执行目标
 end_objects:
   SUCCESS:
     # …… 任务完成时执行的目标列表
   FAIL:
     # …… 任务失败时执行的目标列表
   CANCEL:
     # …… 任务取消时执行的目标列表
   COOP_LEAVE:
     # …… 多人任务取消时执行的目标列表
 
 # 对离线的组队玩家执行结束目标(在玩家重新登录后执行):
 end_objects_for_offline_players: true

任务分支

分支设置

starts_directly: true  # 在任务开始时自动开始分支
 
 starts_at: OBJECT_1  # 分支开始时的目标
 
 # 该分支的目标列表
 objects:
   OBJECT_1:
     # …… 见任务目标
   OBJECT_2:
     # …… 见任务目标

分支类型

默认分支类型:

type: NONE  # 这是默认类型,你可以不填该选项
 
 display_name: >  # 分支显示名(可选)
   &a分支

隐藏分支,该分支不会显示在进度中:

type: SECRET

独立分支

独立分支对多人任务有实际意义。如果你用独立分支来制作单人任务,那么它的效果就和普通分支基本一样,不过整体比较混乱,所以请不要这么做。

独立分支是针对任务中的每个玩家的。所以,玩家GuillaumeVDN可以有一个运行中的独立分支my_branch,而玩家Notch可以在这个分支内有不同的状态,甚至未激活该分支。

独立分支主要用来执行作用于单个玩家的效果,或者让任务中的玩家有不同的进度。你可以在SERVER_ACTIONS目标中手动触发,也可以在每个事件目标中触发。

比如:

branches:
 
   TRIGGER_BRANCH:
     starts_directly: true
     starts_at: TRIGGER
     objects:
       TRIGGER:
         type: PLAYER_CONNECT
         goto_individual_branches: [INDIVIDUAL_BRANCH]  # 对重连的玩家开始独立分支
         goto: OBJECT TRIGGER  # 循环激活器以使其常时有效
 
   INDIVIDUAL_BRANCH:
     starts_directly: false
     starts_at: EFFECT
     objects:
       EFFECT:
         type: SERVER_PLAYER_EFFECTS_GIVE
         start_notify:
           message: >
             &a欢迎回来{player}&a!这是你的速度 II。
         effects:
           a:
             type: SPEED
             amplifier: 1
             duration: 1 MINUTE
         # 无goto,该分支会立即停止
         # 只有第一个重连的玩家会获得速度 II的效果。

需要注意的是,从独立分支调用的goto将被用于独立分支。例如,如果你的分支MY_BRANCH的goto是从一个独立分支中调用的,那么该分支将为同一个人开始,而不是整个任务。

任务激活器

激活器位于/quest_activators/

激活器设置

和目标或模型不同的是,激活器没有通用设置。其全部设置与其类型有关,唯一的通用设置就是其类型。

type: AUTO  # 示例

激活器类型

NONE|无

没有类型的激活器(内部使用;该激活器无法开始任务)。

AUTO|自动

每隔一段时间自动开始任务。

type: AUTO
delay: 15 SECOND  # 检测延迟

POSITION|位置

每当玩家匹配特定位置时自动开始任务。

type: POSITION
position:
  # …… 开始任务所需匹配的位置(见“通用配置/位置”)
delay: 15 SECOND  # 检测延迟

物理激活器

物理激活器也有通用设置。

显示设置

对于每个激活器,你可以根据激活器的当前状态指定一个粒子脚本列表。

particles:
  AVAILABLE: script_id  # 开始任务时执行的脚本
  PROGRESS: script_id  # 任务活跃时执行的脚本
  COOLDOWN: script_id  # 任务冷却中执行的脚本
  UNAVAILABLE: script_id  # 任务无法开始时执行的脚本
  COMPLETED: script_id  # 任务完成时执行的脚本(达到完成次数上限)

particles_location:
  # …… 基于激活器位置的位置适配器。(见通用配置/相对位置)

使用激活器的任务会根据任务状态进行分类。比如如果有一个可进行的任务和一个冷却中的任务,则粒子脚本会为可进行任务显示粒子效果。

交互设置

interaction_clicks: [LEFT_CLICK,RIGHT_CLICK]  # 触发交互所需点击类型
                                              # 一些激活器只有右击有效(特别是NPC激活器)

sneak_click_cancel: true  # 允许通过潜行与NPC交互来取消任务

GUI设置

custom_gui: gui_id  # 将已配置GUI链接至该激活器,而非根据当前激活器状态生成GUI

gui_name: >  # 激活器的GUI名称
  &a激活器
gui_type: CHEST_6_ROW  # 激活器GUI类型(见通用配置/GUI类型)

gui_show_status: [AVAILABLE,PROGRESS]  # 激活器GUI内可用的状态(留空则可用于全部状态);值:AVAILABLE、PROGRESS、COOLDOWN、UNAVAILABLE、COMPLETED

required_gui_quests: 5  # 只在有至少X个可进行的任务时可打开GUI

POSITIONS_INTERACT|位置交互

任务会在玩家与特定位置的方块交互时自动开始。

type: POSITIONS_INTERACT
positions:
  # …… 开始任务所需匹配的位置

ENTITIES|实体

任务会在玩家与特定实体交互时自动开始。

type: ENTITIES

entity_types: [CREEPER]  # 允许的实体类型(留空则允许全部);值:https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html

entity_names: []  # 允许的实体自定义名称(留空则允许全部)

entity_colors: []  # 允许的实体颜色(留空则允许全部)

任务池

任务池位于 /quest_pools/

设置

display_name: My pool  # 任务池显示名

time_frames:
  a:
    # …… 见“通用配置/时间范围”
  b:
    # …… 见“通用配置/时间范围”

quests:  # 首次处理
  quest_id_1:
    #任务配置(见下方任务配置部分)
  quest_id_2:
    #任务配置(见下方任务配置部分)

quest_groups:  # 二次处理
  group_id_1:
    # 任务组配置(见下方)
  group_id_2:
    # 任务组配置(见下方)

order: RANDOM  # 遵循任务组的处理顺序或随机选取;值:IN_ORDER|顺序、RANDOM|随机选取

amount: 2  # 在每个时间段内,该任务池将为多少个任务或任务组提供任务券。
           # 每个获得券的任务会降低1点该值
           # 每个至少有一个任务的组获得券会降低1点该值

amount_tolerance: COUNT_STARTED  # 从要给的券数中减去(或不减去)活跃的任务/组的数量。
                                 # 值:COUNT_STARTED、DONT_COUNT_STARTED

rewards:
  a:
    # 奖励配置(见下方奖励配置部分)
  b:
    # 奖励配置(见下方奖励配置部分)

任务配置

process_conditions:
  # …… 处理该池所需条件

pre_reset_token: true  # 在选取任务前重置该任务的券数
pre_stop: true  # 在选取任务前停止该任务
pre_reset_history: true  # 在选取任务前重置任务历史

selected_reset_token: true  # 如果选取该任务则重置任务券
selected_stop: true  # 如果选取该任务则停止任务
selected_reset_history: true  # 如果选取该任务则重置任务历史

min_tokens: 1  # 随机给予券数下限
max_tokens: 2  # 随机给予券数上限

refund_token_on_end_types: [CANCEL]  # 如果任务以特定类型结束则退回任务券;值:SUCCESS|成功、FAIL|失败、CANCEL|取消、COOP_LEAVE|多人任务离开

池组设置

process_conditions:
  # …… 处理该池所需遵循的条件(详见“条件”)

pre_reset_token: true  # 在选取任务前重置该任务的券数
pre_stop: true  # 在选取任务前停止该任务
pre_reset_history: true  # 在选取任务前重置任务历史

selected_reset_token: true  # 如果选取该任务则重置任务券
selected_stop: true  # 如果选取该任务则停止任务
selected_reset_history: true  # 如果选取该任务则重置任务历史

amount: 1  # 选取该组时给予券的任务数

min_tokens: 1  # 选取该组时随机给予的券数下限
max_tokens: 2  # 选取该组时随机给予的券数上限

refund_token_on_end_types: [CANCEL]  # 如果任务以特定类型结束则退回任务券;值:SUCCESS|成功、FAIL|失败、CANCEL|取消、COOP_LEAVE|多人任务离开

奖励配置

你可以给玩在一段时间内完成任务池的玩家添加奖励。更具体地说,一个任务池将被视为“已完成”,当玩家完成该池中的全部任务且池中没有更多有券的任务时,将会获得奖励。

奖励以任务目标的形式发放。只有时间驱动型目标才能发放奖励,而时间驱动型目标主要是服务器目标。

奖励列表内的每个目标如果符合池的特定连续完成数,就可以专一执行。当玩家在一个时间范围内完成任务池时会增加一次连续完成次数。当玩家仍有任务券完成池中任务而插件必须重处理任务时,连续完成数会重置为0。

object:
  # …… 执行的目标(见“任务目标”)

min_streak: 1  # 执行目标所需最低连续完成数
max_streak: 5  # 最高连续完成数:如果连续完成数大于该值则不会执行目标

任务组

你可以创建使用一些属性的任务组。任务组位于/quest_groups/

分组设置

models: [quest_1,quest_2]  # 组内的任务

max_concurrent: 1  # 可同时进行组内的任务数

execution_order: true  # 需要玩家按顺序完成任务

Goto|前往类型

普通:

  • OBJECT <同一分支的目标>:设置当前分支的目标(可以是同一目标)
  • BRANCH <分支id>:停止当前分支并开始其它分支

任务结束:

  • QUEST_SUCCESS:停止任务并标记为成功完成
  • QUEST_SUCCESS_THEN_START:停止任务并标记为成功完成,然后开始其它任务
  • QUEST_SUCCESS_THEN_START_BYPASS:停止任务并标记为成功完成,然后开始其它任务(忽略任务开始条件限制)
  • QUEST_FAIL:停止任务并标记为任务失败
  • QUEST_FAIL_THEN_START:停止任务并标记为任务失败,然后开始其它任务
  • QUEST_FAIL_THEN_START_BYPASS:停止任务并标记为任务失败,然后开始其它任务(忽略任务开始条件限制)
  • QUEST_CANCEL:取消任务
  • QUEST_CANCEL_THEN_START:取消任务,然后开始其它任务
  • QUEST_CANCEL_THEN_START_BYPASS:取消任务,然后开始其它任务(忽略任务开始条件限制)
  • QUEST_COOP_LEAVE:离开任务。如果玩家在多人任务则可以离开任务(在独立分支里很有用)
  • QUEST_COOP_LEAVE_OR_STOP:离开任务。如果玩家在多人任务内则可以离开或取消任务

任务身份

你可以仅对部分任务身份的玩家应用一些目标和设置。

对于玩家驱动型目标,该设置会限制哪些玩家可以执行这类目标。对于服务器驱动型目标,该设置会限制应用的目标会给予谁效果。

身份类型:

  • NONE|无:无身份限制
  • ROLE LEADER|队长:仅限任务队长
  • ROLE COOP:仅限组队玩家(除了队长之外的玩家)
  • RANDOM:随机选取一名任务中的幸运玩家
  • JOIN_ORDER <数字列表,用空格分隔>:仅限特定加入顺序的玩家:从0开始排序或第一个加入任务的玩家总是会成为队长

示例:JOIN_ORDER 1 2会是第一和第二个加入任务的玩家。 JOIN_ORDER 2会是第二个加入任务的玩家。

检查点

每个任务最多可以有一个活跃的检查点。当一个定义了检查点的目标开始时,它会覆盖当前的检查点。

checkpoint:

  # 检查点保存的东西
  save_location: true  # 保存全部玩家的位置
  save_specific_location: world,x,y,z  # 保存特定位置而非玩家位置
  save_branches: true  # 保存全部分支的当前状态
  save_individual_branches: true  # 保存全部独立分支的当前状态
  save_model_variables: true  # 保存当前模型的变量
  save_user_variables: []  # 保存的用户变量

  # 何时回到检查点
  restore_on_respawn: RESTORE_TYPE  # 当玩家重生时
  restore_on_connect: RESTORE_TYPE  # 当玩家重连时
  restore_on_resume: RESTORE_TYPE  # 当任务暂停时
  restore_conditons:
    # …… 会导致回到检查点的一些额外条件(见“条件”)
  individual_restore_conditons:
    # …… 会导致回到独立检查点的一些额外条件(见“条件”)

RESTORE_TYPE可以是GLOBAL|全局INDIVIDUAL|个人NONE|无。 Global会回到整个任务的检查点,INDIVIDUAL会让特定玩家回到特定位置和独立分支。如果玩家GuillaumeVDN单独回到了检查点,组队的玩家Notch不会回到检查点位置或独立分支。

任务点数

任务点数分成了不同类别,所以你可以有多个不同的点数排行榜。你必须在/points_categories.yml内注册类别。

你可以使用SERVER_LOGIC_POINTS或LOGIC_QUEST_POINTS来修改任务点数。

输入/qc points指令可以查看并修改任务点数。任务点数可以显示在GUI内,排名GUI会显示玩家的任务点数。

任务目标

设置

显示设置

name_long: >  # 描述目标的长名称;主要用于GUI描述
   &a在重生点附近挖掘100块圆石
 name_short: >  # 描述目标的短名称;用在actionbar/计分板/……内
   &a在重生点附近挖掘圆石
 
 objective_detail: >  # 该目标的{objective}占位符的自定义值
   &7主要目标&b{objective_progression:a}&7/&b{objective_goal:a} &7| 次要目标:&b{objective_progression:b}&7/&b{objective_goal:b}
 
 objective_detail_verbose: >  # 显示目标进度的自定义值;用在GUI和计分板内
   &7主要目标:&b{objective_progression:a}&7/&b{objective_goal:a}
   &7次要目标:&b{objective_progression:b}&7/&b{objective_goal:b}
 
 start_notify:
   # …… 开始目标时发送的提醒(见“通用配置/提醒”)
 
 complete_notify:
   # …… 完成目标时发送的提醒(见“通用配置/提醒”)
 complete_notify_particle_script: script_id  # 完成目标时在该目标位置执行的脚本(见“通用配置/粒子脚本”)
 
 progress_notify:
   # …… 目标去的进展时发送的提醒(见“通用配置/提醒”)
   # 请注意,如果你在config.yml内开启了循环,这里的actionbar/bossbar/标题不会一直循环下去
   # 可在config.yml内修改重复延迟
 
 update_notify:
   # …… 当玩家在一段时间内未取得任何进展时发送提醒(见“通用配置/提醒”)
 update_notify_particle_script: script_id  # 在发送更新提醒时同时执行的粒子脚本(见“通用配置/粒子脚本”)
 update_notify_delay: 30 MINUTE  # 发送更新提醒的延迟

开始目标设置

start_delay: 3 SECOND  # 开始目标延迟
 
 time_limit:
   duration: 15 MINUTE  # 完成目标限时
   reminder:
     # …… 每隔一段时间提醒玩家任务剩余时间(见“通用配置/提醒”)
     # - 显示剩余时间的占位符:{time}
   fail_goto: QUEST_FAIL  # 时间结束时使用的goto
 
 execution_chance: 75.0  # 执行该目标的百分比几率
 execution_chance_fail_goto: OBJECT ACTUALLY_LETS_DO_THAT_INSTEAD  # 执行失败时使用的goto
 
 checkpoint:
   # …… 检查点设置(见上面的“检查点”)

激活设置

hide_chat: true  # 该目标活跃时隐藏聊天框
 
 hide_players: true  # 该目标活跃时隐藏其它玩家(其它玩家也看不到任务中的玩家)
 
 no_match_fail_goto: QUEST_FAIL  # 玩家错误地执行特定操作时使用的goto(比如玩家破坏了错误的方块)
 
 progress_chance: 75.0  # 目标取得进展的百分比几率
 progress_chance_fail_goto: OBJECT UNLUCKY  # 取得进展失败时使用的goto
 
 progress_actor_restriction:
     # …… 仅允许特定身份的玩家能够取得进展(见上面的“任务身份”)

结束目标设置

goto: OBJECT NEXT  # 完成该目标时使用的goto
 
 goto_start_branches: []  # 完成该目标时使用开始的分支
 
 goto_stop_branches: []  # 完成该目标时停止的分支
 
 goto_start_individual_branches: []  # 完成目标时开始的独立分支
                                     # 只对PLAYER|玩家目标有效
                                     # 比如,最后一名完成“破坏方块”目标的玩家会开始独立分支
                                     # 这堆简单目标或触发器目标很有用;只有一个触发器目标循环的分支可让多人任务中的每个玩家开始独立分支
 
 complete_journal_entry:  # 目标完成时添加的日志条目
                          # 任务条目会在给予玩家任务日志或玩家打开时更新
   entry_title: >
     &a条目标题
   entry_detail: >
     &7你见到了提米,他请求你带点东西给他。
     &7你把东西带给了他。
     &7作为回报,他给了你一份精美的礼物。
   end_types: [SUCCESS]  # 只对一些任务结束类型添加条目;值:SUCCESS|成功FAIL|失败、CANCEL|取消、COOP_LEAVE|离开多人任务

位置设置

你可以配置每个目标的位置,只有极少部分目标没有位置设置。

对于玩家驱动型目标,该设置代表玩家必须在特定位置执行操作(比如玩家该破坏哪里的方块,杀死哪里的怪物等)。

对于服务器驱动型目标,该设置代表执行操作的位置(比如在哪里生成实体,在哪里显示粒子效果等)。

position:
   # …… 位置设置(见“通用配置/位置”)

所需物品设置

你可以为每个目标配置一个“所需物品”设置。

items_needed:
   # …… 见“通用配置/所需物品”

少部分目标没有该设置,主要是PLAYER_ITEMS_<…>。这类目标已经有其它物品设置了,再加个所需物品设置会造成混淆。

进度条件设置

你可以配置额外的进度条件。玩家必须匹配条件才能让目标取得进展。

progress_conditions:
   # …… 见“条件”
 
 progress_conditions_fail_goto: QUEST_FAIL  # 不匹配进度条件时使用的goto

事件驱动型目标设置

对于事件驱动型目标,你也可以配置“位置停留”设置。该设置要求玩家待在特定位置做点事。

position_stay:
   warning_delay: 15 SECOND  # 玩家必须回到该位置的时间
   warning_notify:  # 玩家不在位置内时每隔一段时间发送的提醒
     message: >
       &c警告!你必须在{time}内回到该位置,否则任务失败!
   fail_goto: QUEST_FAIL  # 玩家未在规定时间内回到指定位置时使用的goto

这些配置可以在一些情况下取消事件:

no_match_cancel_event: true  # 在玩家操作正确,但设置出错时取消事件(比如需要破坏特定类型的方块,而玩家破坏了错误类型的玩家)
 progress_cancel_event: true  # 目标取得近战时取消事件
 progress_chance_fail_cancel_event: true  # 目标取得进展失败时取消事件
 progress_conditions_fail_cancel_event: true  # 目标条件失败时取消事件

定时驱动型目标设置

由于定时驱动型目标的检测频率非常高,所以有一个设置可以避免过于频繁地重复检测匹配(目标/位置/所需物品/进度条件)。它默认设置为50刻。如果定时目标的某个元素不匹配,那么在尝试再次检测之前,插件会等待该份时间量。

wait_after_match_fail: 50 TICKS   # 默认等待时间

特殊类型

NONE|无

该目标类型没有设置,它会在被任何定时器调用时即时进行。

你可以用来配置通用配置。比如你可以设置进度条件、位置设置或“所需物品”设置,来让玩家满足特定条件才能取得任务进展。

type: NONE

GROUP|分组

通过分组你可以把同一分支的不同目标混合使用。玩家必须按顺序完成它们才能继续任务。

MY_BRANCH:
   objects:
     MY_GROUP:
       type: GROUP
       objects: [A,B]  # 组内的目标
       ordered_objects: true  # 玩家必须按顺序完成目标
       required_objects: 2  # 所需完成目标数
     A:
       # 其它目标
     B:
       # 其它目标

RANDOM|随机

用于应用随机goto。

type: RANDOM
 gotos: |  # 应用的goto列表
   OBJECT A
   OBJECT B
   BRANCH MY_BRANCH
   QUEST_FAIL
 avoid_repeat_end_types: []  # 检测重复的结束类型列表
                             # 如果该列表不为空,则插件会检测玩家的任务历史
                             # 并避免重复使用相同的goto
                             # 如果没有更多抉择项,则会使用普通目标goto

CONDITIONS_SWITCH|条件切换

根据条件使用不同的goto。

type: CONDITIONS_SWITCH
 cases:
   a:
     # 示例配置(见下方)
   b:
     # 示例配置(见下方)

示例配置:

conditions:
   # …… 匹配的条件(见“条件”)
 goto: QUEST_SUCCESS  # 选择该案例时使用的goto

LOGIC_SWITCH|逻辑切换

根据逻辑字符串应用不同的goto。

type: LOGIC_SWITCH
 cases:
   a:
     # 示例配置(见下方)
   b:
     # 示例配置(见下方)

示例配置:

logic: {variable:test} >= 10  # …… 选取该案例时需匹配的逻辑字符串(见“通用逻辑”)
 goto: QUEST_SUCCESS  # 选择该案例时使用的goto

DIVERGE_CHAT|聊天分支

允许玩家在聊天框内点击文本来选择分支。

type: DIVERGE_CHAT
 choices:
   a:
     # 抉择配置(见下方)
   b:
     # 抉择配置(见下方)
 repeat_delay: 1 MINUTE  # 如果玩家未作出抉择则在这段时间后重新发送抉择选项

抉择配置:

text: >  # 选择该抉择时发送的文本
   &a点击选择
 redo_text: >  # 确认文本
   &a点击选择(确认)
 unavailable_text: >  # 玩家无法选择该选项时发送的文本(可选)
   &7抱歉,你无法选择该选项
 max_completions: 1  # 玩家可选择的最大次数
 conditions:
   # …… 选择该选项所需的条件
 goto: OBJECT CHOICE_1  # 选择该抉择选项时使用的goto

DIVERGE_GUI|GUI分支

允许玩家在GUI中点击不同选项来选择分支。

type: DIVERGE_GUI
 choices:
   a:
     # 抉择配置(见下方)
   b:
     # 抉择配置(见下方)
 reopen_delay: 5 SECOND  # 如果玩家未作出抉择并关闭了GUI则在这段时间后重新打开GUI

抉择配置:

slot: 10  # 选项在GUI中的栏位
 item:
   # …… 物品图标(见“通用配置/物品”)
 redo_item:
   # …… 玩家点击一次该物品后显示的图标
 unavailable_text:
   # …… 玩家无法选择该选项时显示的图标
 
 max_completions: 1  # 玩家可选择的最大次数
 conditions:
   # …… 选择该选项所需的条件
 goto: OBJECT CHOICE_1  # 选择该抉择选项时使用的goto

DIVERGE_OBJECTS|目标分支

允许玩家通过完成目标来选择不同的分支。

type: DIVERGE_OBJECTS
 choices:
   a:
     # 抉择配置(见下方)
   b:
     # 抉择配置(见下方)

抉择配置:

object: CHOICE_OBJECT_1  # 选择该选项所需完成的目标
 conditions:
   # …… 选择该选项所需的条件
 goto: OBJECT CHOICE_1  # 选择该抉择选项时使用的goto

玩家类型

方块

PLAYER_BLOCKS开头的目标都有一个可配置方块目标的通用方块设置:

blocks:
   a:
     types: [STONE,COBBLESTONE]  # 允许的方块列表(留空则允许全部)
     states: []  # 所需方块状态列表(留空则无需方块状态)
     goal: 100.0  # 该方块的目标数
   b:
     # …… 其它方块目标

PLAYER_BLOCK_FARM|耕地

玩家必须用锄头耕地。

type: PLAYER_BLOCK_FARM

PLAYER_BLOCK_FROST_WALK|冰霜行者 (1.9+)

玩家必须用冰霜行者附魔形成冰块。

type: PLAYER_BLOCK_FROST_WALK

PLAYER_BLOCKS_BREAK|破坏方块

玩家必须破坏方块。

type: PLAYER_BLOCKS_BREAK
 allow_player_blocks: false  # 允许破坏玩家放置的方块也可完成目标
 allow_player_blocks_error_message: >  # 当玩家尝试破坏玩家放置的方块时发送的消息
   &c破坏玩家放置的方块无法给让你的任务取得进展!

PLAYER_BLOCKS_IGNITE|点燃方块

玩家必须点燃一些方块。

type: PLAYER_BLOCKS_IGNITE
 allow_player_blocks: false  # 允许已被点燃的方块
 allow_player_blocks_error_message: >  # 当玩家尝试点燃已点燃的方块时发送的消息
   &c你不能用那些方块来完成任务!

PLAYER_BLOCKS_INTERACT|交互方块

玩家必须与一些方块交互。

type: PLAYER_BLOCKS_INTERACT
 click_type: LEFT_CLICK  # 仅允许特定点击类型;值:LEFT_CLICK|左击、RIGHT_CLICK|右击、PHYSICAL|物理
 allow_player_blocks: false  # 允许玩家放置的方块
 allow_player_blocks_error_message: >  # 当玩家尝试与玩家放置的方块交互时发送的消息
   &c你不能用那些方块来完成任务!
 allow_same_blocks: false  # 允许多次与同种类型的方块交互
 allow_same_blocks_error_message: >  # 当玩家尝试用同种方块时发送的消息
   &c你不能用同种方块完成任务!

PLAYER_BLOCKS_PLACE|放置方块

玩家必须放置方块。

type: PLAYER_BLOCKS_PLACE

PLAYER_BLOCKS_STRIP|去皮原木 (1.13+)

玩家必须给原木去皮

type: PLAYER_BLOCKS_STRIP
 allow_player_blocks: false  # 允许玩家放置的方块
 allow_player_blocks_error_message: >  # to be sent when the player tries to progress with a player block even though allow_player_blocks is false
   &c你不能用那些方块来完成任务!

PLAYER_TREE_GROW|植树

玩家必须让树长大。

type: PLAYER_TREE_GROW
 tree_type: ACACIA  # 仅允许特定类型的数;值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/TreeType.html</nowiki>

实体

PLAYER_ENTITIES开头的目标都有可配置实体目标的通用实体配置和允许刷怪笼实体的配置。

entities:
   a:
     types: [CREEPER]  # 允许的实体类型列表(留空则允许全部);值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html</nowiki>
     names: []  # 允许的自定义名称列表(留空则允许全部)
     colors: []  # 允许的颜色列表(留空则允许全部)
     goal: 100.0  # 实体目标数
   b:
     # …… 其它实体类型
 
 allow_spawner_entities: false  # 允许刷怪笼实体
 allow_player_blocks_error_message: >  # 当玩家尝试用刷怪笼实体完成任务时发送的消息
   &c你不能用刷怪笼刷出来的实体完成任务!

PLAYER_ENTITIES_BREED|饲养

玩家必须饲养一些实体。

type: PLAYER_ENTITIES_BREED

PLAYER_ENTITIES_INTERACT|交互实体

玩家必须与实体交互。

type: PLAYER_ENTITIES_INTERACT
 allow_same_entities: false  # 允许多次与同类型的实体交互
 allow_same_entities_error_message: >  # 当玩家尝试多次与同类型实体交互时发送的消息
   &c你不能用同类型的实体来完成任务!

PLAYER_ENTITIES_CATCH|捕捉实体

玩家必须用钓鱼竿捕捉实体。

type: PLAYER_ENTITIES_CATCH
 allow_same_entities: false  # 允许同类型的实体
 allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
   &c你不能用同类型的实体来完成任务!

PLAYER_ENTITIES_DAMAGE|伤害实体

玩家必须对一些实体造成伤害。

type: PLAYER_ENTITIES_DAMAGE
 allow_same_entities: false  # 允许同类型的实体
 allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
   &c你不能用同类型的实体来完成任务!

PLAYER_ENTITIES_DISMOUNT|取消骑乘

玩家必须取消骑乘实体。

type: PLAYER_ENTITIES_DISMOUNT
 allow_same_entities: false  # 允许同类型的实体
 allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
   &c你不能用同类型的实体来完成任务!

PLAYER_ENTITIES_GET_DAMAGED|让实体受伤

玩家必须让实体受伤。

type: PLAYER_ENTITIES_GET_DAMAGED
 allow_same_entities: false  # 允许同类型的实体
 allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
   &c你不能用同类型的实体来完成任务!

PLAYER_ENTITIES_KILL|击杀实体

玩家必须杀死一些实体。

type: PLAYER_ENTITIES_KILL

PLAYER_ENTITIES_MOUNT|骑乘实体

玩家必须骑乘一些实体。

type: PLAYER_ENTITIES_MOUNT
 allow_same_entities: false  # 允许同类型的实体
 allow_same_entities_error_message: >  # 当玩家尝试用同类型实体完成任务时发送的消息
   &c你不能用同类型的实体来完成任务!

PLAYER_ENTITIES_SHEAR|剪羊毛

玩家必须给羊剪羊毛。

type: PLAYER_ENTITIES_SHEAR

PLAYER_ENTITIES_SPAWN|生成实体

玩家必须用刷怪生成实体。

type: PLAYER_ENTITIES_SPAWN

PLAYER_ENTITIES_TAME|驯服

玩家必须驯服一些生物。

type: PLAYER_ENTITIES_TAME

物品

PLAYER_ITEMS开头的目标都有可配置物品目标的通用物品设置:

items:
   a:
     item:
       # …… 必须匹配的物品(见通用配置/物品)
     check: ExactMatch  # 执行的检测类型(见通用配置/物品匹配)
     goal: 100.0  # 物品目标数
     take: true  # 在完成目标后取走物品
   b:
     # …… 其它物品目标

PLAYER_ITEMS_BREW|酿造

玩家必须酿造点药水。

type: PLAYER_ITEMS_BREW

PLAYER_ITEMS_CONSUME|食用

玩家必须食用一些物品

type: PLAYER_ITEMS_CONSUME

PLAYER_ITEMS_CONTAINER_PUT|放入容器

玩家必须将一些物品放入容器。

type: PLAYER_ITEMS_CONTAINER_PUT
 inventory_types: []  # 允许的库存类型(留空则允许全部);值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/inventory/InventoryType.html</nowiki>

PLAYER_ITEMS_CONTAINER_TAKE|取出物品

玩家必须从容器中取出物品。

type: PLAYER_ITEMS_CONTAINER_TAKE
 inventory_types: []  # 允许的库存类型(留空则允许全部);值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/inventory/InventoryType.html</nowiki>

PLAYER_ITEMS_CRAFT|合成物品

玩家必须合成物品。

type: PLAYER_ITEMS_CRAFT

PLAYER_ITEMS_DROP|丢弃物品

玩家必须丢弃物品。

type: PLAYER_ITEMS_DROP

PLAYER_ITEMS_ENCHANT|附魔物品

玩家必须给物品附魔。

type: PLAYER_ITEMS_ENCHANT

PLAYER_ITEMS_FISH|钓鱼

玩家必须钓上一些物品。

type: PLAYER_ITEMS_FISH

PLAYER_ITEMS_INTERACT|物品交互

玩家必须与一些物品交互(手持点击物品)。

type: PLAYER_ITEMS_INTERACT
 click_type: RIGHT_CLICK  # 值:RIGHT_CLICK|右击、LEFT_CLICK|左击

PLAYER_ITEMS_MELT|熔炼

玩家必须熔炼一些物品。

type: PLAYER_ITEMS_MELT

PLAYER_ITEMS_PICKUP|捡起

玩家必须捡起一些物品。

type: PLAYER_ITEMS_PICKUP

PLAYER_ITEMS_REPAIR|修复

玩家必须修复一些物品

type: PLAYER_ITEMS_REPAIR

PLAYER_ITEMS_THROW|投掷

玩家必须投掷一些物品(药水、附魔之瓶等)。

type: PLAYER_ITEMS_THROW

PLAYER_ITEMS_TRADE|交易

玩家必须与村民交易。

type: PLAYER_ITEMS_TRADE
 allow_same_villagers: false  # 允许和同一村民多次交易
 allow_same_villagers_error_message: >  # 当玩家尝试多次与同一村民交易时发送的消息
   &c你不能与同一村民多次交易!

移动

PLAYER_ELYTRA_FLY_DISTANCE|鞘翅飞行距离 (1.9+)

玩家必须用鞘翅飞行一段距离。

type: PLAYER_ELYTRA_FLY_DISTANCE
 goal: 256.0

PLAYER_ELYTRA_LAND|鞘翅着陆 (1.9+)

玩家必须带着鞘翅着陆。

type: PLAYER_ELYTRA_LAND

PLAYER_FALL_DISTANCE|摔落距离

玩家必须摔落一段高度。

type: PLAYER_FALL_DISTANCE
 goal: 256.0

PLAYER_HORSE_JUMP|骑马跳跃

玩家必须骑马时让马跳跃。

type: PLAYER_HORSE_JUMP
 goal: 10

PLAYER_JUMP|跳跃

玩家必须跳跃。

type: PLAYER_JUMP
 goal: 10

PLAYER_MOVE_BY_FOOT_DISTANCE|徒步移动

玩家必须徒步移动一段距离。

type: PLAYER_MOVE_BY_FOOT_DISTANCE
 goal: 256.0

PLAYER_POSITION|位置

玩家必须到达指定位置。

type: PLAYER_POSITION
 display_distance: true  # 显示剩余距离

PLAYER_SPRINT_DISTANCE|冲刺距离

玩家必须冲刺一段距离。

type: PLAYER_SPRINT_DISTANCE
 goal: 256.0

PLAYER_SWIM_DISTANCE|游泳距离

玩家必须游泳一段距离。

type: PLAYER_SWIM_DISTANCE
 goal: 256.0

PLAYER_VEHICLE_DISTANCE|载具距离

玩家必须乘坐载具移动一段距离。

type: PLAYER_VEHICLE_DISTANCE
 vehicle_type: BOAT  仅允许特定类型的载具;值:BOAT|船、MINECART|矿车、HORSE|马、DONKEY|驴、MULE|骡、LLAMA|羊驼、PIG|猪
 goal: 256.0

PLAYER_WALK_DISTANCE|行走距离

玩家必须行走一段距离。

type: PLAYER_WALK_DISTANCE
 goal: 256.0

物理

PLAYER_BED_ENTER|上床

玩家必须躺在床上。

type: PLAYER_BED_ENTER
 goal: 10

PLAYER_BED_LEAVE|下床

玩家必须离开床。

type: PLAYER_BED_LEAVE
 goal: 10

PLAYER_BUCKET_FILL|装桶

玩家必须装满桶。

type: PLAYER_BUCKET_FILL
 bucket_type: WATER  # 仅允许特定类型的桶;值:LAVA|岩浆桶、WATER|水桶、MILK|牛奶桶

PLAYER_BURN|燃烧

玩家必须燃起来 è_é

type: PLAYER_BURN
 goal: 1 MINUTE

PLAYER_DIE|死亡

玩家必须狗带 è_é

type: PLAYER_DIE
 goal: 10

PLAYER_GAIN_HEALTH|回血

玩家必须回血。

type: PLAYER_GAIN_HEALTH
 goal: 20.0
 final_health: true  # 将目标视为固定生命值(目标数为20时玩家要有10颗心的生命值)
 causes: []  # 仅允许一些回血手段;值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityRegainHealthEvent.RegainReason.html</nowiki>

PLAYER_GAIN_XP|获得经验

玩家必须获得点经验。

type: PLAYER_GAIN_XP
 goal: 100.0
 final_health: true  # 将目标数视为固定经验值

PLAYER_PORTAL_ENTER|进入传送门

玩家必须进入传送门。

type: PLAYER_PORTAL_ENTER

PLAYER_PORTAL_LEAVE|离开传送门

玩家必须离开传送门。

type: PLAYER_PORTAL_LEAVE

PLAYER_SHOOT_PROJECTILE|发射弹射物

玩家必须发射弹射物。

type: PLAYER_SHOOT_PROJECTILE
 projectile_types: [ARROW]  # 仅允许特定类型的弹射物;值:ARROW|箭、SPECTRAL_ARROW|光灵箭、EGG|鸡蛋、SNOWBALL|雪球、FIREBALL|火球、EXP_BOTTLE|附魔之瓶、ENDER_PEARL|末影珍珠、TRIDENT|三叉戟

PLAYER_SNEAK|潜行

玩家必须潜行一段时间。

type: PLAYER_SNEAK
 goal: 1 MINUTE

PLAYER_TAKE_DAMAGE|受伤

玩家必须受到伤害。

type: PLAYER_TAKE_DAMAGE
 goal: 100.0
 causes: []  # 仅允许一些受伤方式;值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityDamageEvent.DamageCause.html</nowiki>

PLAYER_TOGGLE_SNEAK|切换潜行

玩家必须切换几次潜行状态。

type: PLAYER_TOGGLE_SNEAK
 goal: 10

PLAYER_VEHICLE_ENTER|进入载具

玩家必须进入载具。

type: PLAYER_VEHICLE_ENTER
 goal: 10
 vehicle_type: BOAT  # 仅允许特定类型的载具;值:BOAT|船、MINECART|矿车、HORSE|马、DONKEY|驴、MULE|骡、LLAMA|羊驼、PIG|猪

PLAYER_VEHICLE_LEAVE|离开载具

玩家必须离开载具。

type: PLAYER_VEHICLE_LEAVE
 goal: 10
 vehicle_type: BOAT  # 仅允许特定类型的载具;值:BOAT|船、MINECART|矿车、HORSE|马、DONKEY|驴、MULE|骡、LLAMA|羊驼、PIG|猪

杂项

PLAYER_ACHIEVEMENT_AWARD|成就/进度奖励 (1.12+)

玩家必须获得成就。

type: PLAYER_ACHIEVEMENT_AWARD
 achievement_type: BAKE_CAKE  # 仅允许特定成就;值:<nowiki>https://neolumia.github.io/spigot-docs/1.12.2/org/bukkit/Achievement.html</nowiki>

PLAYER_CHAT|聊天

玩家必须发送聊天消息或执行指令。

type: PLAYER_CHAT
 goal: 10  # 所需完成次数
 whitelist: []  # 白名单
 blacklist: []  # 黑名单
 regex: ^[a-zA-Z0-9_]*$  # 仅接受匹配正则表达式的值(默认正则为英文子母)
 min_length: 10  # 最小长度
 max_length: 20  # 最大长度
 error_message: >  # 输入值无效时发送的消息
   &c你输入的消息无效!
 store_in_variable: my_variable  #存储结果到变量内

PLAYER_CONNECT|进服

玩家必须连接服务器 \o/

type: PLAYER_CONNECT
 goal: 10

PLAYER_DISCONNECT|下线

玩家必须离开服务器 /o\

type: PLAYER_DISCONNECT
 goal: 10

PLAYER_RESPAWN|重生

玩家必须重生。

type: PLAYER_RESPAWN
 goal: 10

PLAYER_WAIT|等待

玩家必须等待一段时间

type: PLAYER_WAIT
 goal: 30 MINUTE

服务器类型

SERVER_ACTIONS

这个目标有点特殊。它可让你方便地在同一目标内执行多个操作。

type: SERVER_ACTIONS
 actions: |  # 操作列表
   ACTION 1
   ACTION 2
 complete_journal_entry_messages: true  # 添加消息操作到该目标的日志条目内;这只对含有{messages}的条目有效

显示操作:

  • SEND_MESSAGE <message>:对匹配身份的玩家发送消息
  • SEND_TITLE <淡入刻> <持续刻> <淡出刻> <标题>,<子标题>:对匹配身份的玩家发送标题
  • SEND_SOUND <音效> [音量] [音高]:对匹配身份的玩家播放音效
  • SEND_PARTICLES <粒子效果> <数量> <quest players only>:对匹配身份的玩家发送粒子效果(如果quest players only为false则对全部玩家发送)
  • GIVE_EFFECT <药水效果> <强度> <刻>:给予匹配身份的玩家药水效果

执行操作:

  • PERFORM_COMMAND [as player] <指令>:对匹配身份的玩家执行指令;将‘as player’设置为true或不填
  • PERFORM_COMMAND_AS_OP_PLAYER <指令>:用OP权限对匹配身份的玩家执行指令
  • PERFORM_OBJECT <分支id> <目标id>:对匹配身份的玩家执行任务目标
  • PERFORM_PARTICLE_SCRIPT <脚本>:对匹配身份的玩家执行粒子脚本

分支/任务操作:

  • START_BRANCH <分支>:开始分支
  • STOP_BRANCH <分支>:停止分支
  • START_INDIVIDUAL_BRANCH <分支> [身份限制]:让匹配身份的玩家或全部玩家开始独立分支
  • START_QUEST <任务>:开始匹配身份的玩家或全部玩家的任务
  • STOP_QUEST <任务>:停止匹配身份的玩家或全部玩家的任务
  • START_FUNCTIONAL_QUEST <功能性任务>:开始匹配身份的玩家或全部玩家的功能性任务
  • STOP_FUNCTIONAL_QUEST <功能性任务>:停止匹配身份的玩家或全部玩家的功能性任务

暂时性操作:

  • WAIT_TICKS <刻>:等待刻数
  • PROMPT_NEXT <message>:发送可在聊天框内点击的消息;玩家必须点击消息才能继续任务
  • CITIZENS_NPC_NAVIGATE <npc id> [自定义位置] [等待完成时间] [等待玩家范围]:开始导航到目标NPC处;可等待NPC到达目标处再继续操作;或等待玩家到特定范围内继续

实体

SERVER_ENTITIES开头的目标都有可匹配实体的通用实体设置:

entities:
   a:
     types: [CREEPER]  # 允许的实体类型a list of allowed entity types (留空则允许全部)值:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html</nowiki>
     names: []  # 允许的实体自定义名称 (留空则允许全部)
     colors: []  # 允许的颜色(留空则允许全部)
     goal: 100.0  # 实体目标数
   b:
     # …… 其它实体目标

SERVER_ENTITIES_DAMAGE|伤害实体

服务器会对实体造成伤害。

type: SERVER_ENTITIES_DAMAGE
 damage: 5.0

SERVER_ENTITIES_KILL|击杀实体

服务器会杀死一些实体 è_é

type: SERVER_ENTITIES_KILL

SERVER_ENTITIES_SPAWN|生成实体

服务器会生成一些实体。

type: SERVER_ENTITIES_SPAWN
 link_to_quest: true  # 链接实体到任务中(任务外的玩家无法与之交互)

SERVER_ENTITIES_TELEPORT|传送实体

服务器会传送一些实体。

type: SERVER_ENTITIES_TELEPORT
 teleport_position:
   # …… 传送实体位置(见“通用配置/位置”)

物品

SERVER_ITEMS_CLEAR|清空物品

服务器会清空匹配身份的玩家背包内物品。

type: SERVER_ITEMS_CLEAR

SERVER_ITEMS_DROP|掉落物品

服务器会掉落一些物品

type: SERVER_ITEMS_DROP
 items:
   a:
     # …… 见“通用配置/物品”
   b:
     # …… 见“通用配置/物品”
 count: 1  # 掉落物品数
           # 如果该值低于列表内物品数,则随机选取物品掉落
           # 如果等于,则掉落列表内的全部物品
           # 如果大于,则掉落列表内的全部物品并重复掉落

SERVER_ITEMS_GIVE|给予物品

服务器会给予匹配身份的玩家物品。

type: SERVER_ITEMS_GIVE
 items:
   a:
     # …… 见“通用配置/物品”
   b:
     # …… 见“通用配置/物品”
 count: 1  # 给予物品数
           # 如果该值低于列表内物品数,则随机选取物品给予
           # 如果等于,则给予列表内的全部物品
           # 如果大于,则给予列表内的全部物品并重复给予

SERVER_ITEMS_MODIFY

服务器会修改匹配身份的玩家背包内的物品。

type: SERVER_ITEMS_MODIFY
 items:  # 请注意,这写是匹配的物品,而不只是物品
   a:
     # …… 见“通用配置/物品匹配”
   b:
     # …… 见“通用配置/物品匹配”
 count: 1  # 修改物品数
           # 如果该值低于列表内物品数,则随机选取物品修改
           # 如果等于,则修改列表内的全部物品
           # 如果大于,则修改列表内的全部物品并重复修改
 quest_unlink: true  # 取消链接物品
 durability_set: 0  # 设置耐久度
 custom_model_data_set: 0  # 设置自定义模型数据 (1.14+)
 name_set: 物品名  # 设置名称
 name_remove: Remove from name  # 从名称中删除特定字词
 lore_set: [New lore]  # 设置lore
 lore_add: [Add to lore]  #添加到lore内的文本
 lore_remove: [Remove from lore]  # 如果lore内包含特定字词则删除这行lore
 enchantments_add:  # 添加附魔
   DAMAGE_ALL: 1
   # …… 附魔列表:<nowiki>https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html</nowiki>
 enchantments_remove: [DAMAGE_ALL]  # 移除附魔

SERVER_ITEMS_TAKE|拿取物品

服务器会拿走匹配身份的玩家背包内的物品。

type: SERVER_ITEMS_TAKE
 items:  # 请注意,这写是匹配的物品,而不只是物品
   a:
     # …… 见“通用配置/物品匹配”
   b:
     # …… 见“通用配置/物品匹配”
 count: 1  # 拿取物品数
           # 如果该值低于列表内物品数,则随机选取物品拿取
           # 如果等于,则拿取列表内的全部物品
           # 如果大于,则拿取列表内的全部物品并重复拿取

物理

SERVER_BLOCKS_PLACE|放置方块

服务器会放置方块。

type: SERVER_BLOCKS_PLACE
 block_type: STONE  # 放置的方块类型
 block_states: []  # 方块状态列表

SERVER_EXPLOSIONS_CREATE|制造爆炸

服务器会制造爆炸。

type: SERVER_EXPLOSIONS_CREATE
 power: 2.0  # 爆炸强度(2是普通TNT爆炸强度)
 count: 10

SERVER_FIREWORKS_LAUNCH|发射烟花火箭

服务器会发射烟花火箭

type: SERVER_FIREWORKS_LAUNCH
 effects:
   1:
     # …… 见“通用配置/烟花效果”
   2:
     # …… 见“通用配置/烟花效果”
 count: 10

SERVER_LIGHTNING_STRIKE|雷击

服务器会召唤闪电。

type: SERVER_LIGHTNING_STRIKE
 damage: true  # 允许雷击对实体造成伤害
 count: 10

SERVER_PLAYER_DAMAGE|伤害玩家

服务器会对匹配身份的玩家造成伤害

type: SERVER_PLAYER_DAMAGE
 damage: 10.0

SERVER_PLAYER_EFFECTS_GIVE|给予效果

服务器会给予匹配身份的玩家药水效果。

type: SERVER_PLAYER_EFFECTS_GIVE
 effects:
   1:
     # …… 见“通用配置/药水效果”
   2:
     # …… 见“通用配置/药水效果”
 count: 1  # 给予效果数
           # 如果该值低于玩家拥有效果数,则随机给予效果
           # 如果等于,则给予全部效果
           # 如果大于,则给予全部效果并重复给予

SERVER_PLAYER_EFFECTS_REMOVE|移除效果

服务器会移除匹配身份的玩家的药水效果。

type: SERVER_PLAYER_EFFECTS_REMOVE
 effects: [SPEED]  # 移除的效果列表;值:https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html
 count: 1  # 移除效果数
           # 如果该值低于玩家拥有效果数,则随机移除效果
           # 如果等于,则移除全部效果
           # 如果大于,则移除全部效果并重复移除

SERVER_PLAYER_TELEPORT|传送玩家

服务器会传送匹配身份的玩家到特定位置。

type: SERVER_PLAYER_TELEPORT

逻辑

SERVER_LOGIC_MONEY|金钱

服务器会修改玩家的金钱。

type: SERVER_LOGIC_MONEY
 currency: VAULT  # 要修改的货币
 value_formula: {value} + 100.0  # 金钱占位符:{value}

SERVER_LOGIC_POINTS|任务点数

服务器会修改玩家的任务点数。

type: SERVER_LOGIC_POINTS
 category: global  # 修改的类别
 value_formula: {value} + 10  # 占位符:{value}

SERVER_LOGIC_VARIABLE|变量

服务器会修改玩家的变量。

type: SERVER_LOGIC_VARIABLE
 variable: my_variable  # 要修改的变量
 value_formula: {value} + 10  # 占位符:{value}

SERVER_LOGIC_MODEL_VARIABLE|任务变量

服务器会修改任务变量。

type: SERVER_LOGIC_MODEL_VARIABLE
 variable: my_variable  # 要修改的变量
 value_formula: {value} + 10  # 占位符:{value}

SERVER_LOGIC_SERVER_VARIABLE|服务器变量

服务器会修改服务器变量。

type: SERVER_LOGIC_SERVER_VARIABLE
 variable: my_variable  # 要修改的变量
 value_formula: {value} + 10  # 占位符:{value}

SERVER_LOGIC_XP|经验值

服务器会修改玩家的经验值。

type: SERVER_LOGIC_XP
 value_formula: {value} + 10  # 占位符:{value}

杂项

SERVER_ACHIEVEMENT_AWARD|成就

服务器会给予玩家成就。

type: SERVER_ACHIEVEMENT_AWARD
 achievement_type: BAKE_CAKE  # 给予的成就值:<nowiki>https://neolumia.github.io/spigot-docs/1.12.2/org/bukkit/Achievement.html</nowiki>

SERVER_CAMERA_MODE_TOGGLE|切换模式

服务器会切换任务相机模式。

type: SERVER_CAMERA_MODE_TOGGLE
 toggle: true  # 是否启用

SERVER_COMMANDS_PERFORM|执行指令

服务器会对玩家执行指令

type: SERVER_COMMANDS_PERFORM
 commands: |  # 执行的指令
   say &a你好。
   say &a{player},你今天过得怎么样?
 as_player: false  # 是否以玩家身份执行指令

条件

设置

条件元素

有时候,你只有在某些条件下才能做一些事情。

以下是条件设置。

conditions:  # 条件列表
   a:
     # …… 条件配置(见下方)
   b:
     # …… 条件配置(见下方)
 
 match_amount: 1  # 必须匹配的条件数
 no_match_amount: 1  # 必须不匹配的条件数
 
 
 error_message: >  # 不匹配条件时发送的消息
   &c错误!你必须只能满足一个条件!

条件配置

以下是通用条件配置。

error_message: >  # 发送错误消息;如果在条件元素里设置了'error_message',则不会发送这里的消息
   &c错误!D:
 
 actor_restriction:
   # …… 身份限制
 
 must_take: true  # 稍后取走条件(仅支持部分条件)


类型

NONE|无

无类型的激活器(用于内部;该激活器无法开始任务)。

玩家条件

INVENTORY_FREE_FOR_ITEMS|背包空余

需要玩家的背包有空位。

type: INVENTORY_FREE_FOR_ITEMS
 items:
   a:
     item:
       # …… 物品配置(见“通用配置/物品”)
     goal: 100
   b:
     item:
       # …… 物品配置(见“通用配置/物品”)
     goal: 250

ITEMS|物品

需要拥有特定物品 /can take

type: ITEMS
 items:
   # …… 所需物品(见“通用配置/所需物品”)

PERMISSION|权限

需要拥有特定权限

type: PERMISSION
 permission: my.server.permission

POSITION|位置

需要匹配特定位置

type: POSITION
 position:
   # …… 匹配的位置(见“通用配置/位置”)

SCOREBOARD_TAG|计分板标签

需要拥有(或不能拥有)特定计分板标签

type: SCOREBOARD_TAG
 tag_name: my_tag  # 标签名
 must_have: true  # 必须拥有或不能拥有

GROUP_COMPLETED|完成任务组

需要玩家完成特定任务组;组内的每个任务都至少完成了X次,则该任务组视为完成了X次

type: GROUP_COMPLETED
 group: group_id  # 所需任务组
 amount: 1  # 所需完成次数

QUEST_COMPLETED|完成任务

需要玩家完成特定任务

type: QUEST_COMPLETED
 model: model_id  # 所需任务模型
 amount: 1  # 所需完成次数
 end_types: [SUCCESS,FAIL]  # 仅计算特定结束类型的任务(默认仅限已完成的任务)
 in_time: 2 WEEK  # 只计算在上X个时间单位内的完成次数

QUEST_COMPLETED_OBJECT|完成任务目标

需要玩家完成特定任务目标

type: QUEST_COMPLETED_OBJECT
 model: model_id  # 任务模型
 branch: branch_id  # 分支
 object: object_id  # 所需任务目标
 check_active: true  # 允许检测进行中的任务
 amount: 1  # 所需完成次数
 end_types: [SUCCESS,FAIL]  # 仅限特定结束类型(默认仅限已完成的任务)
 in_time: 2 WEEK  # 只计算在上X个时间单位内的完成次数

QUEST_PLAYERS|任务玩家

需要有一定数量的玩家在任务中(只能用在活跃的任务中)

type: QUEST_PLAYERS
 amount: 5  # 所需玩家数

逻辑条件

LOGIC|逻辑

需要匹配逻辑表达式

type: LOGIC
 logic: {variable:test} >= 10  # 要解析的逻辑字符串

LOGIC_MONEY

需要匹配关于金钱的逻辑表达式

type: LOGIC_MONEY
 currency: VAULT  # the currency to use
 logic: {money} >= 10  # 要解析的逻辑字符串

LOGIC_QUEST_POINTS

需要匹配关于任务点数的逻辑表达式

type: LOGIC_QUEST_POINTS
 category: global  # 任务点数类别
 logic: {points} >= 10  # 要解析的逻辑字符串

LOGIC_XP_LEVEL

需要匹配关于玩家等级的逻辑表达式

type: LOGIC_XP_LEVEL
 logic: {level} >= 10  # 要解析的逻辑字符串

LOGIC_SCOREBOARD_VALUE

需要匹配关于玩家计分板值的逻辑表达式

type: LOGIC_SCOREBOARD_VALUE
 tag_name: tag  # 计分板目标
 score_name: score  # 目标分数名
 logic: {value} >= 10  # 要解析的逻辑字符串

时间条件

GAME_TIME|游戏时间

需要在游戏内特定的一天时间内

type: GAME_TIME
 start_ticks: 0  # from 0 to 23999
 end_ticks: 0  # from 0 to 23999 ; 可以在start之前

TIME_IN_DAY|天数

需要在现实时间的特定天数

type: TIME_IN_DAY
 start:
   hour: 10
   minute: 30
 end:  # 可以在start之前
   hour: 16
   minute: 30

TIME_IN_WEEK|周数

需要在现实世界内的特定周数

type: TIME_IN_WEEK
 start:
   day_of_week: MONDAY
   hour: 10
   minute: 30
 end:  # 可以在start之后
   day_of_week: FRIDAY
   hour: 16
   minute: 30

TIME_IN_MONTH|月份

需要在现实世界内的特定月份

type: TIME_IN_MONTH
 start:
   day_of_month: 16
   hour: 10
   minute: 30
 end:  # 可在start之前
   day_of_month: 31
   hour: 16
   minute: 30

TIME_IN_YEAR|年份

需要需要在现实世界内的特定年份

type: TIME_IN_YEAR
 start:
   month: FEBRUARY
   day_of_month: 16
   hour: 10
   minute: 30
 end:  # 可在start 之前
   month: APRIL
   day_of_month: 31
   hour: 16
   minute: 30

GUI

GUI

插件包含便捷的多阶段GUI系统。该系统位于/guis/

如果你安装了ProtocolLib,则插件会使用客户端数据包。这可以在你安装了很多与GUI交互的插件时,避免Spigot处理额外的事件并优化性能。

GUI设置

name: >  # GUI名称
   &a我的GUI
 type: CHEST_6_ROW  # GUi类型(见“通用配置/GUI类型”)
 
 contents:
   1:
     # …… GUI物品设置(见“GUI物品设置”)
   2:
     # …… GUI物品设置(见“GUI物品设置”)
 
 gui_show_status: [AVAILABLE,PROGRESS]  # GUI内允许使用的任务状态列表(留空则允许全部);值:AVAILABLE、PROGRESS、COOLDOWN、UNAVAILABLE、COMPLETED
 
 quests:  # GUI内的任务列表;任务会显示在第一个可用的栏位内
   - quest1
   - quest2
   - group:group_of_quests

物品设置

GUI物品也有不同的类型且可以放在GUI内的很多位置里。

图标

一些物品类型需要图标

icon:
   # …… 见“通用物品配置”

位置设置

决定物品在GUI内的哪个栏位出现。格式为页数,栏位栏位

页数和栏位从0开始。

locations: |
   0,1
   0,5
   1,34
   1,35
   6

在这个示例中,物品会出现在第0页的第1和5格第1页的34和35格有空位的页面的第36格

你也可以让物品“永存”。如果开启该选项,则每一页的同一位置都会显示该物品。

persistent: true
 locations: |
   1
   5
   6

覆盖点击设置

有些物品类型在你点击它们时会执行一些特有的效果。但你可以覆盖一些点击类型来执行额外的效果。

override_clicks:
   LEFT: # …… 一些操作 
   RIGHT: # …… 一些操作

可被覆盖的点击类型:

  • LEFT
  • SHIFT_LEFT
  • RIGHT
  • SHIFT_RIGHT
  • MIDDLE
  • NUMBER_KEY
  • NUMBER_KEY_1:不兼容ProtocolLib
  • NUMBER_KEY_2:不兼容ProtocolLib
  • NUMBER_KEY_3:不兼容ProtocolLib
  • NUMBER_KEY_4:不兼容ProtocolLib
  • NUMBER_KEY_5:不兼容ProtocolLib
  • NUMBER_KEY_6:不兼容ProtocolLib
  • NUMBER_KEY_7:不兼容ProtocolLib
  • NUMBER_KEY_8:不兼容ProtocolLib
  • NUMBER_KEY_9:不兼容ProtocolLib
  • DOUBLE_CLICK
  • DROP
  • CONTROL_DROP

操作列表:

# 以服务器身份执行指令
 CLICK_TYPE: COMMANDS_AS_SERVER say &a你好{player},say &a你今天过得怎么样
 
 # 以玩家身份执行指令
 CLICK_TYPE: COMMANDS_AS_PLAYER say &b我是{player},say &b今天是个好日子

其它设置

click_sound: ENTITY_PLAYER_LEVELUP  # 当玩家点击该物品时播放音效
 
 icon:  # 一些物品类型需要图标
   # …… 物品设置

物品类型

NONE|无

无类型物品,仅用于展示(或覆盖点击) / 需要图标

type: NONE  # 这是默认类型,所以你不需要设置这行选项</code>

=== DYNAMIC_BORDER_LINEAR|线性动态边界 ===
“边界”物品类型,这类物品会显示动态边界效果。动画延迟配置:<code>GCore/config.yml</code>:<code>dynamic_border_refresh_ticks: 5</code>。
<source lang="yaml">type: DYNAMIC_BORDER_LINEAR
 on_count: 2  # 同时活跃物品数
 icon_on:
   # …… 标记为活跃的位置图标
 icon_off:
   # …… 未标记为活跃的位置图标

QC_QUESTS|任务

显示任务物品 / 需要图标(默认)

type: QC_QUESTS
 quests: []  # 模型列表;已完成的任务会显示在其它任务状态后</code>

=== QC_QUEST_QUEUE|修改队列 ===
查看并修改队列状态 /  <code>无需图标</code>(物品可在config.yml内配置)
<source lang="yaml">type: QC_QUEST_QUEUE

QC_POINTS_RANKING|点数排名

查看玩家任务点数排名 / 无需图标(物品可在config.yml内配置)

type: QC_POINTS_RANKING
 category: global  # 任务点数类别

QC_GUI|打开GUI

点击时打开其它GUI / 需要图标

type: QC_GUI
 gui: my_gui  # GUI

QC_GUI_ACTIVE_QUESTS|活跃任务

建立并打开包含活跃任务的GUI / 需要图标

type: QC_GUI_ACTIVE_QUESTS

QC_GUI_POINTS_RANKING|点数排名GUI

点击打开查看玩家任务点数排名的GUI / 需要图标

type: QC_GUI_POINTS_RANKING
 category: global  # 任务点数类别

QC_TOGGLE_SETTING|切换设置

切换GUI内的特定设置

type: QC_TOGGLE_SETTING
 setting: JOURNAL  # 要切换的设置;值:JOURNAL、GPS、ACTIONBAR、BOSSBAR、TITLE、SCOREBOARD
 icon_on:
   # …… 开启设置时显示的图标
 icon_off:
   # …… 关闭设置时显示的图标