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 join distant stations in OpenTTD on Android? How to join distant stations in OpenTTD on Android?

Posted On: September 19, 2023
On desktop, if the feature is enabled and you place a station with Ctrl, the game will ask you if you want to connect it to an existing station nearby. How to do this on Android version of the game...[More]


N++ System Requirements on Mac N++ System Requirements on Mac

Posted On: March 17, 2024
I'm looking at N++ (https://store.steampowered.com/app/230270/N_NPLUSPLUS/) and it doesn't list the system requirements for a mac.This question is not about whether my specific computer can run N++, b...[More]


Screen flashing during the day in Watch Dogs Screen flashing during the day in Watch Dogs

Posted On: September 25, 2023
Sometimes textures and the screen start flashing while I play the game. But this only happen during the day. I'm playing Watch Dogs 1 from Steam. Question from user Diego Borba at stackexcha...[More]


How do I check if the HD textures are correctly loaded? How do I check if the HD textures are correctly loaded?

Posted On: February 15, 2023
Is there a way to check if the HD textures of Skyrim are correctly loaded in the game? I installed them without an error, but I'm not quite sure whether they are actually active, as I can't re...[More]


how exactly did nocturne become a woman? how exactly did nocturne become a woman?

Posted On: December 11, 2024
Not to be rude but im a divinity player interested in baulders gate so how exactly did it happen is it kinda like elder scrolls where a necromancer goes into a thingy becomes immoble eventually and th...[More]


If I have fewer than 6 Pokemon in my party, does each gain more EXP? If I have fewer than 6 Pokemon in my party, does each gain more EXP?

Posted On: March 24, 2024
I have a few weak Pokemon that I'm trying to level quickly. I'm wondering if it helps to keep less than 6 Pokemon in my party.Does that divide the total EXP gained by fewer Pokemon? Or does each Pokem...[More]


Is it possible to play Prop Hunt in GMod without CS:S? Is it possible to play Prop Hunt in GMod without CS:S?

Posted On: July 5, 2023
I've got GMod and just about every mainstream Valve game excepting CS:S. I'd like to play Prop Hunt, a GMod game mode. Is it possible to play Prop Hunt without CS:S, possibly by obtaining t...[More]


Is there a way to compare game prices in different stores? Is there a way to compare game prices in different stores?

Posted On: April 25, 2023
Sometimes I get games a bit cheaper on Humble Store or Fanatical, but I wonder: is there's a way to see if it's even cheaper somewhere else? Question from user HappyCat at gaming.stackexcha...[More]


Can you rename your ship? Can you rename your ship?

Posted On: March 18, 2024
After completing the tutorial in Helldivers 2, you are asked to name your ship. Is it possible to rename your ship later on?Question from user Stevoisiak at gaming.stackexchange.com.Answer:You can ren...[More]


Mass Effect 3, Is there nothing to scan for in the Ninmah Cluster? Mass Effect 3, Is there nothing to scan for in the Ninmah Cluster?

Posted On: May 21, 2023
I have had access to the Ninmah Cluster for a while now after doing some mission there. I have been around scanning a couple of times now between mission with out any luck. For all other areas where I...[More]