1

I'm making a map, and I want to have a command block or a command block set in the middle of the map that detects when a player picks up 5 diamonds and then replaces those diamonds with a bow and arrow. I've found the command

/execute if data entity @a {Inventory:[{id:"minecraft:diamond",Count:5b}]}

But the only way I've gotten that to work with anything is to do a /give @p command, but because I want this command to be working with multiple people on the map it won't work, How can I take this output and use it to both clear the diamonds and give 2 items?

1

1 Answer 1

0

You are very close. More magic from /execute can split each player's handling to themselves. Using scoreboard tags, we can then target the players individually.

execute
  as @a                                                             # Tell all players to do the following:
  if data entity @s {Inventory:[{id:"minecraft:diamond",Count:5b}]} # If I have 5 diamonds, continue, otherwise stop.
run tag @s add diamondBow                                           # give myself a recognizable tag.

Then, just run the following in order:

clear @a[tag=diamondBow] minecraft:diamond 5 # Clear the diamonds
give @a[tag=diamondBow] minecraft:bow        # Give the bow
give @a[tag=diamondBow] minecraft:arrow      # Give the arrow
tag @a[tag=diamondBow] remove diamondBow     # Get rid of the tag

Note that in order to work, all 5 diamonds must be stacked in one slot, not spread out through the inventory. If you want to detect 5 diamonds spread out anywhere in the inventory, replace the /execute command with the following two:

/execute as @a store result score @s itemsCleared run clear @s minecraft:diamond 0
/tag @a[scores={itemsCleared=5}] add diamondBow
2
  • You shouldn't do NBT inventory testing if you're looking to get an accurate count for a particular item, it's incredibly unreliable. Instead you should execute a clear command (clearing 0 items) and save the result to a scoreboard.
    – MBraedley
    Commented Nov 7, 2020 at 23:53
  • @MBraedley You are technically correct, I just used this method because it was the method the OP was using.
    – One 2 Many
    Commented Nov 8, 2020 at 0:15

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .