Is there any way in Minecraft to detect who deposited a diamond into a chest using command blocks?

[BACK]
Is there any way in Minecraft to detect who deposited a diamond into a chest using command blocks?
Posted On: April 26, 2024

So far, I've been able to detect when a diamond is placed into a chest's inventory but how can I detect who placed that diamond?


I'd prefer not to use the nearest player because someone else could potentially be falsely identified. (I have a command chain that trades players emeralds in exchange for experience levels and it also sometimes robs random nearby players.).


Some context: I'm making a race to be the first to deposit a diamond. I could constrain the player accessing the chest and just check who is standing on a block, but if I did that, I could also just test the player's inventory directly. But that seems boring. Adding the chest adds to the drama, I feel. Like, if someone fumbles last minute and deposits dirt on accident, someone else could easily win, which is fun.


My command chain is currently:.


if block x y z chest{Items:[{id:"minecraft:diamond"}]}.


say Diamond Detected.


Edit: The diamonds are mined and as such, I will not necessarily be able to tag them for each player. Another user suggested I could scan the inventories of the users at every tick and tag the diamonds in their inventory with their name. I don't know how to do this, though I believe this is the direction where I will find my answer.


Question from user Robert Talada at gaming.stackexchange.com.


Answer:

If you don't know who has each diamond.


Minecraft 1.20.5 changed the syntax of some of the commands a bit but the concept behind this answer should still be valid.


Step one.


Give each player a unique scoreboard ID. See this related question for how to do that.


Step two.


Run the following command in a repeating, always active command block:.


execute as @e[type=item,nbt={Item:{id:"minecraft:diamond"}}] run data merge entity @s {Item:{tag:{Unclaimed:1b}}.


This gives each diamond item on the ground a custom Unclaimed tag, allowing you implement Step 3 without 30+ command blocks per player.


Step three.


Once for each player who could be playing the map, run in a repeating command block:.


clear @a[scores={Id=1}] diamond{Unclaimed:1b} 1.


and then, in a conditional chain command block that the repeating command block is pointing to.


give @a[scores={Id=1}] diamond{PlayerOwns:1b} 1.


Repeat this for each player, using scores={Id=2} and PlayerOwns:2b for the second player and so on.


Step four.


Now that each diamond has a tag describing whose it is, you can use the technique described in ExpertCoder14's answer to determine who put a diamond in the chest.


This has a known bug that if Alice puts a diamond in a container, and then Bob takes the diamond out of the container (and never drops and picks it up again), the diamond is still interpreted as belonging to Alice -- but I actually like that if I understand what you're doing correctly; if you stole someone else's diamond from a chest instead of mining your own, that means you're trying to cheat… karma!.


If you want a more seamless experience, you may want to interest yourself in player inventory modification. With the method above, the diamond is visibly replaced by a different one, you can use this to make a seamless replacement.


Answer from user pppery at gaming.stackexchange.com.


[BACK]
Is there any way in Minecraft to detect who deposited a diamond into a chest using command blocks?
Posted On: April 26, 2024

So far, I've been able to detect when a diamond is placed into a chest's inventory but how can I detect who placed that diamond?


I'd prefer not to use the nearest player because someone else could potentially be falsely identified. (I have a command chain that trades players emeralds in exchange for experience levels and it also sometimes robs random nearby players.).


Some context: I'm making a race to be the first to deposit a diamond. I could constrain the player accessing the chest and just check who is standing on a block, but if I did that, I could also just test the player's inventory directly. But that seems boring. Adding the chest adds to the drama, I feel. Like, if someone fumbles last minute and deposits dirt on accident, someone else could easily win, which is fun.


My command chain is currently:.


if block x y z chest{Items:[{id:"minecraft:diamond"}]}.


say Diamond Detected.


Edit: The diamonds are mined and as such, I will not necessarily be able to tag them for each player. Another user suggested I could scan the inventories of the users at every tick and tag the diamonds in their inventory with their name. I don't know how to do this, though I believe this is the direction where I will find my answer.


Question from user Robert Talada at gaming.stackexchange.com.


Answer:

If you don't know who has each diamond.


Minecraft 1.20.5 changed the syntax of some of the commands a bit but the concept behind this answer should still be valid.


Step one.


Give each player a unique scoreboard ID. See this related question for how to do that.


Step two.


Run the following command in a repeating, always active command block:.


execute as @e[type=item,nbt={Item:{id:"minecraft:diamond"}}] run data merge entity @s {Item:{tag:{Unclaimed:1b}}.


This gives each diamond item on the ground a custom Unclaimed tag, allowing you implement Step 3 without 30+ command blocks per player.


Step three.


Once for each player who could be playing the map, run in a repeating command block:.


clear @a[scores={Id=1}] diamond{Unclaimed:1b} 1.


and then, in a conditional chain command block that the repeating command block is pointing to.


give @a[scores={Id=1}] diamond{PlayerOwns:1b} 1.


Repeat this for each player, using scores={Id=2} and PlayerOwns:2b for the second player and so on.


Step four.


Now that each diamond has a tag describing whose it is, you can use the technique described in ExpertCoder14's answer to determine who put a diamond in the chest.


This has a known bug that if Alice puts a diamond in a container, and then Bob takes the diamond out of the container (and never drops and picks it up again), the diamond is still interpreted as belonging to Alice -- but I actually like that if I understand what you're doing correctly; if you stole someone else's diamond from a chest instead of mining your own, that means you're trying to cheat… karma!.


If you want a more seamless experience, you may want to interest yourself in player inventory modification. With the method above, the diamond is visibly replaced by a different one, you can use this to make a seamless replacement.


Answer from user pppery at gaming.stackexchange.com.


[BACK]

How to activate all engines with a single button push? How to activate all engines with a single button push?

Posted On: January 20, 2023
In Kerbal Space Program (XBox One), my son likes to design rockets with multiple boosters. However, using the controller to separately activate each engine while launching usually results in launchpad...[More]


Missing Field Guide Pages in Hogwarts Legacy Missing Field Guide Pages in Hogwarts Legacy

Posted On: August 15, 2023
Missing two from the Bell tower zone, one from the Astronomy, and one from the Great Hall. I went through two guides step by step for the Great Hall and then a video guide step by step for the Great H...[More]


Can you keep a piglin from turning into a zombified-piglin in the overworld? Can you keep a piglin from turning into a zombified-piglin in the overworld?

Posted On: March 2, 2023
Is it possible for you to keep a piglin unzombified in the overworld, whether it be through use of commands or otherwise? Question from user 12 rhombi in grid w no corners at gaming.stackexchange.c...[More]


How do I reach the top of this tower of The Erebus Reactor? How do I reach the top of this tower of The Erebus Reactor?

Posted On: May 10, 2023
In Episode 2 Mission 6: The Erebus Reactor of Dusk there's collection of tall towers with metal girders connecting them all through the stage. There's quite a few items found throughout these ...[More]


Agitated Giant Thrips: how to properly deal with them in Dwarf Fortress? Agitated Giant Thrips: how to properly deal with them in Dwarf Fortress?

Posted On: April 25, 2023
The number one cause of death on my Fortress is: attack by flying insects. As they don't activate the Cage Traps, because they don't touch the ground, which are the possible ways to deal wi...[More]


Mass Effect 3 Where is this terminal? Mass Effect 3 Where is this terminal?

Posted On: May 3, 2023
I have to activate the terminal for the Hanar Diplomat quest, but I can't seem to find it? The only terminal I can find in the security checkpoint area (I'm standing next to it on the map) can...[More]


How do supercharged slots work? How do supercharged slots work?

Posted On: April 19, 2024
I came back to No Man's Sky and a few things regarding the inventory have changed in the last months. Now I have some violet slots that are marked as supercharged.As I understood, the tech installed i...[More]


Do the tiles in Bounce n Trounce fall in a random order? Do the tiles in Bounce n Trounce fall in a random order?

Posted On: October 17, 2023
In the minigame Bounce 'n' Trounce, do the floor tiles fall away in a random order? Or is there a predetermined order every time? Question from user Stevoisiak at stackexchange. Answer: ...[More]


Is there an easier way to fuse materials to a melee weapon in ToTK? Is there an easier way to fuse materials to a melee weapon in ToTK?

Posted On: May 15, 2023
When shooting an arrow, there's a single-button prompt to fuse a material from your inventory to the arrow. However, so far, the only way I've found to fuse a material (monster horn, etc) to y...[More]


What programming language or game engine is Hogwarts Legacies written in? What programming language or game engine is Hogwarts Legacies written in?

Posted On: July 20, 2023
I was curious as to what was used to make this game. What programming language or game engine was used to create Hogwarts Legacies? Question from user Shaun Roselt at stackexchange. Answer: ...[More]