-
Notifications
You must be signed in to change notification settings - Fork 9
[JP] Option Tutorial
ゆっちゃん edited this page Dec 31, 2021
·
33 revisions
スクリプトに記述されたオプション構文から値を取得し、処理を実行する機能です。
(例えば"@message:text"というオプションから値"text"を取得し、その文字列をプレイヤーに送信することが可能です。
)
[実行結果] Result
[基礎クラス] Option.java
[派生クラス] BaseOption.java
OptionTagは、アノテーションと呼ばれる所謂注釈
です。
アノテーションにオプションの名前と構文を指定することができます。
また、オプションを作成する場合は必ずクラスにアノテーションを付与しなければいけません。
そして、下記の例では構文を@example:
に設定しています。
(例えばスクリプト作成時に"@example:TEST"と記述した場合は、値として"TEST"が取得できます。)
// オプションの名前(ID)を"example"に、構文を"@example:"に、説明を"<text>"に設定。
@OptionTag(name = "example", syntax = "@example:", description = "<text>")
public class Example extends BaseOption {
........
}
@OptionTag(name = "example", syntax = "@example:", description = "<text>")
public class Example extends BaseOption {
/**
* オプションの処理を実行します。
* @throws Exception オプションの処理内で例外が発生した時にスローされます。
* @return Result - 成功した場合はResult.SUCCESS
*/
@Override
protected Result isValid() throws Exception {
// プレイヤーに文字列を送信する。
getSBPlayer().sendMessage(getOptionValue());
return Result.SUCCESS;
}
}
クラスの詳細 <OptionIndex.java>
クラスの詳細 <ScriptBlockAPI.java>
// オプションの並び順は、ソートを行う際に重要になってきます。
// メソッドの仕様等は"OptionIndex"クラスを参照してください。
sbapi.registerOption(OptionIndex.<任意のメソッド>, <オプションのインスタンス生成処理>);
/**
*【補足1】
* 例: オプション"Cooldown"より先に"Example"を実行したい場合
*/
sbapi.registerOption(OptionIndex.before(Cooldown.class), Example::new); // "() -> new Example()"と記述することも可能
/**
*【補足2】
* 例: 一番先にオプション"Example"を実行したい場合
*/
sbapi.registerOption(OptionIndex.top(), Example::new); // "() -> new Example()"と記述することも可能
(位置を考えずに適当に追加を行うと、ソートを行った際に問題が発生する可能性があります。)
基本的には条件分岐->コスト消費型の条件分岐->処理のような流れになる様に追加することが望ましいです。
オプションの並び順は、オプションの一覧を参照してください。