[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M74FS5H7CWRB747AXGCK2Y65":3,"skill-same:01M74FS5H7CWRB747AXGCK2Y65":56},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":30,"updatedAt":31,"install":32,"resources":45},"01M74FS5H7CWRB747AXGCK2Y65","minecraft-resource-pack",null,"Create and edit Minecraft resource packs for 1.21.x including custom block models, item models, blockstate definitions, textures (PNG format requirements), sounds.json, custom fonts, MCMETA animation files, OptiFine CIT (Custom Item Textures), and pack.mcmeta format. Covers the full block\u002Fitem model JSON schema (parent, textures, elements, display, overrides), multi-layer items, GUI textures, GUI sprites, language files, shader integration (core shaders, Iris), and the pack format numbers for each 1.21.x version. Use to customize how Minecraft looks and sounds without mods.","AIKUSAN\u002Fminecraft-agent-skills-bundle","AIKUSAN","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F54048610?v=4","01M74FG91YZ75JDYZ7PNHER2NJ","Lorenz Tazan","01M74FG931PS45HBP26RKEZQDT",12,"MIT","https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002F.codex\u002Fskills\u002Fminecraft-resource-pack\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: minecraft-resource-pack\ndescription: \"Create and edit Minecraft resource packs for 1.21.x including custom block models, item models, blockstate definitions, textures (PNG format requirements), sounds.json, custom fonts, MCMETA animation files, OptiFine CIT (Custom Item Textures), and pack.mcmeta format. Covers the full block\u002Fitem model JSON schema (parent, textures, elements, display, overrides), multi-layer items, GUI textures, GUI sprites, language files, shader integration (core shaders, Iris), and the pack format numbers for each 1.21.x version. Use to customize how Minecraft looks and sounds without mods.\"\n---\n\n# Minecraft Resource Pack Skill\n\n## What Is a Resource Pack?\n\nA resource pack is a folder (or `.zip`) that overrides or adds Minecraft's visual and\naudio assets: textures, models, sounds, language files, fonts, and shaders. No Java\nor mod loader required. Works on vanilla clients and servers.\n\n### Routing Boundaries\n- `Use when`: the deliverable is visual\u002Faudio assets (textures, models, sounds, fonts, shaders) in resource-pack format.\n- `Do not use when`: the task requires gameplay logic or runtime behavior changes (use `minecraft-datapack`, `minecraft-plugin-dev`, or `minecraft-modding`).\n- `Do not use when`: the task is server infrastructure\u002Fruntime administration (`minecraft-server-admin`).\n- `Do not use when`: the task is a bitmap asset such as an icon or thumbnail (`minecraft-imagegen`).\n- `Do not use when`: the task is converting a finished Java pack for Bedrock (`minecraft-resource-pack-conversion`).\n\n---\n\n## Pack Metadata (1.21.x)\n\n| Minecraft Version | Preferred `pack` metadata |\n|-------------------|---------------------------|\n| 1.21 \u002F 1.21.1     | `pack_format: 34` |\n| 1.21.2 \u002F 1.21.3   | `pack_format: 42` |\n| 1.21.4            | `pack_format: 46` |\n| 1.21.5            | `pack_format: 55` |\n| 1.21.6            | `pack_format: 63` |\n| 1.21.7 \u002F 1.21.8   | `pack_format: 64` |\n| 1.21.9 \u002F 1.21.10  | `min_format: 69.0`, `max_format: 69.0` |\n| 1.21.11           | `min_format: 75.0`, `max_format: 75.0` |\n| 26.x              | Not verified here. Read the Minecraft Wiki resource pack format table for your exact release. |\n\nUse `pack_format` through 1.21.8. Starting in 1.21.9, `pack.mcmeta` switches to\n`min_format` \u002F `max_format` instead of the older single-number field.\n\n---\n\n## Directory Layout\n\n```\nmy-pack\u002F\n├── pack.mcmeta\n├── pack.png                   ← 64×64 icon (optional)\n└── assets\u002F\n    └── minecraft\u002F             ← override vanilla (or \u003Cnamespace>\u002F for new packs)\n        ├── models\u002F\n        │   ├── block\u002F\n        │   │   └── stone.json\n        │   └── item\u002F\n        │       └── diamond_sword.json\n        ├── blockstates\u002F\n        │   └── stone.json\n        ├── textures\u002F\n        │   ├── block\u002F\n        │   │   └── stone.png\n        │   ├── item\u002F\n        │   │   └── diamond_sword.png\n        │   ├── gui\u002F\n        │   │   └── sprites\u002F\n        │   │       └── my_sprite.png\n        │   └── entity\u002F\n        │       └── zombie\u002F\n        │           └── zombie.png\n        ├── sounds\u002F\n        │   └── custom\u002F\n        │       └── my_sound.ogg\n        ├── sounds.json\n        ├── font\u002F\n        │   └── default.json\n        ├── lang\u002F\n        │   └── en_us.json\n        ├── shaders\u002F           ← core shader overrides (advanced)\n        └── optifine\u002F          ← OptiFine CIT \u002F CTM (OptiFine only)\n            └── cit\u002F\n                └── my_item.properties\n```\n\n---\n\n## `pack.mcmeta`\n\n### 1.21.8 and earlier\n\n```json\n{\n  \"pack\": {\n    \"pack_format\": 64,\n    \"description\": \"My Custom Resource Pack v1.0\"\n  }\n}\n```\n\n### 1.21.9 and newer\n\n```json\n{\n  \"pack\": {\n    \"min_format\": 75.0,\n    \"max_format\": 75.0,\n    \"description\": \"My Custom Resource Pack v1.0\"\n  }\n}\n```\n\n---\n\n## Block Models\n\n### `assets\u002Fminecraft\u002Fmodels\u002Fblock\u002Fmy_cube.json`\nFull cube — all six faces use the same texture:\n```json\n{\n  \"parent\": \"minecraft:block\u002Fcube_all\",\n  \"textures\": {\n    \"all\": \"minecraft:block\u002Fstone\"\n  }\n}\n```\n\nColumn block (like logs):\n```json\n{\n  \"parent\": \"minecraft:block\u002Fcube_column\",\n  \"textures\": {\n    \"end\": \"mypack:block\u002Fmy_pillar_top\",\n    \"side\": \"mypack:block\u002Fmy_pillar_side\"\n  }\n}\n```\n\nDifferent sides:\n```json\n{\n  \"parent\": \"minecraft:block\u002Fcube\",\n  \"textures\": {\n    \"up\":    \"mypack:block\u002Fmy_block_top\",\n    \"down\":  \"mypack:block\u002Fmy_block_bottom\",\n    \"north\": \"mypack:block\u002Fmy_block_side\",\n    \"south\": \"mypack:block\u002Fmy_block_side\",\n    \"east\":  \"mypack:block\u002Fmy_block_side\",\n    \"west\":  \"mypack:block\u002Fmy_block_side\",\n    \"particle\": \"mypack:block\u002Fmy_block_side\"\n  }\n}\n```\n\nCross model (flowers, plants):\n```json\n{\n  \"parent\": \"minecraft:block\u002Fcross\",\n  \"textures\": {\n    \"cross\": \"mypack:block\u002Fmy_flower\"\n  }\n}\n```\n\n### Custom geometry (elements)\n```json\n{\n  \"credit\": \"Custom model\",\n  \"ambientocclusion\": true,\n  \"textures\": {\n    \"0\": \"mypack:block\u002Fpanel\",\n    \"particle\": \"mypack:block\u002Fpanel\"\n  },\n  \"elements\": [\n    {\n      \"from\": [0, 0, 7],\n      \"to\": [16, 16, 9],\n      \"faces\": {\n        \"north\": { \"texture\": \"#0\", \"uv\": [0, 0, 16, 16] },\n        \"south\": { \"texture\": \"#0\", \"uv\": [0, 0, 16, 16] }\n      }\n    }\n  ],\n  \"display\": {\n    \"thirdperson_righthand\": {\n      \"rotation\": [75, 45, 0],\n      \"translation\": [0, 2.5, 0],\n      \"scale\": [0.375, 0.375, 0.375]\n    }\n  }\n}\n```\n\n> `from` and `to` are in 1\u002F16th block units (0–16). `uv` is `[x1, y1, x2, y2]` in 0–16 units.\n\n---\n\n## Item Models\n\n### Simple flat item\n```json\n{\n  \"parent\": \"minecraft:item\u002Fgenerated\",\n  \"textures\": {\n    \"layer0\": \"mypack:item\u002Fmy_item\"\n  }\n}\n```\n\n### Held item (in-hand model)\n```json\n{\n  \"parent\": \"minecraft:item\u002Fhandheld\",\n  \"textures\": {\n    \"layer0\": \"mypack:item\u002Fmy_sword\"\n  }\n}\n```\n\n### Two-layer item (colored like leather armor)\n```json\n{\n  \"parent\": \"minecraft:item\u002Fgenerated\",\n  \"textures\": {\n    \"layer0\": \"minecraft:item\u002Fleather_helmet\",\n    \"layer1\": \"minecraft:item\u002Fleather_helmet_overlay\"\n  }\n}\n```\n\n### Custom model data overrides (1.21.4 and prior)\nEach `predicate` entry routes to a different model based on `custom_model_data`:\n```json\n{\n  \"parent\": \"minecraft:item\u002Fhandheld\",\n  \"textures\": {\n    \"layer0\": \"minecraft:item\u002Fstick\"\n  },\n  \"overrides\": [\n    { \"predicate\": { \"custom_model_data\": 1001 }, \"model\": \"mypack:item\u002Fmagic_wand\" },\n    { \"predicate\": { \"custom_model_data\": 1002 }, \"model\": \"mypack:item\u002Ffire_staff\" }\n  ]\n}\n```\n\n### 1.21.4+ Item Model (new format)\nIn 1.21.4, Mojang introduced a new item model system. Place model definitions at\n`assets\u002F\u003Cnamespace>\u002Fitems\u002F\u003Citem_name>.json`:\n```json\n{\n  \"model\": {\n    \"type\": \"minecraft:select\",\n    \"property\": \"minecraft:custom_model_data\",\n    \"fallback\": {\n      \"type\": \"minecraft:model\",\n      \"model\": \"minecraft:item\u002Fstick\"\n    },\n    \"cases\": [\n      {\n        \"when\": 1001,\n        \"model\": { \"type\": \"minecraft:model\", \"model\": \"mypack:item\u002Fmagic_wand\" }\n      }\n    ]\n  }\n}\n```\n\n---\n\n## Blockstate Definitions\n\n### Simple block (no variants)\n```json\n{\n  \"variants\": {\n    \"\": { \"model\": \"mypack:block\u002Fmy_block\" }\n  }\n}\n```\n\n### Facing block (4 rotations)\n```json\n{\n  \"variants\": {\n    \"facing=north\": { \"model\": \"mypack:block\u002Fmy_block\" },\n    \"facing=south\": { \"model\": \"mypack:block\u002Fmy_block\",  \"y\": 180 },\n    \"facing=east\":  { \"model\": \"mypack:block\u002Fmy_block\",  \"y\": 90  },\n    \"facing=west\":  { \"model\": \"mypack:block\u002Fmy_block\",  \"y\": 270 }\n  }\n}\n```\n\n### Random texture (multipart)\n```json\n{\n  \"variants\": {\n    \"\": [\n      { \"model\": \"minecraft:block\u002Fgrass_block\",  \"weight\": 3 },\n      { \"model\": \"minecraft:block\u002Fgrass_block_2\" }\n    ]\n  }\n}\n```\n\n### Multipart (slabs, fences, walls)\n```json\n{\n  \"multipart\": [\n    { \"apply\": { \"model\": \"mypack:block\u002Fmy_slab_bottom\" }, \"when\": { \"type\": \"bottom\" } },\n    { \"apply\": { \"model\": \"mypack:block\u002Fmy_slab_top\"    }, \"when\": { \"type\": \"top\"    } },\n    { \"apply\": { \"model\": \"mypack:block\u002Fmy_block\"        }, \"when\": { \"type\": \"double\" } }\n  ]\n}\n```\n\n---\n\n## Textures\n\n- Format: **PNG**, RGBA (32-bit)\n- Standard block\u002Fitem size: **16×16 px**\n- Textures can be larger (32×32, 64×64) — Minecraft scales them, but stick to powers of 2\n- Animation requires height = N × width (e.g., 16×64 for 4 frames)\n- Place block textures in `assets\u002F\u003Cnamespace>\u002Ftextures\u002Fblock\u002F`\n- Place item textures in `assets\u002F\u003Cnamespace>\u002Ftextures\u002Fitem\u002F`\n- All textures are referenced without the `.png` extension in JSON\n\n### Animated texture MCMETA\n`assets\u002Fminecraft\u002Ftextures\u002Fblock\u002Ffire_0.png.mcmeta`:\n```json\n{\n  \"animation\": {\n    \"frametime\": 2,\n    \"frames\": [0, 1, 2, 3, 4, 5, 6, 7]\n  }\n}\n```\nIf `frames` is omitted, all frames play sequentially. `frametime` is in game ticks (default 1).\n\n### GUI sprites (1.20.2+)\nPlace sprites at `assets\u002Fminecraft\u002Ftextures\u002Fgui\u002Fsprites\u002F\u003Ccategory>\u002F\u003Cname>.png`.\nReference them with `\u003Ccategory>\u002F\u003Cname>` in code\u002FJSON.\n\n---\n\n## Sounds\n\n### `assets\u002Fminecraft\u002Fsounds.json`\n```json\n{\n  \"my_sound.play\": {\n    \"sounds\": [\n      { \"name\": \"mypack:custom\u002Fmy_sound\", \"volume\": 1.0, \"pitch\": 1.0, \"weight\": 1 },\n      { \"name\": \"mypack:custom\u002Fmy_sound_alt\", \"weight\": 2 }\n    ],\n    \"category\": \"players\"\n  },\n  \"entity.player.levelup\": {\n    \"replace\": true,\n    \"sounds\": [\n      { \"name\": \"mypack:custom\u002Flevelup_replaced\", \"volume\": 0.75, \"pitch\": 1.0 }\n    ]\n  }\n}\n```\n\n- Sound files go in `assets\u002F\u003Cnamespace>\u002Fsounds\u002F` as `.ogg` files (Vorbis encoded)\n- Use `\"replace\": true` to replace vanilla sounds instead of adding to them\n- Categories: `master`, `music`, `record`, `weather`, `block`, `hostile`, `neutral`, `player`, `ambient`, `voice`\n\n---\n\n## Language Files\n\n`assets\u002Fminecraft\u002Flang\u002Fen_us.json`:\n```json\n{\n  \"block.mypack.my_block\": \"My Custom Block\",\n  \"item.mypack.my_item\": \"Magic Wand\",\n  \"entity.mypack.my_mob\": \"Forest Guardian\",\n  \"death.attack.mypack.laser\": \"%1$s was zapped by %2$s\"\n}\n```\n\n- Use the exact translation key format for your mod\u002Fdatapack namespace\n- File name is the locale code (e.g., `fr_fr.json`, `de_de.json`)\n- Always provide `en_us.json` as the primary fallback\n\n---\n\n## Fonts\n\n### `assets\u002Fminecraft\u002Ffont\u002Fdefault.json` — add glyph\n```json\n{\n  \"providers\": [\n    {\n      \"type\": \"bitmap\",\n      \"file\": \"mypack:font\u002Ficons.png\",\n      \"ascent\": 8,\n      \"height\": 9,\n      \"chars\": [\"\\uE000\", \"\\uE001\", \"\\uE002\"]\n    }\n  ]\n}\n```\n\nCustom icons via private use area (U+E000–U+F8FF). Reference in text with `\\uE000`.\nThe `icons.png` must have each character cell `height` pixels tall.\n\n---\n\n## OptiFine CIT (Custom Item Textures)\n\n> OptiFine-only feature. Does not work in vanilla or Iris.\n\n### `assets\u002Fminecraft\u002Foptifine\u002Fcit\u002Fmy_sword.properties`\n```properties\ntype=item\nitems=minecraft:diamond_sword\ntexture=my_sword_texture.png\nmodel=my_sword_model\nnbt.display.Name=ipattern:*Excalibur*\n```\n\nCommon CIT properties:\n- `type=item` — item texture override\n- `type=enchantment` — custom enchantment glint\n- `type=armor` — armor overlay\n- `items=` — comma-separated item IDs\n- `damage=` — damage range (e.g., `0-50%`)\n- `nbt.display.Name=ipattern:*text*` — NBT name filter\n- `texture=` — PNG file (relative to `.properties` file)\n- `model=` — JSON model file (relative)\n\n---\n\n## Iris Shaders (Resource Pack Method)\n\nIris shaders live inside a resource pack at:\n```\nassets\u002Firis\u002F\n    shaders\u002F\n        core\u002F\n            rendertype_terrain.vsh    ← vertex shader override\n            rendertype_terrain.fsh    ← fragment shader override\n```\n\nFull shader pack distribution uses the `.zip` format with a `shaders\u002F` root folder\n(not inside `assets\u002F`). Resource pack shader overrides target specific render types.\n\n---\n\n## Installation\n\n```bash\n# Singleplayer: place in\n~\u002F.minecraft\u002Fresourcepacks\u002Fmy-pack\u002F\n# or\n~\u002F.minecraft\u002Fresourcepacks\u002Fmy-pack.zip\n\n# Server-side (forces on clients):\n# Set in server.properties:\nresource-pack=https:\u002F\u002Fexample.com\u002Fmy-pack.zip\nresource-pack-sha1=\u003Csha1 hash>\nresource-pack-prompt={\"text\":\"Required pack\",\"color\":\"gold\"}\n```\n\n---\n\n## Common Issues\n\n| Problem | Cause | Fix |\n|---------|-------|-----|\n| Model not showing | Wrong JSON path or syntax error | Check `assets\u002F\u003Cnamespace>\u002Fmodels\u002F` path; validate JSON |\n| Black\u002Fpink checkerboard | Texture path wrong or missing | Check `textures\u002F` path, file extension not in JSON |\n| Blockstate not applying | Wrong state property name | Match exact property names from `\u002Fblockdata` |\n| Animation not working | Wrong MCMETA location | Must be same folder as texture, named `texture.png.mcmeta` |\n| Custom sound not playing | Not in `sounds.json` | Register sound event in `sounds.json`, match namespace |\n| Pack not loading | Wrong `pack_format` or `min_format` \u002F `max_format` values | Update `pack.mcmeta` for the exact 1.21.x patch |\n\n## Validator Script\n\nUse the bundled validator script before shipping a resource-pack update:\n\n```bash\n# Run from the installed skill directory (for example `.claude\u002Fskills\u002Fminecraft-resource-pack`):\n.\u002Fscripts\u002Fvalidate-resource-pack.sh --root \u002Fpath\u002Fto\u002Fresource-pack\n\n# Strict mode treats warnings as failures:\n.\u002Fscripts\u002Fvalidate-resource-pack.sh --root \u002Fpath\u002Fto\u002Fresource-pack --strict\n```\n\nWhat it checks:\n- JSON validity for `pack.mcmeta` and `assets\u002F**\u002F*.json`\n- Model\u002Fblockstate\u002Ffont\u002Fsounds references resolve to real files\n- Every `*.png.mcmeta` has a matching `*.png`\n\n---\n\n## References\n\n- Minecraft Wiki — Resource pack: https:\u002F\u002Fminecraft.wiki\u002Fw\u002FResource_pack\n- Minecraft Wiki — Model: https:\u002F\u002Fminecraft.wiki\u002Fw\u002FTutorials\u002FModels\n- Minecraft Wiki — Blockstates: https:\u002F\u002Fminecraft.wiki\u002Fw\u002FBlockstate_(Java_Edition)\n- Pack format history: https:\u002F\u002Fminecraft.wiki\u002Fw\u002FPack_format\n- Misode's model viewer: https:\u002F\u002Fmisode.github.io\u002F\n- OptiFine CIT guide: https:\u002F\u002Foptifine.readthedocs.io\u002Fcit.html\n","# Minecraft Resource Pack Skill\n\n## What Is a Resource Pack?\n\nA resource pack is a folder (or `.zip`) that overrides or adds Minecraft's visual and\naudio assets: textures, models, sounds, language files, fonts, and shaders. No Java\nor mod loader required. Works on vanilla clients and servers.\n\n### Routing Boundaries\n- `Use when`: the deliverable is visual\u002Faudio assets (textures, models, sounds, fonts, shaders) in resource-pack format.\n- `Do not use when`: the task requires gameplay logic or runtime behavior changes (use `minecraft-datapack`, `minecraft-plugin-dev`, or `minecraft-modding`).\n- `Do not use when`: the task is server infrastructure\u002Fruntime administration (`minecraft-server-admin`).\n- `Do not use when`: the task is a bitmap asset such as an icon or thumbnail (`minecraft-imagegen`).\n- `Do not use when`: the task is converting a finished Java pack for Bedrock (`minecraft-resource-pack-conversion`).\n\n---\n\n## Pack Metadata (1.21.x)\n\n| Minecraft Version | Preferred `pack` metadata |\n|-------------------|---------------------------|\n| 1.21 \u002F 1.21.1     | `pack_format: 34` |\n| 1.21.2 \u002F 1.21.3   | `pack_format: 42` |\n| 1.21.4            | `pack_format: 46` |\n| 1.21.5            | `pack_format: 55` |\n| 1.21.6            | `pack_format: 63` |\n| 1.21.7 \u002F 1.21.8   | `pack_format: 64` |\n| 1.21.9 \u002F 1.21.10  | `min_format: 69.0`, `max_format: 69.0` |\n| 1.21.11           | `min_format: 75.0`, `max_format: 75.0` |\n| 26.x              | Not verified here. Read the Minecraft Wiki resource pack format table for your exact release. |\n\nUse `pack_format` through 1.21.8. Starting in 1.21.9, `pack.mcmeta` switches to\n`min_format` \u002F `max_format` instead of the older single-number field.\n\n---\n\n## Directory Layout\n\n```\nmy-pack\u002F\n├── pack.mcmeta\n├── pack.png                   ← 64×64 icon (optional)\n└── assets\u002F\n    └── minecraft\u002F             ← override vanilla (or \u003Cnamespace>\u002F for new packs)\n        ├── models\u002F\n        │   ├── block\u002F\n        │   │   └── stone.json\n        │   └── item\u002F\n        │       └── diamond_sword.json\n        ├── blockstates\u002F\n        │   └── stone.json\n        ├── textures\u002F\n        │   ├── block\u002F\n        │   │   └── stone.png\n        │   ├── item\u002F\n        │   │   └── diamond_sword.png\n        │   ├── gui\u002F\n        │   │   └── sprites\u002F\n        │   │       └── my_sprite.png\n        │   └── entity\u002F\n        │       └── zombie\u002F\n        │           └── zombie.png\n        ├── sounds\u002F\n        │   └── custom\u002F\n        │       └── my_sound.ogg\n        ├── sounds.json\n        ├── font\u002F\n        │   └── default.json\n        ├── lang\u002F\n        │   └── en_us.json\n        ├── shaders\u002F           ← core shader overrides (advanced)\n        └── optifine\u002F          ← OptiFine CIT \u002F CTM (OptiFine only)\n            └── cit\u002F\n                └── my_item.properties\n```\n\n---\n\n## `pack.mcmeta`\n\n### 1.21.8 and earlier\n\n```json\n{\n  \"pack\": {\n    \"pack_format\": 64,\n    \"description\": \"My Custom Resource Pack v1.0\"\n  }\n}\n```\n\n### 1.21.9 and newer\n\n```json\n{\n  \"pack\": {\n    \"min_format\": 75.0,\n    \"max_format\": 75.0,\n    \"description\": \"My Custom Resource Pack v1.0\"\n  }\n}\n```\n\n---\n\n## Block Models\n\n### `assets\u002Fminecraft\u002Fmodels\u002Fblock\u002Fmy_cube.json`\nFull cube — all six faces use the same texture:\n```json\n{\n  \"parent\": \"minecraft:block\u002Fcube_all\",\n  \"textures\": {\n    \"all\": \"minecraft:block\u002Fstone\"\n  }\n}\n```\n\nColumn block (like logs):\n```json\n{\n  \"parent\": \"minecraft:block\u002Fcube_column\",\n  \"textures\": {\n    \"end\": \"mypack:block\u002Fmy_pillar_top\",\n    \"side\": \"mypack:block\u002Fmy_pillar_side\"\n  }\n}\n```\n\nDifferent sides:\n```json\n{\n  \"parent\": \"minecraft:block\u002Fcube\",\n  \"textures\": {\n    \"up\":    \"mypack:block\u002Fmy_block_top\",\n    \"down\":  \"mypack:block\u002Fmy_block_bottom\",\n    \"north\": \"mypack:block\u002Fmy_block_side\",\n    \"south\": \"mypack:block\u002Fmy_block_side\",\n    \"east\":  \"mypack:block\u002Fmy_block_side\",\n    \"west\":  \"mypack:block\u002Fmy_block_side\",\n    \"particle\": \"mypack:block\u002Fmy_block_side\"\n  }\n}\n```\n\nCross model (flowers, plants):\n```json\n{\n  \"parent\": \"minecraft:block\u002Fcross\",\n  \"textures\": {\n    \"cross\": \"mypack:block\u002Fmy_flower\"\n  }\n}\n```\n\n### Custom geometry (elements)\n```json\n{\n  \"credit\": \"Custom model\",\n  \"ambientocclusion\": true,\n  \"textures\": {\n    \"0\": \"mypack:block\u002Fpanel\",\n    \"particle\": \"mypack:block\u002Fpanel\"\n  },\n  \"elements\": [\n    {\n      \"from\": [0, 0, 7],\n      \"to\": [16, 16, 9],\n      \"faces\": {\n        \"north\": { \"texture\": \"#0\", \"uv\": [0, 0, 16, 16] },\n        \"south\": { \"texture\": \"#0\", \"uv\": [0, 0, 16, 16] }\n      }\n    }\n  ],\n  \"display\": {\n    \"thirdperson_righthand\": {\n      \"rotation\": [75, 45, 0],\n      \"translation\": [0, 2.5, 0],\n      \"scale\": [0.375, 0.375, 0.375]\n    }\n  }\n}\n```\n\n> `from` and `to` are in 1\u002F16th block units (0–16). `uv` is `[x1, y1, x2, y2]` in 0–16 units.\n\n---\n\n## Item Models\n\n### Simple flat item\n```json\n{\n  \"parent\": \"minecraft:item\u002Fgenerated\",\n  \"textures\": {\n    \"layer0\": \"mypack:item\u002Fmy_item\"\n  }\n}\n```\n\n### Held item (in-hand model)\n```json\n{\n  \"parent\": \"minecraft:item\u002Fhandheld\",\n  \"textures\": {\n    \"layer0\": \"mypack:item\u002Fmy_sword\"\n  }\n}\n```\n\n### Two-layer item (colored like leather armor)\n```json\n{\n  \"parent\": \"minecraft:item\u002Fgenerated\",\n  \"textures\": {\n    \"layer0\": \"minecraft:item\u002Fleather_helmet\",\n    \"layer1\": \"minecraft:item\u002Fleather_helmet_overlay\"\n  }\n}\n```\n\n### Custom model data overrides (1.21.4 and prior)\nEach `predicate` entry routes to a different model based on `custom_model_data`:\n```json\n{\n  \"parent\": \"minecraft:item\u002Fhandheld\",\n  \"textures\": {\n    \"layer0\": \"minecraft:item\u002Fstick\"\n  },\n  \"overrides\": [\n    { \"predicate\": { \"custom_model_data\": 1001 }, \"model\": \"mypack:item\u002Fmagic_wand\" },\n    { \"predicate\": { \"custom_model_data\": 1002 }, \"model\": \"mypack:item\u002Ffire_staff\" }\n  ]\n}\n```\n\n### 1.21.4+ Item Model (new format)\nIn 1.21.4, Mojang introduced a new item model system. Place model definitions at\n`assets\u002F\u003Cnamespace>\u002Fitems\u002F\u003Citem_name>.json`:\n```json\n{\n  \"model\": {\n    \"type\": \"minecraft:select\",\n    \"property\": \"minecraft:custom_model_data\",\n    \"fallback\": {\n      \"type\": \"minecraft:model\",\n      \"model\": \"minecraft:item\u002Fstick\"\n    },\n    \"cases\": [\n      {\n        \"when\": 1001,\n        \"model\": { \"type\": \"minecraft:model\", \"model\": \"mypack:item\u002Fmagic_wand\" }\n      }\n    ]\n  }\n}\n```\n\n---\n\n## Blockstate Definitions\n\n### Simple block (no variants)\n```json\n{\n  \"variants\": {\n    \"\": { \"model\": \"mypack:block\u002Fmy_block\" }\n  }\n}\n```\n\n### Facing block (4 rotations)\n```json\n{\n  \"variants\": {\n    \"facing=north\": { \"model\": \"mypack:block\u002Fmy_block\" },\n    \"facing=south\": { \"model\": \"mypack:block\u002Fmy_block\",  \"y\": 180 },\n    \"facing=east\":  { \"model\": \"mypack:block\u002Fmy_block\",  \"y\": 90  },\n    \"facing=west\":  { \"model\": \"mypack:block\u002Fmy_block\",  \"y\": 270 }\n  }\n}\n```\n\n### Random texture (multipart)\n```json\n{\n  \"variants\": {\n    \"\": [\n      { \"model\": \"minecraft:block\u002Fgrass_block\",  \"weight\": 3 },\n      { \"model\": \"minecraft:block\u002Fgrass_block_2\" }\n    ]\n  }\n}\n```\n\n### Multipart (slabs, fences, walls)\n```json\n{\n  \"multipart\": [\n    { \"apply\": { \"model\": \"mypack:block\u002Fmy_slab_bottom\" }, \"when\": { \"type\": \"bottom\" } },\n    { \"apply\": { \"model\": \"mypack:block\u002Fmy_slab_top\"    }, \"when\": { \"type\": \"top\"    } },\n    { \"apply\": { \"model\": \"mypack:block\u002Fmy_block\"        }, \"when\": { \"type\": \"double\" } }\n  ]\n}\n```\n\n---\n\n## Textures\n\n- Format: **PNG**, RGBA (32-bit)\n- Standard block\u002Fitem size: **16×16 px**\n- Textures can be larger (32×32, 64×64) — Minecraft scales them, but stick to powers of 2\n- Animation requires height = N × width (e.g., 16×64 for 4 frames)\n- Place block textures in `assets\u002F\u003Cnamespace>\u002Ftextures\u002Fblock\u002F`\n- Place item textures in `assets\u002F\u003Cnamespace>\u002Ftextures\u002Fitem\u002F`\n- All textures are referenced without the `.png` extension in JSON\n\n### Animated texture MCMETA\n`assets\u002Fminecraft\u002Ftextures\u002Fblock\u002Ffire_0.png.mcmeta`:\n```json\n{\n  \"animation\": {\n    \"frametime\": 2,\n    \"frames\": [0, 1, 2, 3, 4, 5, 6, 7]\n  }\n}\n```\nIf `frames` is omitted, all frames play sequentially. `frametime` is in game ticks (default 1).\n\n### GUI sprites (1.20.2+)\nPlace sprites at `assets\u002Fminecraft\u002Ftextures\u002Fgui\u002Fsprites\u002F\u003Ccategory>\u002F\u003Cname>.png`.\nReference them with `\u003Ccategory>\u002F\u003Cname>` in code\u002FJSON.\n\n---\n\n## Sounds\n\n### `assets\u002Fminecraft\u002Fsounds.json`\n```json\n{\n  \"my_sound.play\": {\n    \"sounds\": [\n      { \"name\": \"mypack:custom\u002Fmy_sound\", \"volume\": 1.0, \"pitch\": 1.0, \"weight\": 1 },\n      { \"name\": \"mypack:custom\u002Fmy_sound_alt\", \"weight\": 2 }\n    ],\n    \"category\": \"players\"\n  },\n  \"entity.player.levelup\": {\n    \"replace\": true,\n    \"sounds\": [\n      { \"name\": \"mypack:custom\u002Flevelup_replaced\", \"volume\": 0.75, \"pitch\": 1.0 }\n    ]\n  }\n}\n```\n\n- Sound files go in `assets\u002F\u003Cnamespace>\u002Fsounds\u002F` as `.ogg` files (Vorbis encoded)\n- Use `\"replace\": true` to replace vanilla sounds instead of adding to them\n- Categories: `master`, `music`, `record`, `weather`, `block`, `hostile`, `neutral`, `player`, `ambient`, `voice`\n\n---\n\n## Language Files\n\n`assets\u002Fminecraft\u002Flang\u002Fen_us.json`:\n```json\n{\n  \"block.mypack.my_block\": \"My Custom Block\",\n  \"item.mypack.my_item\": \"Magic Wand\",\n  \"entity.mypack.my_mob\": \"Forest Guardian\",\n  \"death.attack.mypack.laser\": \"%1$s was zapped by %2$s\"\n}\n```\n\n- Use the exact translation key format for your mod\u002Fdatapack namespace\n- File name is the locale code (e.g., `fr_fr.json`, `de_de.json`)\n- Always provide `en_us.json` as the primary fallback\n\n---\n\n## Fonts\n\n### `assets\u002Fminecraft\u002Ffont\u002Fdefault.json` — add glyph\n```json\n{\n  \"providers\": [\n    {\n      \"type\": \"bitmap\",\n      \"file\": \"mypack:font\u002Ficons.png\",\n      \"ascent\": 8,\n      \"height\": 9,\n      \"chars\": [\"\\uE000\", \"\\uE001\", \"\\uE002\"]\n    }\n  ]\n}\n```\n\nCustom icons via private use area (U+E000–U+F8FF). Reference in text with `\\uE000`.\nThe `icons.png` must have each character cell `height` pixels tall.\n\n---\n\n## OptiFine CIT (Custom Item Textures)\n\n> OptiFine-only feature. Does not work in vanilla or Iris.\n\n### `assets\u002Fminecraft\u002Foptifine\u002Fcit\u002Fmy_sword.properties`\n```properties\ntype=item\nitems=minecraft:diamond_sword\ntexture=my_sword_texture.png\nmodel=my_sword_model\nnbt.display.Name=ipattern:*Excalibur*\n```\n\nCommon CIT properties:\n- `type=item` — item texture override\n- `type=enchantment` — custom enchantment glint\n- `type=armor` — armor overlay\n- `items=` — comma-separated item IDs\n- `damage=` — damage range (e.g., `0-50%`)\n- `nbt.display.Name=ipattern:*text*` — NBT name filter\n- `texture=` — PNG file (relative to `.properties` file)\n- `model=` — JSON model file (relative)\n\n---\n\n## Iris Shaders (Resource Pack Method)\n\nIris shaders live inside a resource pack at:\n```\nassets\u002Firis\u002F\n    shaders\u002F\n        core\u002F\n            rendertype_terrain.vsh    ← vertex shader override\n            rendertype_terrain.fsh    ← fragment shader override\n```\n\nFull shader pack distribution uses the `.zip` format with a `shaders\u002F` root folder\n(not inside `assets\u002F`). Resource pack shader overrides target specific render types.\n\n---\n\n## Installation\n\n```bash\n# Singleplayer: place in\n~\u002F.minecraft\u002Fresourcepacks\u002Fmy-pack\u002F\n# or\n~\u002F.minecraft\u002Fresourcepacks\u002Fmy-pack.zip\n\n# Server-side (forces on clients):\n# Set in server.properties:\nresource-pack=https:\u002F\u002Fexample.com\u002Fmy-pack.zip\nresource-pack-sha1=\u003Csha1 hash>\nresource-pack-prompt={\"text\":\"Required pack\",\"color\":\"gold\"}\n```\n\n---\n\n## Common Issues\n\n| Problem | Cause | Fix |\n|---------|-------|-----|\n| Model not showing | Wrong JSON path or syntax error | Check `assets\u002F\u003Cnamespace>\u002Fmodels\u002F` path; validate JSON |\n| Black\u002Fpink checkerboard | Texture path wrong or missing | Check `textures\u002F` path, file extension not in JSON |\n| Blockstate not applying | Wrong state property name | Match exact property names from `\u002Fblockdata` |\n| Animation not working | Wrong MCMETA location | Must be same folder as texture, named `texture.png.mcmeta` |\n| Custom sound not playing | Not in `sounds.json` | Register sound event in `sounds.json`, match namespace |\n| Pack not loading | Wrong `pack_format` or `min_format` \u002F `max_format` values | Update `pack.mcmeta` for the exact 1.21.x patch |\n\n## Validator Script\n\nUse the bundled validator script before shipping a resource-pack update:\n\n```bash\n# Run from the installed skill directory (for example `.claude\u002Fskills\u002Fminecraft-resource-pack`):\n.\u002Fscripts\u002Fvalidate-resource-pack.sh --root \u002Fpath\u002Fto\u002Fresource-pack\n\n# Strict mode treats warnings as failures:\n.\u002Fscripts\u002Fvalidate-resource-pack.sh --root \u002Fpath\u002Fto\u002Fresource-pack --strict\n```\n\nWhat it checks:\n- JSON validity for `pack.mcmeta` and `assets\u002F**\u002F*.json`\n- Model\u002Fblockstate\u002Ffont\u002Fsounds references resolve to real files\n- Every `*.png.mcmeta` has a matching `*.png`\n\n---\n\n## References\n\n- Minecraft Wiki — Resource pack: https:\u002F\u002Fminecraft.wiki\u002Fw\u002FResource_pack\n- Minecraft Wiki — Model: https:\u002F\u002Fminecraft.wiki\u002Fw\u002FTutorials\u002FModels\n- Minecraft Wiki — Blockstates: https:\u002F\u002Fminecraft.wiki\u002Fw\u002FBlockstate_(Java_Edition)\n- Pack format history: https:\u002F\u002Fminecraft.wiki\u002Fw\u002FPack_format\n- Misode's model viewer: https:\u002F\u002Fmisode.github.io\u002F\n- OptiFine CIT guide: https:\u002F\u002Foptifine.readthedocs.io\u002Fcit.html\n",{"name":5,"description":7},"main","6fdc6b3043932f6cec4d0a2d51630b19d220dc0d",".codex\u002Fskills\u002Fminecraft-resource-pack",1,"https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle","https:\u002F\u002Fgithub.com\u002FAIKUSAN","Creating virtual worlds, one line of code at a time.","2026-10-03 22:21:47",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add AIKUSAN\u002Fminecraft-agent-skills-bundle --skill minecraft-resource-pack",{"tool":38,"command":39},"bunx","bunx skills add AIKUSAN\u002Fminecraft-agent-skills-bundle --skill minecraft-resource-pack",{"tool":41,"command":42},"pnpm","pnpm dlx skills add AIKUSAN\u002Fminecraft-agent-skills-bundle --skill minecraft-resource-pack","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002F.codex\u002Fskills\u002Fminecraft-resource-pack\u002FSKILL.md",true,[46,52],{"path":47,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":50,"sourceHtmlUrl":51},"scripts\u002Fjq-shim.mjs","SCRIPT","脚本",6764,"https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002F.codex\u002Fskills\u002Fminecraft-resource-pack\u002Fscripts\u002Fjq-shim.mjs",{"path":53,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":54,"sourceHtmlUrl":55},"scripts\u002Fvalidate-resource-pack.sh",7363,"https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002F.codex\u002Fskills\u002Fminecraft-resource-pack\u002Fscripts\u002Fvalidate-resource-pack.sh",[57,64,70,76,82,88],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":19},"01M74FXYYEC9NE1YFJC891WFT2","minecraft-ci-release","Fixture with valid workflow YAML but a warning-only secrets section.","https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fwarn-only\u002FSKILL.md",[],[],{"skillNo":65,"name":66,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":19},"01M74FXXD5F0J0VA58R53Z8CA3","valid","https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fvalid\u002FSKILL.md",[],[],{"skillNo":71,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":19},"01M74FXVT401WRMHEMCPJKA89X","non-workflow-yaml","https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fnon-workflow-yaml\u002FSKILL.md",[],[],{"skillNo":77,"name":59,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M74FXTBGQGEPGMX81DFY7FY9","Fixture with valid multiline flow collections in workflow YAML.","https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fmultiline-flow\u002FSKILL.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":19},"01M74FXSAW6GDZ3J3S9FBGC1D6","invalid","https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Finvalid\u002FSKILL.md",[],[],{"skillNo":89,"name":59,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M74FXQRKYD2DDQDN0HR1TE10","Fixture with malformed workflow YAML.","https:\u002F\u002Fgithub.com\u002FAIKUSAN\u002Fminecraft-agent-skills-bundle\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Finvalid-yaml\u002FSKILL.md",[],[]]