Check if player has item, if so remove it
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:
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"



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
