概要
タイトルの通りです。プレイヤーのインベントリ内に、指定のアイテムがあれば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形式で返します。