How to make a pickaxe that can break only certain blocks? [duplicate]
Java Edition has the CanPlaceOn
and CanDestroy
NBT tags, which are used to restrict the blocks an item can be placed on and destroy respectively (in adventure mode). For example, the following commands give the player a stone block that can only be placed on grass and dirt, and a netherite axe that can only destroy pumpkins:
give @s stone{CanPlaceOn:["minecraft:grass","minecraft:dirt"]}
give @s netherite_axe{CanDestroy:["minecraft:pumpkin"]}
How can I do this in Bedrock Edition?
Browse more workarounds for getting/setting NBT in Bedrock Edition
The BE equivalents of these tags are minecraft:can_place_on
and minecraft:can_destroy
respectively. You can use these in the /give
and /replaceitem
commands using the final [components: json]
argument. For example, the syntax of /give
is:
give <player: target> <itemName: Item> [amount: int] [data: int] [components: json]
Note that unlike Java Edition, block names go inside an array named blocks
that goes inside minecraft:can_place_on
and minecraft:can_destroy
. Like so:
give @s stone 1 0 {"minecraft:can_place_on":{"blocks":["grass","dirt"]}}
give @s netherite_axe 1 0 {"minecraft:can_destroy":{"blocks":["pumpkin"]}}
You can also combine both minecraft:can_place_on
and minecraft:can_destroy
:
give @s iron_block 1 0 {"minecraft:can_place_on":{"blocks":["iron_block"]},"minecraft:can_destroy":{"blocks":["grass","dirt"]}}
* The namespace value minecraft:
is optional and can be omitted.
This syntax is called JavaScript Object Notation (JSON), which is a format similar to the NBT used in JE commands (technically SNBT). Objects are surrounded by braces ({
and }
), have keys and values separated by colons (:
), and have key-value pairs separated by commas (,
). Keys and strings are surrounded by double quotes ("
); arrays are surrounded by brackets ([
and ]
) and contain items delimited by commas (,
).