【統合版アドオン】part-4.5│ScriptAPIでエンティティをセレクターで取得する

スポンサーリンク

初めに

どうも餅わらびすとです。ScriptAPIでは、普通セレクターでエンティティを取得する機能は備わっていませんが、今回はその機能を作ったのでコードを紹介します。

自分が何か月か前に、カスタムコマンドを作ろうとした際にScriptAPIでセレクターでの取得に悩んでいたのを思い出したので作りはじめました。やり方が書いてあるコードを見せてもらったこともありますが、理解できなかったのでその時は諦めてしまいました。これは最近独自に考えたものです。役に立ったら嬉しいです。

「まずScriptAPIについて知らない」、という方はこちらの、「【統合版アドオン】part-1│究極の機能、ScriptAPIを徹底解説!」で基本的な使い方を解説しているので、見ていない方は見てください。ここでは、リンクの記事の内容を理解していることを前提にしているので、記事を見た後に来るのを推奨します。(ScriptAPI知らない方はまずここに来ないかもしれませんが…)

~前回~
https://minecraft-mcworld.com/70889/

コード

function getSelectorEntities(selector, source =  "dimension") {
    let selectorEntities = [];
    for (const dimensionName of ["overworld", "nether", "the_end"]) {
        const dimension = world.getDimension(dimensionName);
        const id = "ID-" + Math.floor(Math.random() * 1000000000000000);
        if (source === "dimension") dimension.runCommand(`tag ${selector.slice(0, 1) + selector.slice(2)} add ${id}`);
        else if (source instanceof Entity) source.runCommand(`tag ${selector.slice(0, 1) + selector.slice(2)} add ${id}`);
        selectorEntities = selectorEntities.concat(dimension.getEntities({ tags: [id] }));
        for (const entity of selectorEntities) { entity.removeTag(id) }
    }
    return selectorEntities;
}

説明

getSelectorEntities(selector, source?): Entity[]

引数
selector: string
    セレクターです。@の次にはピリオドなど、何かしら1文字をいれてください(例:@.e[type=chicken])
オプション source: Entity
    取得元です。Entityを入れた場合、そのエンティティを実行元として@sが使えたりします。入れなかった場合ワールドから取得されます。

返り値 Entity[]

説明
引数に入れたセレクターに当てはまるエンティティの配列が返ってきます。
使うには、world,system,Entity3つのインポートが必要です。

最後に

ここまで読んでいただきありがとうございます!役に立ったと思ってもらえたら嬉しいです。

なにか質問があるときはこちらのディスコードサーバーから受け付けています。どんな人も大歓迎!一応ここでも受け付けますが内容が複雑になると判断した質問はサーバーでしか受け付けません。

まだScriptAPIについて知らないことも少なくないので、間違っているところがあれば教えてほしいです。

それでは良いアドオンライフを!

それでは良いアドオンライフを!>> 次回の記事

※投稿記事に含まれるファイルやリンクにより発生した被害についてクラフターズコロニーは責任を取りません
投稿通報

コメント

  1. 自分用メモ
    part-4 自分だけのコマンドを作ろう!
    https://minecraft-mcworld.com/70889/

    part-5 ScriptAPIでタグによってチャットを彩ろう!
    https://minecraft-mcworld.com/75095/

    • ここはコメントだし、違うところに書いたほうが良いのでは?

コメント通報