This is what you’ll get after this tutorial

Before You Start
- Resources
- What you’ll Need
- Text Editor (VS Code, NotePad++, etc)
- Minecraft version 1.21.5+ (older versions do not support data driven item models)
- Basic understanding of json
Getting Started
Below is the folder structure used in this tutorial.
It is already organized so you can add more enchantments later.
project_root/
├── pack.mcmeta
├── pack.png
│
└── assets/
└── minecraft/
├── models/
│ └── item/
│ └── sword/
│ └── fire_aspect.json
│
├── textures/
│ └── item/
│ └── sword/
│ ├── fire_aspect.png
│ └── fire_aspect.png.mcmeta
│
└── items/
└── diamond_sword.json
pack.mcmeta
Create pack.mcmeta at the root of your project.
Because this tutorial uses data-driven item models, the resource
pack must target Minecraft 1.21.5 or newer.
This will tell Minecraft exactly that
55 is the minimum format which coresponds to 1.21.5 and 2147483647 means all future versions will work
{
"pack": {
"pack_format": 55,
"supported_formats": [55, 2147483647],
"min_format": 55,
"max_format": 2147483647,
"description": "Better Enchanted Tool Textures!"
}
}
pack.png
pack.png can be any square PNG image.
This is just the icon shown in the resource pack menu.
Enchantment Texture
Next, add the texture that represents the enchantment effect.
In this example, the Fire Aspect texture is animated, so it uses a sprite sheet.
You can download my sprite sheet here: fire_aspect.png
Place the file here:
assets/minecraft/textures/item/sword/
Animated Texture
If your texture is animated, create a file with the same name +
.mcmeta:
fire_aspect.png.mcmeta
{
"animation": {
"frametime": 2
}
}
Minecraft runs at 20 ticks per second, so:
frametime: 20= 1 secondframetime: 2= 0.1 seconds per frame
Item Model (Enchantment Overlay)
Now we create the model that applies the enchantment texture.
Create this file:
assets/minecraft/models/item/sword/fire_aspect.json
This model uses the default handheld sword model with a single texture layer for the enchantment effect.
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "minecraft:item/sword/fire_aspect"
}
}
Note: Texture paths never include .png
Enchantment Detection
This part tells Minecraft when to switch models based on enchantments.
Create this file:
assets/minecraft/items/diamond_sword.json
WARNING JSON does not support comments. The comments below are for explanation only and must be removed in the final file.
{
"model": {
// Composite type allows combining multiple models
"type": "minecraft:composite",
"models": [
// Conditional model: check if item has Fire Aspect enchantment
{
"type": "minecraft:condition",
"property": "minecraft:component",
"predicate": "minecraft:enchantments",
// Define which enchantment to look for
"value": [
{
"enchantments": "minecraft:fire_aspect",
"levels": {"min": 1}
}
],
// If enchantment is present: render the fire aspect overlay model
"on_true": {"type": "minecraft:model", "model": "minecraft:item/sword/fire_aspect"},
"on_false": {"type": "minecraft:empty"}
},
// Base model: render the default diamond sword
{
"type": "minecraft:model",
"model": "minecraft:item/diamond_sword"
}
]
}
}
Adding More Enchantments
To add additional enchantments:
- Copy the entire
minecraft:conditionblock including the brackets - Paste it directly after the previous one
- Change:
- Enchantment ID
- Model path
Packaging
Zip the following files:
assets/
pack.mcmeta
pack.png
You can rename the .zip file however you want
Testing In Game
- Launch Minecraft
- Go to Options → Resource Packs
- Click Open Pack Folder
- Drag your
.zipfile into the folder - Enable the pack
- Enter a world and enchant a diamond sword with Fire Aspect
If everything is correct, the texture should change.
Troubleshooting
- Press F3 + T to reload resource packs
- Check file paths and enchantment IDs