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]

Hogwarts Legacy Help 100% please Hogwarts Legacy Help 100% please

Posted On: July 29, 2023
Can somebody please walk me through what I'm missing for the platinum? I'm missing 1 revelio page in hogwarts and I don't know which one it is, I've tried guides and everything, I just...[More]


Dwarves keep dumping seeds in a corner? Dwarves keep dumping seeds in a corner?

Posted On: January 17, 2023
For some reason, the dwarves keep putting a lot of seeds in once specific corner. Is this supposed to happen?Question from user null at gaming.stackexchange.com.Answer:The answer is that there's also ...[More]


What is this magic circle in Castlevania: Dawn of Sorrow? What is this magic circle in Castlevania: Dawn of Sorrow?

Posted On: April 22, 2024
While I was farming for Alamaric Sniper and Ghost Dancer souls, I had something happen where it looked like a Sniper was going to give me a soul, but I didn't actually get one. Instead, this red magic...[More]


How do I make food in Planet Crafter? How do I make food in Planet Crafter?

Posted On: April 29, 2024
In The Planet Crafter, I'm building my base, and I have enough food for now. I don't have any machines to make food, but I know I'm going to eventually run out. I guess that, like with water, I'm goin...[More]


What does this H buff icon mean? What does this H buff icon mean?

Posted On: September 21, 2023
Today I was doing No Rest for the Wicked and noticed this H icon in my buffs area. It's not the icon for edge, grit, or rush for certain, it's some kind of fourth icon that I've never seen...[More]


Are the Poker Night games rigged? Are the Poker Night games rigged?

Posted On: February 7, 2023
I've played poker in real life and I've played Poker Night at the Inventory (but not Poker Night 2). I have the feeling that the Poker Night engine manipulates the deck to give players a mo...[More]


In Factorio is it yet possible to blueprint Concrete? In Factorio is it yet possible to blueprint Concrete?

Posted On: February 27, 2023
I'd like to know if it is somehow possible to include Concrete in a blueprint. When I select an area with my blueprint, the ground is ignored. Do i need to hold a special key, or is it just not po...[More]


Is hacking spectres in the game mode Attrition recommended? Is hacking spectres in the game mode Attrition recommended?

Posted On: May 17, 2023
When hacking a spectre in the game mode 'Attrition', you'll get points (about 4) for that and nearby spectres change sides and start following you. But they now can be killed by the enemy ...[More]


Pet bonus from Mogdrogens Pact doesnt show on pet bonuses? Pet bonus from Mogdrogens Pact doesnt show on pet bonuses?

Posted On: August 2, 2023
On my skill tree under the Mogdrogen's Pact, I have listed "bonus to all pets: 106% physical damage". But on the character window under pet bonuses, damage have a 0% displayed. The...[More]


Is it possible to jump over the flag-pole in Super Mario Bros? Is it possible to jump over the flag-pole in Super Mario Bros?

Posted On: August 16, 2019
When I was younger, I remember there was a persistent rumour that claimed that under certain circumstances it was possible to jump completely over the flagpole at the end of each level. . Every tim...[More]