The way mining levels and preferred tools are assigned has changed significantly in 1.17. Making your tools and blocks interact properly now requires adding them to specific tags.
To define what tool is used to harvest your block, you need to add the block's identifier to a tag inside of tags/blocks/mineable
that corresponds to your tool (“pickaxe.json
”,“axe.json
”, etc.):
{ "replace": false, "values": [ "tutorial:example_ore_block", "tutorial:example_cobblestone_block" ] }
Fabric API also provides two additional tags fabric:mineable/sword
and fabric:mineable/shears
for blocks that can be harvested with a sword or shears. You put these tags in resources/data/fabric/tags/blocks/mineable/
.
To add a mining level requirement to your block that is under netherite, you'll need to add it to one of these three tags inside tags/blocks:
Stone or higher -> needs_stone_tool.json Iron or higher -> needs_iron_tool.json Diamond or higher -> needs_diamond_tool.json
Here we make our late-game ore variants require a diamond tool to harvest:
{ "replace": false, "values": [ "tutorial:example_late_game_ore", "tutorial:example_late_game_deepslate_ore" ] }
Fabric API provides dynamic tags for mining levels above diamond, as well as for wood (mining level 0). Dynamic mining level tags are in the format fabric:needs_tool_level_N
, where N
is the wanted tool level as an integer. For example, a mining level tag for netherite (mining level 4) would be fabric:needs_tool_level_4
. Dynamic tags are checked automatically. You put these tags in resources/fabric/tags/blocks/
.
{ "replace": false, "values": [ "tutorial:example_tough_block", "tutorial:example_netherite_anvil_block" ] }
The default mining level of blocks not modified with mining level tags is -1 (the hand mining level).
You will need to add your tool into the fabric tool tags to support modded blocks.
Example of adding a pickaxe to the pickaxes
tag:
{ "replace": false, "values": [ "tutorial:example_pickaxe" ] }