初めに
どうも餅わらびすとです。この記事では究極の機能、ScriptAPI(gametestとも言う)でのスラッシュ対応カスタムコマンドを作る方法について解説します。
実はカスタムコマンド自体はスラッシュ対応でなくともchatSendイベントを登録することで出来るのですが、これではプレイヤーのチャットからしか実行できません。しかもbetaバージョンにしかありません。
それでは少し不便なので、安定版で使え、更にそのアドオンさえ入れれば別アドオンのmcfunctionなどでも実行できる機能を今回は紹介します。
「まずScriptAPIについて知らない」、という方はこちらの、「【統合版アドオン】part-1│究極の機能、ScriptAPIを徹底解説!」で基本的な使い方を解説しているので、見ていない方は見てください。ここでは、リンクの記事の内容を理解していることを前提にしているので、記事を見た後に来るのを推奨します。
この記事が役に立つものになれば嬉しいです。
~今回の説明に使用させていただいたサイト~
・https://jaylydev.github.io/scriptapi-docs/#documentation
~前回~
・https://minecraft-mcworld.com/70591/
必要なクラスのインポート
始める前に前提として、カスタムコマンドを作るのに必要なクラスを@minecraft/serverモジュールからインポートします。
import { system } from "@minecraft/server";
今回使用するのはsystemです。
早速作る
といっても、書くことはこの、「【統合版アドオン】part-2│ScriptAPIで世界のイベントを自在にコントロールする方法」の、system版みたいな感じで書けます。
import { system } from "@minecraft/server";
system.afterEvents.scriptEventReceive.subscribe(ev => {
//処理
});
流れとしては、Systemにある、afterEventsプロパティにある、scriptEventReceiveプロパティにある、subscribeメソッドを実行しているというものです。
上にあるように、前回説明したような感じでevにはScriptEventCommandMessageAfterEventが入ります。
その中には、以下のようにプロパティがいくつかあります。
この機能でのコマンドは、このような構成になっています。
/scriptevent id message
scripteventは固定で、
idは、名前空間:識別子として設定できます。名前空間と識別子は自由です。
messageは、IDの後に記述できる他にも渡す情報があるときに追加できるものです。
これに沿って、例えば足し算をするscripteventをつくるとすると、
system.afterEvents.scriptEventReceive.subscribe(ev => {
const number = ev.message.split(" ");
if (ev.id === "math:plus") ev.sourceEntity.sendMessage(`${number[0]} + ${number[1]} = ${Number(number[0]) + Number(number[1])}`);
});
という具合で書けます。.split()はStringに標準である、引数の文字列で分けた配列を作るメソッドです。
Number()も、標準にある文字列を数値にする関数です。
このコードで、/scriptevent math:plus 1 2 を実行するとチャットに 1 + 2 = 3という結果が送信されます。
この機能を活用してあなただけの便利コマンドを作りましょう!
最後に
ここまで読んでいただきありがとうございます!役に立ったと思ってもらえたら嬉しいです。
なにか質問があるときはこちらのディスコードサーバーから受け付けています。どんな人も大歓迎!一応ここでも受け付けますが内容が複雑になると判断した質問はサーバーでしか受け付けません。
まだScriptAPIについて知らないことも少なくないので、間違っているところがあれば教えてほしいです。
それでは良いアドオンライフを!
コメント
自分用メモ
part-3.5 クラスからインスタンスを生成する
https://minecraft-mcworld.com/70591/
part-4.5 ScriptAPIでエンティティをセレクターで取得する
https://minecraft-mcworld.com/71042/