注目キーワード

【マイクラ統合版】プレイヤーのインベントリ内のアイテムの有無を判定する関数【ScriptAPI】

概要

タイトルの通りです。プレイヤーのインベントリ内に、指定のアイテムがあればTrueを、そうでなければFalseを返す関数を作ってみました。

function has_item(itemName, player){
    for (let i=0;i<=35;i++){
        if(player.getComponent("minecraft:inventory").container.getSlot(i).typeId == itemName){
            return true;
        }
    }
    return false;
}

ご覧の通り、アイテムのidとplayerを引数にとります。

具体例

以下は、この関数の使用例です。プレイヤーのインベントリ内にリンゴがあれば「リンゴを持っています」と発し、そうでなければ「リンゴを持っていません」を発します。

server.system.afterEvents.scriptEventReceive.subscribe(ev => {
    if(ev.id == "lq:test"){
        let player = ev.sourceEntity;
        if(has_item("minecraft:apple",player)){
            player.runCommand("say リンゴを持っています");
        }else{
            player.runCommand("say リンゴを持っていません");
        }
    }
})

プレイヤーのフラグ管理に使うことができそうです。

おまけ

これを応用して、現在持っているアイテムの個数を取得することができそうです。

function get_item_amount(itemName, player){
    let amount = 0
    for (let i=0;i<=35;i++){
        let container_item = player.getComponent("minecraft:inventory").container.getSlot(i)
        try{
            if(container_item.typeId == itemName){
                amount += player.getComponent("minecraft:inventory").container.getSlot(i).amount;
            }   
        }
        catch(error){
            continue
        }
    }
    return amount;
}

これは先と同様にアイテムのidとplayerを引数として現在インベントリ内にあるアイテムの個数をint形式で返します。

close up photo of programming of codes
最新情報をチェックしよう!