マイルストーンシステム
マイルストーンシステムの概要と詳しい使い方について説明しています。
概要
マイルストーンは, シナリオの進行状況や, サーバの状態をフラグで管理するためのシステムです。
進行状況に応じてマイルストーンを設定することで, それに応じたシナリオの場合分けを行えます。
マイルストーンは文字列型のフラグであり, 任意の一意な名前を持ちます。
例:
scenarios:
# マイルストーン "villager_killed" を設定
- type: execute
action: milestone
with:
name: "villager_killed"
# マイルストーン "villager_killed" が設定されていることを要求する。
- type: require
action: milestone
with:
name: "villager_killed"
マイルストーンのスコープ
スコープは, 設定されたマイルストーンがどのような範囲で有効かを管理するものです。 すべてのマイルストーンは, シナリオシステムの汚染を避けるため, スコープを持っています。 そのスコープから外れると, その中で設定されたマイルストーンは破棄されます。
通常は自動でスコープが設定されますが, 明示的に指定することもできます。
-
シナリオグローバル(
SCENARIO_GLOBAL
) スコープ
プラグインの特定のシナリオファイル内で有効なマイルストーンです。
シナリオのアンロードやプラグインのアンロード時に破棄されます。 -
トリガ・事前(
TRIGGER_BEFORE
) スコープ
トリガの事前シナリオ内で有効なマイルストーンです。
事前シナリオの終了時に破棄されます。 -
トリガ・事後(
TRIGGER_AFTER
) スコープ
トリガの事後シナリオ内 で有効なマイルストーンです。
事後シナリオの終了時に破棄されます。 -
メインシナリオ(
MAIN_SCENARIO
) スコープ
メインシナリオ内で有効なマイルストーンです。
メインシナリオの終了時に破棄されます。
マイルストーンの使い方
マイルストーンへは2つの方法でアクセスできます。
- シナリオのアクションから使用する。
milestone アクションを使用します。 - プラグインの Java コードから使用する。
プラグインの Java コードからマイルストーンを設定するには, MileStoneManager を使用します(ドキュメント未作成)。
アクションによるマイルストーンの設定
マイルストーンを設定するには, milestone アクションを
アクション実行(execute
) タイプで使用します。
# マイルストーン "villager_killed" を設定
- type: execute
action: milestone
with:
name: "villager_killed"
マイルストーンの活用
マイルストーンは, シナリオの進行状況を管理するという特性上, 様々な活用法が想定されます。以下に, その一例を示します。
マイルストーンによるシナリオの分岐
マイルストーンを使用することで, シナリオの進行状況に応じて追加のアクションを実行したり, 逆に特定のアクションをスキップさせられます。
これを実現するためには, シナリオの条件付き実行機能を使用します。
マイルストーン villager_killed
が設定されている場合のみ, 村人をキルするアクションを実行する例を示します。
また, 以下の例ではトリガの事前 シナリオ機能を使用しています。
on:
# 手動実行時に発火
- type: manual_dispatch
# 以下, 「事前シナリオ」機能を使用し, 手動実行時のみに実行されるシナリオを設定する。
before:
# マイルストーン "villager_killed" を設定
- type: execute
action: milestone
with:
name: "villager_killed"
# プラグインのロード時に発火
- type: on_load
scenario:
# 手動実行時にのみ村人をキルする。
- type: execute
action: entity_death
with:
target: "@e[type=villager,tag=hoge]"
# マイルストーン "villager_killed" が設定されている場合のみ実行
runif:
type: milestone
with:
name: "villager_killed"
# 村人がキルされていることを確認
- type: require
action: entity_death
with:
target: "@e[type=villager,tag=hoge]"