Check if player has item, if so remove it

Check if player has item, if so remove it - Crop unrecognizable gardener holding container with soil

I'm messing around with command blocks, and I'm wanting to try and make an XP vending machine. My idea is if you click a button with a Diamond in your hand, 1 diamond gets removed and you get x amount of XP.

Is this possible using command blocks? If so, what commands would I need to look at? I already know /xp myAmount @p, it's just the checking/removing of items I can't seem to get.



Best Answer

I'm a little late to this, but this is what I've had work for me: In Minecraft 1.8+ we have the /testfor command, you can use this to scan the players Inventory slots (all of them, or specific) for items:

example: diamond

/testfor @p {Inventory:[{id:"minecraft:diamond"}]}

to test for an exact amount of the required item include:

,Count:#b

within the confines of the "id" brackets

however, this will only search for players with a stack of the exact number you select, anything more or less will not fit the criteria; so for this application it's not useful.

For your vending machine to work properly I would recommend having this command in a clock nearby that tests for players in a specific range, so the finished command would look something like this:

/testfor @p[x,y,z,r=2] {Inventory:[{id:"minecraft:diamond"}]} 

(xyz are directly in front of the button)

have this connected to an output command block with a setblock command:

/setblock # # # unpowered_repeater 

dv for output direction needed from button

with a redstone dust on top connecting to a torch that powers this command:

/setblock # # # air

to clear the space if the criteria isn't met

then your repeater needs to be touching these commands:

/clear @p diamond 0 3
/xp amount @p

Image:Visual Proof of Concept

There are different variations you can have for the setblock changer, this is only a simple version for proof of concept.




Pictures about "Check if player has item, if so remove it"

Check if player has item, if so remove it - Crop satisfied woman applying mask on face at home
Check if player has item, if so remove it - Smiling woman with chess looking at camera
Check if player has item, if so remove it - Unrecognizable crop mechanic working with metal details in garage





Minecraft Bedrock - Test For Items In Inventory (Mobile/Xbox/PS4/Windows 10/Switch)




More answers regarding check if player has item, if so remove it

Answer 2

You will need 1 Button, 3 Command Blocks, and 1 Redstone Comparator.

First Command Block:

/clear @p minecraft:diamond 0 1

a comparator above the first CB and to 2 new CB.

Second Command Block:

/xp <NumberXp> @p

last Command Block:

/fill X Y Z X Y Z minecraft:command_block 0 replace {Command:"/clear @p minecraft:diamond 0 1"}

(The position XYZ is position of first CB, the shame position in the command. X=X)

Answer 3

Make an AND gate with as A the button and as B a very fast clock connected to a command block with

testfor @p {Invertory:[{id:"minecraft:diamond"}]} 

and as output

clear @p minecraft:diamond 1 and xp (amount of XP) @p

I haven't tried it, but it must be something like this. This also works if you are not holding the diamond but just have it in your inventory.

Sources: Stack Exchange - This article follows the attribution requirements of Stack Exchange and is licensed under CC BY-SA 3.0.

Images: Greta Hoffman, Gustavo Fring, Victoria Borodinova, Andrea Piacquadio