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]

What games are similar to Hogwarts Legacy? What games are similar to Hogwarts Legacy?

Posted On: April 10, 2023
Looking for suggestions of what to play after I’m done with this game. Are there any games similar that would have you following a story while doing quests or battles? Question from user Harm...[More]


What does glowing Mantis Blades mean? What does glowing Mantis Blades mean?

Posted On: December 31, 2023
I am playing with Mantis Blades and occasionally after eliminating an enemy the blades glow with a blue hue and have blue 'code' rising from them. I have no idea what this is telling me. Wh...[More]


How do I continue downloading a game in Steam while playing? How do I continue downloading a game in Steam while playing?

Posted On: May 28, 2015
I have many games on Steam and many more I will buy, but I have a problem and I hope you can point me a solution.When I download a game, is it possible to launch and play a single player game under St...[More]


How can I play Quake on OS X 10.7 or above? How can I play Quake on OS X 10.7 or above?

Posted On: February 9, 2023
Is there any option for native playing Quake on OS X 10.7 and above?Question from user LuisEspinoza at gaming.stackexchange.com.Answer:Yes there is actually a way to play Quake but you'll need the CD ...[More]


What are Gibdo Guts useful for? What are Gibdo Guts useful for?

Posted On: August 9, 2023
Gibdo Guts are a rare drop from Gibdos (10%) and Moth Gibdos (20%), but they are much less useful than Gibdo Bones, which are much more common. They have a sale value of 2, which is one ruppee less th...[More]


Is there a way to fully load a turret in Factorio? Is there a way to fully load a turret in Factorio?

Posted On: March 18, 2023
For the defense of my factory I use Gun Turrets. I've got a belt with magazines running past them. However when there are a lot of biters/spitters coming the belt can't provide fast enough so ...[More]


What are the rules for mega evolutions in Pokemon go? What are the rules for mega evolutions in Pokemon go?

Posted On: January 15, 2023
The rules for Pokémon go's mega evolutions have changed over time. There doesn't seem to be any one place in the publisher, Niantic, states all the rules, mechanics and benefits for meg...[More]


“Rest in the Crèche” My Lae’zel cosplay “Rest in the Crèche” My Lae’zel cosplay

Posted On: February 9, 2025
Question from user Frau_Haku at BaldursGate3 at reddit.com.Answer:I was really looking forward to Sunday to share this work! The photographer and I wanted to show Lae’zel from many angles, quite vul...[More]


How do you pet Bubba with a controller? How do you pet Bubba with a controller?

Posted On: August 30, 2023
When playing Holocure on keyboard you can pet Amelia's dog Bubba by pressing P while standing next to him. However, I'm playing on Steam Deck. Is there a way to pet Bubba when playing with a c...[More]


Can a cable be used to connect the official Xbox wireless headset to an Xbox Series controller? Can a cable be used to connect the official Xbox wireless headset to an Xbox Series controller?

Posted On: March 6, 2024
Can I use a cable to connect an Xbox Wireless Headset (the official one) to the standard Xbox wireless controller? USB-C to 3.5mm TRRS I guess?Question from user Sam at gaming.stackexchange.com.Answer...[More]