Your cart is empty
Looks like the spiders padded through here. Pick a plugin and it will show up here. Continue shoppingUpdate old custom_model_data override packs to the 1.21.4+ items/ format, with every custom model kept.
A 1.21.4+ pack and a mapping table
| Item | Overrides | Custom models | Result |
|---|---|---|---|
| minecraft:paper | 24 | 24 | OK |
| minecraft:bow | 9 | 3 | OK, pulling kept |
| minecraft:diamond_sword | 6 | 6 | OK |
Plus mapping.csv and mapping.json for plugin configs.
Converts custom_model_data overrides (1.14 – 1.21.3) into the item model definitions Minecraft reads since 1.21.4. Your CustomModelData values stay the same, and the pack can keep working on older versions.
Before 1.21.4, a pack chose custom item models with an overrides list inside the item's model, for example assets/minecraft/models/item/paper.json. Each override had a predicate such as "custom_model_data": 1001 and the model to use. Minecraft 1.21.4 replaced this with item model definitions: one file per item in assets/minecraft/items/ that describes, as a tree, which model to show. Overrides are no longer read, which is why old packs suddenly show plain paper or sticks.
// assets/minecraft/models/item/paper.json
{
"parent": "minecraft:item/generated",
"textures": { "layer0": "minecraft:item/paper" },
"overrides": [
{ "predicate": { "custom_model_data": 1001 }, "model": "mypack:item/ruby" },
{ "predicate": { "custom_model_data": 1002 }, "model": "mypack:item/sapphire" }
]
}
// assets/minecraft/items/paper.json
{
"model": {
"type": "minecraft:range_dispatch",
"property": "minecraft:custom_model_data",
"entries": [
{ "threshold": 1001, "model": { "type": "minecraft:model", "model": "mypack:item/ruby" } },
{ "threshold": 1002, "model": { "type": "minecraft:model", "model": "mypack:item/sapphire" } }
],
"fallback": { "type": "minecraft:model", "model": "minecraft:item/paper" }
}
}
A range_dispatch picks the entry with the highest threshold that is less than or equal to the item's value, which is exactly how the old "greater than or equal" predicates behaved once sorted.
| Old predicate | 1.21.4+ equivalent |
|---|---|
custom_model_data |
range_dispatch on minecraft:custom_model_data
|
pulling, blocking, throwing, tooting
|
condition on minecraft:using_item
|
pull (bow) |
range_dispatch on minecraft:use_duration with scale: 0.05
|
pull (crossbow) |
range_dispatch on minecraft:crossbow/pull
|
charged, firework
|
select on minecraft:charge_type (arrow, rocket) |
cast, broken, damaged
|
condition on fishing_rod/cast, broken, damaged
|
lefthanded |
select on minecraft:main_hand
|
damage, cooldown, filled
|
range_dispatch on damage, cooldown, bundle/fullness
|
angle, time
|
range_dispatch on compass (spawn, lodestone or recovery) and time
|
brushing |
range_dispatch on use_cycle (period 10) |
trim_type |
select on minecraft:trim_material
|
When the pack's overrides don't match, the item falls back to the vanilla 26.3 definition for that item, so a bow without a custom model still shows the normal pulling animation.
With "keep working on older versions" on, nothing is removed: older versions keep reading the overrides, 1.21.4+ reads the new items/ files, and pack.mcmeta gets pack_format and supported_formats for older clients plus min_format/max_format for 1.21.9+. Turn it off if you only run 1.21.4 or newer and want the pack to declare that.
Minecraft 1.21.4 removed item model overrides. Items now pick their model from item model definitions in assets/minecraft/items/<item>.json, so the overrides list inside models/item/<item>.json is ignored. Your models and textures are fine; only the file that chooses between them has to be rewritten, which is what this converter does.
No. The converter keeps your existing values: an item with CustomModelData 1001 still shows the same model. On 1.21.4+ the old whole-number value is stored as the first float of the custom_model_data component, which Paper and Spigot do for you when a plugin sets CustomModelData the old way.
Yes, if you leave "keep working on older versions" on. The old model files and their overrides stay in the pack (1.21.4+ ignores them), the new items/ files are added (older versions ignore those), and pack.mcmeta declares the whole version range.
Vanilla predicates such as pulling, pull, charged, firework, blocking, throwing, cast, broken, damage, damaged, lefthanded, cooldown, angle, time, filled, brushing and trim_type are converted to their 1.21.4 equivalents, so a custom bow keeps its pulling animation. Anything the converter can't map is listed in the report.
Since 1.21.4 an item can point straight at a model definition with the item_model component, for example minecraft:item_model="mypack:fire_sword". The option writes one definition per custom model and gives you a mapping table from old item + CustomModelData to the new id, ready for plugin configs.
No. The conversion runs in your browser with JavaScript. Your pack never leaves your computer.
Old versions check overrides from the bottom of the list up and stop at the first match, so an unsorted list lets a low CustomModelData value hide a higher one. With "sort overrides" on, the converter fixes the order so every model shows for its own value, and tells you which items were affected.
Your cart is empty
Looks like the spiders padded through here. Pick a plugin and it will show up here. Continue shopping