Think in signals before syntax
Quick decision table
| Use this | When it fits best | Typical example |
|---|---|---|
minecraft:model | The item has one fixed visual identity. | A guild pass, prop book, or single relic icon. |
minecraft:select | The item switches between named states. | Sealed, awakened, broken, cursed. |
minecraft:range_dispatch | A number crosses clear thresholds. | Charge stages, durability bands, progress levels. |
minecraft:condition | The result depends on true or false. | Selected in hand, using item, damaged, or not. |
Three easy wording tests
- If you describe the change with words like ritual, spent, or active, you probably want
select. - If you describe the change with numbers like 0-25-50-75, you probably want
range_dispatch. - If the item is either doing something or not doing it,
conditionis usually enough.
Examples that clarify the choice fast
1. A relic with story states
If the relic is sealed, glowing, or cracked, those are named states. That is a clean select case.
2. A staff that changes as it charges
If the staff moves through four visual charge bands, this is a range_dispatch problem because the shift happens over thresholds.
3. A map that changes only while selected
If the alternate look appears only when the player is actively holding or using it, a simple condition branch usually keeps the definition smaller and calmer.
Common overengineering mistakes
- Using
selectfor a single fixed prop because the branch structure feels future-proof. - Using
range_dispatchwhen the real change is not numeric but named. - Turning a binary state into too many branches and making debugging harder than the item deserves.
- Forgetting that a good fallback model is part of readability, not just a safety net.
Where the builder helps most
FAQ
Do I always need branching in 1.21.4+?
No. Many items are still just one direct model file. Branches only matter when the appearance really changes.
Can one item use both named states and numeric stages?
Yes, but that is exactly when you should slow down and choose the simplest outer branch first instead of stacking everything into the first draft.
Should I decide the branch before the texture exists?
Usually yes. The visual file can come later, but the logic question of how the item changes is worth answering early.