Think about the decision before the file
A quick mental map before you click anything
| Branch | Use it when | Best signal |
|---|---|---|
minecraft:model | The item only needs one fixed appearance. | No decision tree is actually happening. |
minecraft:select | One named property picks between branches. | You can describe the change with labels like pass, relic, broken, ritual. |
minecraft:range_dispatch | A number moves across ordered thresholds. | The item has stages, charge, wear, or progress. |
minecraft:condition | A true or false state changes the result. | The item is selected, being used, damaged, or otherwise binary. |
Worked example: one relic, three visible states
select territory.A safe workflow inside the builder
- Start with the file path you want under
assets/<namespace>/items/. - Pick the smallest branch type that genuinely fits the item.
- Define the fallback before adding fancy branches.
- Use the quick starts if you already know you are building a direct model, a state switch, or a threshold ladder.
- Copy the JSON, test one item in game, and only then duplicate the pattern across the pack.
When to switch tools
Common mistakes
- Using
selectjust because it feels modern, even though a directmodelfile would be simpler. - Skipping the fallback and making the file harder to read from the very first line.
- Mixing numeric and named expectations in one definition without deciding which property is really in charge.
- Naming the JSON file, the model path, and the internal team label so differently that nobody can tell what belongs together.
- Testing branches only in theory and copying them across many items before checking one live example.
FAQ
Do I always need select when CustomModelData is involved?
No. If the item only has one visual identity, a direct model file is cleaner. Use select when one definition really has to branch into multiple appearances.
When is range_dispatch the better choice?
Whenever the change is ordered and numeric: damage stages, charge levels, progress bars, or any threshold-like state.
Why begin with the fallback?
Because the fallback is the calm default reading of the item. Once that anchor is correct, every other branch becomes easier to evaluate.
Can I keep item commands separate from the model definition?
Yes, and that separation is one of the best parts of the new system. The visual file should not be forced to carry command concerns.
What if I only need a simple custom paper pass?
Then the answer is probably a direct minecraft:model file, not a bigger decision tree. Let the problem stay small when the item is small.