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]

Did any of Metagaming Concepts board games make it to the PC? Did any of Metagaming Concepts board games make it to the PC?

Posted On: June 11, 2023
I loved Metagaming Concepts' board games like Ogre and WarpWar and always thought that they could have been made into PC games. Did any of Metagaming Concepts' board games make it to the PC...[More]


What is this treasure in Lara’s trophy collection? What is this treasure in Lara’s trophy collection?

Posted On: March 3, 2024
In the Croft Manor section of Tomb Raider 3, there is a hidden trophy room containing relics from Lara’s previous adventures. Most of these are references to previous games - fragments of the Scion ...[More]


How do I activate Sidons water bubble ability in TotK? How do I activate Sidons water bubble ability in TotK?

Posted On: May 17, 2023
I'm currently exploring the Water Temple, where I can reach the water wheels. Now, every guide I've seen so far tells me I need to use the water bubble ability on the water wheels, but none of...[More]


Is it a problem if the wall portion of a bedroom overlaps with another one in Dwarf Fortress? Is it a problem if the wall portion of a bedroom overlaps with another one in Dwarf Fortress?

Posted On: December 26, 2023
I've just recently learned that a bedroom should contain the walls too, but I only have a 1 tile wide wall between my bedrooms. Is it a problem if these room designations overlap? Question f...[More]


Help with Shadowheart approval. Help with Shadowheart approval.

Posted On: September 19, 2024
I am in Act 3 and trying to get Shadowhearts approval high enough to where i can romance, but i’m wondering if me long resting will make it so I cant have the romance scene? ive seen people say that...[More]


Lost connection in clan war attack Lost connection in clan war attack

Posted On: July 3, 2023
I just finished deploying dragons in a clan war attack when the connection was lost. Looking at the replay, I see that the server only registered deploying the first few dragons, which resulted in ...[More]


How can I train dexteriy for a heavy weapon user? How can I train dexteriy for a heavy weapon user?

Posted On: November 7, 2023
Dexterity is trained by using light weapons however I have one medium guy focued on using sabers. Is there any way to train dexterity other than switching to a light weapon for a while? This is a r...[More]


What genre is A Plague Tale: Requiem? What genre is A Plague Tale: Requiem?

Posted On: July 10, 2023
I am not a competitive gamer; when I play, I play for fun, playing casually and solving the puzzle that is the game. I have played A Plague Tale: Innocence as well as A Plague Tale: Requiem for alm...[More]


Are craftable traps a viable option? Are craftable traps a viable option?

Posted On: March 8, 2024
How viable of a weapon are the craftable traps for adventuring?The items I'm talking about:.Caltrops.Poisoned caltrops.Bear trap.Bleeding bear trap.Do they receive bonus damage from any of the basic d...[More]


What is a Turtle Goal in Rocket League? What is a Turtle Goal in Rocket League?

Posted On: May 7, 2023
While playing ranked doubles, I received 20 points for a turtle goal. . What is a turtle goal? Question from user HazyKingdom at gaming.stackexchange.com. Answer: When you score a goal by ...[More]