#How to track if a player has a specific item in his inventory.

1 messages · Page 1 of 1 (latest)

glacial frost
#

^^^

lean storm
#
let inv = player.getComponent('inventory').container;

Then loop over inventory:

if (inv.emptySlotsCount === 0) return false; // there inv is empty
for (let i = 0; i < inv.size;  i++) {
  // code
}

Then check if the typeId matchs.

let item = inv.getItem(i);
if (!item || item.typeId !=== "minecraft:diamond") continue; // skip
return true; // they have a diamond!
#

Now piece the script together

#

Its a pretty simple but efficient way to make sure you learn instead of just copy pasting

vale jasper
glacial frost
# lean storm ```js let inv = player.getComponent('inventory').container; ``` Then loop over i...
function keepCompassInSlot() {
    system.runInterval(() => {
        world.getPlayers().forEach(player => {
            let inv = player.getComponent('minecraft:inventory').container;

            if (inv.emptySlotsCount === inv.size) {
                return;
            }

            let hasRecoveryCompass = false;

            for (let i = 0; i < inv.size; i++) {
                let item = inv.getItem(i);

                if (!item || item.typeId !== "minecraft:recovery_compass") continue;


                hasRecoveryCompass = true;
                break;
            }

            if (!hasRecoveryCompass) {
                console.log("Player does not have a recovery compass. Giving one...");
                player.runCommandAsync('/give @s minecraft:recovery_compass 1 0 {"minecraft:item_lock":{"mode":"lock_in_inventory"},"minecraft:keep_on_death":{}}')
            } else {
            }
        });
    }, 20);
}

Do you know whats wrong by any chance it doesn't do the runcommand when I don't have the recovery_compass

opaque radish
#

also you can just use .addItem()

#

and make an itemStack with the lock in slot, and deep on death

lean storm
lean storm
glacial frost
# lean storm `player.runCommand()` ===> ```js let item = new ItemStack("recovery_compass"); /...
function keepCompassInSlot() {
    system.runInterval(() => {
        world.getPlayers().forEach(player => {
            let inv = player.getComponent('minecraft:inventory').container;

            if (inv.emptySlotsCount === inv.size) {
                return;
            }

            let hasRecoveryCompass = false;

            for (let i = 0; i < inv.size; i++) {
                let item = inv.getItem(i);

                if (item && item.typeId === "minecraft:recovery_compass") {
                    hasRecoveryCompass = true;
                    break;
                }
            }

            if (!hasRecoveryCompass) {
                let compassItem = new ItemStack("minecraft:recovery_compass");
                compassItem.keepOnDeath = true;
                compassItem.lockMode = "inventory";

                let success = inv.addItem(compassItem);
                if (!success) {
                }
            }
        });
    }, 20);
}```

why won't this work
vale jasper
vale jasper
#
import { world, system, ItemStack } from '@minecraft/server';

system.runInterval(() => {
   for (const player of world.getPlayers()) {
      const inventory = player.getComponent('inventory').container;
      let recoveryCompass = false;

      for (let i = 0; i < inventory.size; i++) {
         const item = inventory.getItem(i);
         if (item && item.typeId === 'minecraft:recovery_compass') {
            recoveryCompass = true;
            break;
         }
      }

      if (!recoveryCompass) {
         const itemStack = new ItemStack('minecraft:recovery_compass', 1);
         itemStack.keepOnDeath = true;
         itemStack.lockMode = 'inventory';
         inventory.addItem(itemStack);
      }
   }
});

Simple as this can work

glacial frost
vale jasper