Custom Item Textures (Minecraft 1.13 - 1.21.3)
This comprehensive guide will teach you how to create custom textures for items in Minecraft versions 1.13 through 1.21.3 using Custom Model Data and resource packs.
This tutorial does not cover armor retexturing. For armor, you'll need to use OptiFine CIT (Custom Item Textures). Search for "OptiFine armor retexturing" for tutorials on that method.
ALL file and folder names MUST be lowercase only.
Using uppercase characters will cause textures to fail loading. Always use custom_sword instead of CustomSword.
Video Tutorialβ
If you prefer video format, this tutorial is based on the following video:
Prerequisitesβ
- Text Editor: Use Notepad++, VS Code, or similar (NOT regular Notepad)
- Image Editor: Photoshop, Paint.NET, GIMP, or Paint 3D
- Compression Tool: WinRAR, 7-Zip, or built-in OS compression
- Basic JSON knowledge (helpful but not required)
None of the files you create are .txt files. Make sure your editor can save specific file types like .json, .mcmeta, and .png.
Part 1: Setting Up Your ExecutableItemβ
Step 1: Create Your Itemβ
First, create the ExecutableItem that will use the custom texture:
/ei create my_custom_pickaxe
Step 2: Configure Basic Propertiesβ
Set up the item's display name, lore, and any other features you want:
/ei edit my_custom_pickaxe
Example configuration:
- Name:
&b&lCustom Pickaxe - Material:
DIAMOND_PICKAXE - Lore: Add any descriptive text
Part 2: Creating Your Textureβ
Step 3: Design Your Texture Imageβ
Create your custom texture using an image editor:
Requirements:
- Format: PNG with transparency support
- Resolution: 16x16 pixels (or power of 2: 32x32, 64x64, 128x128, etc.)
- File name: Use lowercase with underscores (e.g.,
custom_pickaxe.png)
While 16x16 is standard, you can use higher resolutions like 32x32 or 64x64 for more detailed textures. Just keep it as a power of 2.
Save your texture file - you'll need it in the next section.
Part 3: Building the Resource Packβ
Step 4: Create Folder Structureβ
Create the following folder structure:
ExecutableItemsTexturePack/
βββ pack.mcmeta
βββ pack.png (optional)
βββ assets/
βββ minecraft/
βββ textures/
β βββ item/
β βββ custom_textures/
β βββ custom_pickaxe.png
βββ models/
βββ item/
βββ diamond_pickaxe/
β βββ 1.json
βββ diamond_pickaxe.json
Step 5: Create pack.mcmetaβ
In the root folder, create pack.mcmeta:
{
"pack": {
"pack_format": 15,
"description": "Β§eExecutableItems Custom Textures"
}
}
Choose the correct pack_format for your Minecraft version:
- 15 = 1.20.5 - 1.21.1
- 34 = 1.20.2 - 1.20.4
- 18 = 1.20 - 1.20.1
- 15 = 1.19.4
- 13 = 1.19.3
- 12 = 1.19 - 1.19.2
- 9 = 1.18 - 1.18.2
- 8 = 1.17 - 1.17.1
- 6 = 1.16.2 - 1.16.5
See the full pack format list for all versions.
Step 6: Add Your Texture Fileβ
- Navigate to
assets/minecraft/textures/item/custom_textures/ - Place your texture PNG file here (e.g.,
custom_pickaxe.png)
Step 7: Identify the Base Item Materialβ
You need to know the Minecraft ID of the base item:
- Press F3 + H in Minecraft to enable Advanced Tooltips
- Hover over the item to see its ID (e.g.,
minecraft:diamond_pickaxe) - Use the part after the colon for file names (e.g.,
diamond_pickaxe)
-9aa745d5750c4bf918bf76f87c52571b.png)
The file name MUST match the Minecraft item ID, not:
- β Your item's display name
- β Your texture file name
- β Your ExecutableItem ID
- β
The Minecraft material ID (e.g.,
diamond_pickaxe)
Step 8: Create the Base Model Fileβ
In assets/minecraft/models/item/, create diamond_pickaxe.json:
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/diamond_pickaxe"
},
"overrides": [
{
"predicate": {
"custom_model_data": 1
},
"model": "item/diamond_pickaxe/1"
}
]
}
Understanding the fields:
"parent": Base model type- Use
"generated"for most items - Use
"handheld"if item looks wrong when held
- Use
"layer0": Default vanilla texture"overrides": Array of custom model data mappings"custom_model_data": The number you'll set in ExecutableItems"model": Path to your custom model file
To add more custom textures for the same item, add more override entries:
"overrides": [
{
"predicate": {
"custom_model_data": 1
},
"model": "item/diamond_pickaxe/1"
},
{
"predicate": {
"custom_model_data": 2
},
"model": "item/diamond_pickaxe/2"
},
{
"predicate": {
"custom_model_data": 3
},
"model": "item/diamond_pickaxe/3"
}
]
Step 9: Create the Custom Model Fileβ
- Create folder:
assets/minecraft/models/item/diamond_pickaxe/ - Create file:
1.jsoninside that folder
Content of 1.json:
{
"parent": "item/handheld",
"textures": {
"layer0": "item/custom_textures/custom_pickaxe"
}
}
Understanding the texture path:
The "layer0" value is a path relative to assets/minecraft/textures/:
- Path:
item/custom_textures/custom_pickaxe - Full path:
assets/minecraft/textures/item/custom_textures/custom_pickaxe.png
The most common mistake is setting the wrong path in layer0. Double-check that:
- The path matches your folder structure
- You don't include
.pngextension - The path starts from inside the
textures/folder
Step 10: Package the Resource Packβ
For Windows (WinRAR/7-Zip):β
- Select
pack.mcmetaandassetsfolder - Right-click β Add to archive / Compress
- Choose
.zipformat - Name it
ExecutableItemsTexturePack.zip
For Mac/Linux:β
- Select
pack.mcmetaandassetsfolder - Compress to ZIP using built-in compression
- Or place in a folder and use as-is for local testing
-b96d78f938ccc9aa94e4eaa4fa46b8da.png)
-d5c9dde5b432ac1c7d70603309f49a78.png)
Step 11: Install the Resource Packβ
- Place the
.zipfile in.minecraft/resourcepacks/ - Launch Minecraft
- Go to Options β Resource Packs
- Enable your pack by clicking the arrow
Part 4: Connecting ExecutableItems to the Textureβ
Step 12: Set Custom Model Dataβ
Edit your ExecutableItem:
/ei edit my_custom_pickaxe
Navigate to the customModelData configuration and set it to match your override:
-8de40be21fb29e8ae501339fbccc50c4.png)
Set the value to 1 (or whatever number you used in the override):
-868e988a9c385acce22ed11914810ede.png)
In the config file, it looks like:
customModelData: 1
Step 13: Test Your Custom Textureβ
Give yourself the item:
/ei give my_custom_pickaxe
You should now see your custom texture!
-1dd7842af8eb780c6a5abb8e7734490c.png)
-3b0a60eae67b1cc205cf894bc61b9238.png)
Troubleshootingβ
| Problem | Solution |
|---|---|
| Texture not showing | Check that file names are all lowercase |
| Purple/black texture | Verify the layer0 path matches your texture location |
| Pack not loading | Check pack_format matches your Minecraft version |
| Wrong item appearance | Change "generated" to "handheld" in the model parent |
| Item looks vanilla | Verify customModelData in EI matches your override number |
Advanced Tipsβ
Organizing Multiple Texturesβ
Create subfolders for different item types:
custom_textures/
βββ weapons/
β βββ sword_fire.png
β βββ sword_ice.png
βββ tools/
β βββ pickaxe_emerald.png
βββ misc/
βββ wand_magic.png
Update your paths accordingly:
"layer0": "item/custom_textures/weapons/sword_fire"
Using 3D Modelsβ
For 3D models created in Blockbench:
- Create your model in Blockbench
- Export as "Java Block/Item"
- Replace the content of your
1.jsonwith the exported model - Make sure texture paths match your pack structure
Server Deploymentβ
To use custom textures on a server, you'll need to host the resource pack online. See our Uploading Texture Pack Guide for instructions.
Download Example Packβ
If you're having trouble following the steps, download this example pack to see the correct structure:
Download ExecutableItemsTexturePackExample.zip
Additional Resourcesβ
- Minecraft Wiki: Resource Pack
- Minecraft Wiki: Model Format
- Pack Format Version History
- Blockbench - Free 3D Model Editor
Need help? Join our Discord community and ask in the support channels!