【統合版アドオン】part-3.5│クラスからインスタンスを生成する

スポンサーリンク

今回はちょい解説なので緩くいきます。

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


~今回の説明に使用させていただいたサイト~
https://jaylydev.github.io/scriptapi-docs/#documentation


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


突然ですが、プレイヤーにアイテムを渡す処理をScriptAPIでやりたいなって時、あると思うんですよ。
今回は、giveで渡すとアイテムを操作できないので、プレイヤーのインベントリから直接渡します。
そんな時、どうやって新たなアイテムを定義するのかっていう話です。

そんな時は、constructorという機能を使います。
この機能は特定のクラスにある、クラスからインスタンスを生成する機能です。
無いクラスもあります。

そのクラスでのconstructorの使い方は、こんな感じで書いてあります。(今回はItemStackのconstructor)

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2024-03-27-141213.png

見ての通り前にnewがあるfunctionみたいな感じで、引数があります。
今回の例で行くと、第一引数にアイテムのIDかItemTypeが入り、第二引数にアイテムの個数が入ります。
ちなみに自分が困ったことがあるので説明すると、ItemTypeはItemTypesクラスのgetというメゾットの返り値です。

これらの機能を使うには、生成に使うクラスをインポートする必要があります。

例:

import { ItemStack } from "@minecraft/server";

サンプルコード

チャットに.appleと入力したら説明欄にプレイヤーの名前が入ったリンゴを渡す

import { world, system, ItemStack, ItemTypes } from "@minecraft/server";

world.beforeEvents.chatSend.subscribe(ev => {
    ev.cancel = true;
    system.run(() => {
        if (ev.message === ".apple") {
            const apple = new ItemStack(ItemTypes.get("minecraft:apple"), 1);
            apple.setLore([ev.sender.name]);
            ev.sender.getComponent("minecraft:inventory").container.addItem(apple);
        }
    });
});

最後に

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

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

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

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

>> 次回の記事

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

コメント

  1. 自分用メモ
    part-3 カスタムUI
    https://minecraft-mcworld.com/70459/

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

コメント通報