Loading...
Loading...
Create and debug Minecraft 26.x and 1.21.x resource packs, including pack metadata, textures, models, blockstates, item definitions, sounds, fonts, animations, and shaders. Use for client-side visual or audio assets without gameplay code.
npx skill4agent add jahrome907/minecraft-agent-skills minecraft-resource-pack.zipUse whenDo not use whenminecraft-datapackminecraft-plugin-devminecraft-moddingDo not use whenminecraft-server-admin| Minecraft Version | Preferred |
|---|---|
| 1.21 / 1.21.1 | |
| 1.21.2 / 1.21.3 | |
| 1.21.4 | |
| 1.21.5 | |
| 1.21.6 | |
| 1.21.7 / 1.21.8 | |
| 1.21.9 / 1.21.10 | |
| 1.21.11 | |
| 26.1 | |
| 26.2 | |
| 26.3 | |
pack_formatmin_formatmax_format[major, minor].0[84, 0][major]min_format[major, 0][major]max_formatpack_formatmin_formatpack_formatsupported_formatssupported_formatsmy-pack/
├── pack.mcmeta
├── pack.png ← 64×64 icon (optional)
└── assets/
└── minecraft/ ← override vanilla (or <namespace>/ for new packs)
├── models/
│ ├── block/
│ │ └── stone.json
│ └── item/
│ └── diamond_sword.json
├── items/ ← 1.21.4+ item model definitions
│ └── diamond_sword.json
├── blockstates/
│ └── stone.json
├── textures/
│ ├── block/
│ │ └── stone.png
│ ├── item/
│ │ └── diamond_sword.png
│ ├── gui/
│ │ └── sprites/
│ │ └── my_sprite.png
│ └── entity/
│ └── zombie/
│ └── zombie.png
├── sounds/
│ └── custom/
│ └── my_sound.ogg
├── sounds.json
├── font/
│ └── default.json
└── lang/
└── en_us.jsonpack.mcmeta{
"pack": {
"pack_format": 64,
"description": "My Custom Resource Pack v1.0"
}
}{
"pack": {
"min_format": [69, 0],
"max_format": [69, 0],
"description": "My Custom Resource Pack v1.0"
}
}{
"pack": {
"min_format": [75, 0],
"max_format": [75, 0],
"description": "My Custom Resource Pack v1.0"
}
}{
"pack": {
"min_format": [97, 1],
"max_format": [97, 1],
"description": "My Custom Resource Pack v1.0"
}
}assets/minecraft/models/block/my_cube.json{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "minecraft:block/stone"
}
}{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "mypack:block/my_pillar_top",
"side": "mypack:block/my_pillar_side"
}
}{
"parent": "minecraft:block/cube",
"textures": {
"up": "mypack:block/my_block_top",
"down": "mypack:block/my_block_bottom",
"north": "mypack:block/my_block_side",
"south": "mypack:block/my_block_side",
"east": "mypack:block/my_block_side",
"west": "mypack:block/my_block_side",
"particle": "mypack:block/my_block_side"
}
}{
"parent": "minecraft:block/cross",
"textures": {
"cross": "mypack:block/my_flower"
}
}{
"credit": "Custom model",
"ambientocclusion": true,
"textures": {
"0": "mypack:block/panel",
"particle": "mypack:block/panel"
},
"elements": [
{
"from": [0, 0, 7],
"to": [16, 16, 9],
"faces": {
"north": { "texture": "#0", "uv": [0, 0, 16, 16] },
"south": { "texture": "#0", "uv": [0, 0, 16, 16] }
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [75, 45, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
}
}
}andfromare in 1/16th block units (0–16).toisuvin 0–16 units.[x1, y1, x2, y2]
assets/<namespace>/items/overridescustom_model_data{
"variants": {
"": { "model": "mypack:block/my_block" }
}
}{
"variants": {
"facing=north": { "model": "mypack:block/my_block" },
"facing=south": { "model": "mypack:block/my_block", "y": 180 },
"facing=east": { "model": "mypack:block/my_block", "y": 90 },
"facing=west": { "model": "mypack:block/my_block", "y": 270 }
}
}{
"variants": {
"": [
{ "model": "minecraft:block/grass_block", "weight": 3 },
{ "model": "minecraft:block/grass_block_2" }
]
}
}{
"multipart": [
{ "apply": { "model": "mypack:block/my_slab_bottom" }, "when": { "type": "bottom" } },
{ "apply": { "model": "mypack:block/my_slab_top" }, "when": { "type": "top" } },
{ "apply": { "model": "mypack:block/my_block" }, "when": { "type": "double" } }
]
}assets/<namespace>/textures/block/assets/<namespace>/textures/item/.pngassets/minecraft/textures/block/fire_0.png.mcmeta{
"animation": {
"frametime": 2,
"frames": [0, 1, 2, 3, 4, 5, 6, 7]
}
}framesframetimeassets/minecraft/textures/gui/sprites/<category>/<name>.png<category>/<name>texturesspriteforce_translucent{
"textures": {
"all": {
"sprite": "mypack:block/frosted_panel",
"force_translucent": true
}
}
}.pngforce_translucentsounds.jsonname.oggassets/<namespace>/sounds/assets/minecraft/lang/en_us.json{
"block.mypack.my_block": "My Custom Block",
"item.mypack.my_item": "Magic Wand",
"entity.mypack.my_mob": "Forest Guardian",
"death.attack.mypack.laser": "%1$s was zapped by %2$s"
}fr_fr.jsonde_de.jsonen_us.json# Singleplayer: place in
~/.minecraft/resourcepacks/my-pack/
# or
~/.minecraft/resourcepacks/my-pack.zip
# Server-side (forces on clients):
# Set in server.properties:
resource-pack=https://example.com/my-pack.zip
resource-pack-sha1=<sha1 hash>
resource-pack-prompt={"text":"Required pack","color":"gold"}| Problem | Cause | Fix |
|---|---|---|
| Model not showing | Wrong JSON path or syntax error | Check |
| Black/pink checkerboard | Texture path wrong or missing | Check |
| Blockstate not applying | Wrong state property name | Use F3 to inspect block state; use |
| Animation not working | Wrong MCMETA location | Must be same folder as texture, named |
| Custom sound not playing | Not in | Register sound event in |
| Pack not loading | Wrong | Update |
# Run from the installed skill directory (for example `.claude/skills/minecraft-resource-pack`):
./scripts/validate-resource-pack.sh --root /path/to/resource-pack
# Strict mode treats warnings as failures:
./scripts/validate-resource-pack.sh --root /path/to/resource-pack --strictpack.mcmetaassets/**/*.jsonpack.mcmeta[major][major, minor]custom_model_dataspriteforce_translucenttype: "event"sounds.json*.png.mcmeta*.png