Skip to content

[JP] ScriptKey Tutorial

ゆっちゃん edited this page Dec 31, 2021 · 10 revisions

ScriptKeyの概要

スクリプトを判別するためのキーです。
叩く、壊す、踏む、当てる等の条件の追加も"ScriptKey"を利用しています。
クラスの詳細 <ScriptKey.java>

ScriptKeyの追加

インスタンスを生成した時点で追加されます。
追加した時点で、パーミッション、コマンド、Tab保管に自動で反映されます。
トリガーの作成、初期パーミッションの権限振り分け(plugin.yml)の設定等は各自のプラグインで行ってください。

// HOGE というキーを追加
public static final ScriptKey HOGE = new ScriptKey("hoge");

トリガーを追加する

トリガーの実装例 <listener/trigger/****Trigger.java>
トリガーリスナーの詳細 <TriggerListener.java>

// 追加
TriggerListener.register(new HogeTrigger(plugin));

// 実装
public class HogeTrigger extends TriggerListener<HogeBlockEvent> {

    // スクリプトキーを生成
    public static final ScriptKey HOGE = new ScriptKey("hoge");

    public HogeTrigger(@NotNull Plugin plugin) {
        // スクリプトキーとイベントの優先度を指定
        super(plugin, HOGE, EventPriority.NORMAL);
    }

    @Override
    @Nullable
    protected Trigger create(@NotNull HogeBlockEvent event) {
        // トリガーを生成 プレイヤーとブロックとイベントを渡す
        // NULLを返すことでトリガーの処理をキャンセルします
        if (...) {
          return null;
        }
        return new Trigger(event.getPlayer(), event.getBlock(), event);
    }

    // 任意継承
    // パーミッション判定、イベント生成、スクリプト実行のタイミングで呼ばれます。
    @Override
    @NotNull
    protected Result handle(@NotNull Trigger trigger) {
        switch (trigger.getProgress()) { // プロセスの進行度を取得
            case PERM: // パーミッションの判定
                break;
            case EVENT: // トリガーイベントの生成
                Optional<TriggerEvent> triggerEvent = trigger.getTriggerEvent(); // イベントの取得
                break;
            case READ: // スクリプトの実行
                Optional<ObjectMap> tempMap = trigger.getTempMap();
                ScriptRead scriptRead = (ScriptRead) tempMap.get(); // 実行クラスの取得
                break;
        }
        // デフォルトの戻り値の"Result.SUCCESS"を返す(Result.FAILURE を返すとプロセスが中断されます。)
        return super.handle(trigger); 
    }
}

Clone this wiki locally