[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6D2KZVT3ANY5QWDEY07JGC1":3,"skill-same:01M6D2KZVT3ANY5QWDEY07JGC1":81},{"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":23,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6D2KZVT3ANY5QWDEY07JGC1","minecraft-resource-pack",null,"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.","Jahrome907\u002Fminecraft-agent-skills","Jahrome907","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F222458345?v=4","01M6D2JFFY1EQCC572G6G3X1R2","Joe ","01M6D2JFS2EE87QN8QCFVFY6M8",199,"MIT","https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fminecraft-resource-pack\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36],"minecraft","minecraft resource pack","debug","create","code","shaders","metadata","Audio","assets","use","gameplay","models","visual","2026-11-10 10:12:30",false,"---\nname: minecraft-resource-pack\ndescription: \"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.\"\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, and fonts. No Java or mod\nloader is required for those vanilla assets.\n\n### Routing Boundaries\n- `Use when`: the deliverable is visual\u002Faudio assets (textures, models, sounds, fonts) 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\n---\n\n## Pack Metadata\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.1              | `min_format: [84, 0]`, `max_format: [84, 0]` |\n| 26.2              | `min_format: [88, 0]`, `max_format: [88, 0]` |\n| 26.3              | `min_format: [97, 1]`, `max_format: [97, 1]` |\n\nUse legacy `pack_format` only for resource formats below 65 (through 1.21.8).\nResource format 65 and later require both `min_format` and `max_format`; use\n`[major, minor]` for exact patch targeting, including `.0` such as `[84, 0]`.\nAn integer or `[major]` `min_format` means `[major, 0]`; an integer or\n`[major]` `max_format` permits every minor version on that major line. Do not\nwrite decimal JSON numbers. A legacy-only pack can use its integer\n`pack_format` alone. A range whose `min_format` includes a legacy format needs\ninteger `pack_format` and `supported_formats`; do not include\n`supported_formats` for a modern-only range.\n\n---\n\n## Directory Layout\n\n```\nmy-pack\u002F\n├── pack.mcmeta\n├── pack.png                   ← square PNG 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        ├── items\u002F              ← 1.21.4+ item model definitions\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```\n\nClient-mod-specific files such as OptiFine CIT and Iris shader packs use their\nown formats. Read [conditional assets](references\u002Fconditional-assets.md) before\nadding them.\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 \u002F 1.21.10\n\n```json\n{\n  \"pack\": {\n    \"min_format\": [69, 0],\n    \"max_format\": [69, 0],\n    \"description\": \"My Custom Resource Pack v1.0\"\n  }\n}\n```\n\n### 1.21.11\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### 26.3\n\n```json\n{\n  \"pack\": {\n    \"min_format\": [97, 1],\n    \"max_format\": [97, 1],\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\nFor **1.21.4 and later**, use item definitions in\n`assets\u002F\u003Cnamespace>\u002Fitems\u002F`. For **1.21.3 and earlier**, use the legacy model\n`overrides` array. Read [conditional assets](references\u002Fconditional-assets.md)\nfor the string-based current `custom_model_data` selector and the legacy numeric\npredicate; their values are not interchangeable.\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 (weighted variants)\n```json\n{\n  \"variants\": {\n    \"\": [\n      { \"model\": \"minecraft:block\u002Fstone\", \"weight\": 3 },\n      { \"model\": \"minecraft:block\u002Fandesite\" }\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- By default, animation uses square frames stacked vertically (e.g., 16×64 for 4 frames); explicit `width` \u002F `height` supports other frame layouts\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### 26.1 block-model texture entries\nFor 26.1, a block-model `textures` entry may remain a sprite string or use an\nobject. The object must have a string `sprite`; `force_translucent`, when set,\nmust be a boolean.\n\n```json\n{\n  \"textures\": {\n    \"all\": {\n      \"sprite\": \"mypack:block\u002Ffrosted_panel\",\n      \"force_translucent\": true\n    }\n  }\n}\n```\n\nBoth forms identify a sprite without `.png`. Use `force_translucent` only when\nthe geometry must render in the translucent pass despite its sprite pixels.\n\n---\n\n## Sounds\n\nAn event's namespace comes from the namespace containing `sounds.json`; a\nsound entry's `name` identifies the sound-file namespace. Sound files are Vorbis\n`.ogg` under `assets\u002F\u003Cnamespace>\u002Fsounds\u002F`. Read\n[conditional assets](references\u002Fconditional-assets.md) for a correct event\nexample, aliases, sound-source selection, and replacement behavior.\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\nRead [conditional assets](references\u002Fconditional-assets.md) for bitmap provider\nlayout and private-use icon guidance.\n\n---\n\n## OptiFine and shaders\n\nOptiFine CIT and Iris shader packs have client-mod-specific formats. Read\n[conditional assets](references\u002Fconditional-assets.md) before adding either;\nthey are not portable vanilla resource-pack features.\n\n---\n\n## Installation\n\nSingleplayer: place the folder or ZIP under the client's resource-pack directory:\n\n```text\n~\u002F.minecraft\u002Fresourcepacks\u002Fmy-pack\u002F\n~\u002F.minecraft\u002Fresourcepacks\u002Fmy-pack.zip\n```\n\nTo require the pack on a server, set these `server.properties` values. Use the\nZIP's actual SHA-1 and a direct download URL:\n\n```properties\nresource-pack=https:\u002F\u002Fexample.com\u002Fmy-pack.zip\nresource-pack-sha1=\u003Csha1 hash>\nresource-pack-prompt={\"text\":\"Required pack\",\"color\":\"gold\"}\nrequire-resource-pack=true\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 | Use F3 to inspect block state; use `\u002Fdata get block \u003Cx> \u003Cy> \u003Cz>` for block-entity NBT |\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 Minecraft release |\n\n## Validator Script\n\nUse the bundled validator script before shipping a resource-pack update:\n\nUnbundled references to another namespace's models, textures, sounds, or fonts\nare warnings requiring runtime verification with the dependency present. Missing\nfiles in the current namespace fail; strict mode also fails unresolved warnings.\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- Legacy versus modern `pack.mcmeta` field shape, including integer, `[major]`, and `[major, minor]` versions\n- Model\u002Fblockstate\u002Ffont\u002Fsounds references resolve to real files\n- Current `custom_model_data` select cases use strings; 26.1 texture objects use a string `sprite` and optional boolean `force_translucent`\n- Same-namespace `type: \"event\"` sound aliases name an event in that `sounds.json`\n- Every `*.png.mcmeta` has a matching `*.png`\n\nThe validator cannot resolve a sound event owned by another namespace, or prove\nthat a command or mod code invokes an event with the intended sound source.\nThose cases warn and require an exact-client runtime check.\n\n---\n\n## References\n\n- [Mojang: Java Edition 1.21.4](https:\u002F\u002Fwww.minecraft.net\u002Fen-us\u002Farticle\u002Fminecraft-java-edition-1-21-4)\n- [Mojang: Java Edition 1.21.9](https:\u002F\u002Fwww.minecraft.net\u002Fen-us\u002Farticle\u002Fminecraft-java-edition-1-21-9)\n- [Mojang: Java Edition 26.1](https:\u002F\u002Fwww.minecraft.net\u002Fen-us\u002Farticle\u002Fminecraft-java-edition-26-1)\n- [NeoForge 1.21.8: Sounds](https:\u002F\u002Fdocs.neoforged.net\u002Fdocs\u002F1.21.8\u002Fresources\u002Fclient\u002Fsounds\u002F)\n- Misode's model viewer: https:\u002F\u002Fmisode.github.io\u002F\n- OptiFine CIT guide: https:\u002F\u002Foptifine.readthedocs.io\u002Fcit.html\n\n- [Mojang: Java Edition 26.3](https:\u002F\u002Fwww.minecraft.net\u002Fen-us\u002Farticle\u002Fminecraft-java-edition-26-3)\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, and fonts. No Java or mod\nloader is required for those vanilla assets.\n\n### Routing Boundaries\n- `Use when`: the deliverable is visual\u002Faudio assets (textures, models, sounds, fonts) 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\n---\n\n## Pack Metadata\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.1              | `min_format: [84, 0]`, `max_format: [84, 0]` |\n| 26.2              | `min_format: [88, 0]`, `max_format: [88, 0]` |\n| 26.3              | `min_format: [97, 1]`, `max_format: [97, 1]` |\n\nUse legacy `pack_format` only for resource formats below 65 (through 1.21.8).\nResource format 65 and later require both `min_format` and `max_format`; use\n`[major, minor]` for exact patch targeting, including `.0` such as `[84, 0]`.\nAn integer or `[major]` `min_format` means `[major, 0]`; an integer or\n`[major]` `max_format` permits every minor version on that major line. Do not\nwrite decimal JSON numbers. A legacy-only pack can use its integer\n`pack_format` alone. A range whose `min_format` includes a legacy format needs\ninteger `pack_format` and `supported_formats`; do not include\n`supported_formats` for a modern-only range.\n\n---\n\n## Directory Layout\n\n```\nmy-pack\u002F\n├── pack.mcmeta\n├── pack.png                   ← square PNG 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        ├── items\u002F              ← 1.21.4+ item model definitions\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```\n\nClient-mod-specific files such as OptiFine CIT and Iris shader packs use their\nown formats. Read [conditional assets](references\u002Fconditional-assets.md) before\nadding them.\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 \u002F 1.21.10\n\n```json\n{\n  \"pack\": {\n    \"min_format\": [69, 0],\n    \"max_format\": [69, 0],\n    \"description\": \"My Custom Resource Pack v1.0\"\n  }\n}\n```\n\n### 1.21.11\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### 26.3\n\n```json\n{\n  \"pack\": {\n    \"min_format\": [97, 1],\n    \"max_format\": [97, 1],\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\nFor **1.21.4 and later**, use item definitions in\n`assets\u002F\u003Cnamespace>\u002Fitems\u002F`. For **1.21.3 and earlier**, use the legacy model\n`overrides` array. Read [conditional assets](references\u002Fconditional-assets.md)\nfor the string-based current `custom_model_data` selector and the legacy numeric\npredicate; their values are not interchangeable.\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 (weighted variants)\n```json\n{\n  \"variants\": {\n    \"\": [\n      { \"model\": \"minecraft:block\u002Fstone\", \"weight\": 3 },\n      { \"model\": \"minecraft:block\u002Fandesite\" }\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- By default, animation uses square frames stacked vertically (e.g., 16×64 for 4 frames); explicit `width` \u002F `height` supports other frame layouts\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### 26.1 block-model texture entries\nFor 26.1, a block-model `textures` entry may remain a sprite string or use an\nobject. The object must have a string `sprite`; `force_translucent`, when set,\nmust be a boolean.\n\n```json\n{\n  \"textures\": {\n    \"all\": {\n      \"sprite\": \"mypack:block\u002Ffrosted_panel\",\n      \"force_translucent\": true\n    }\n  }\n}\n```\n\nBoth forms identify a sprite without `.png`. Use `force_translucent` only when\nthe geometry must render in the translucent pass despite its sprite pixels.\n\n---\n\n## Sounds\n\nAn event's namespace comes from the namespace containing `sounds.json`; a\nsound entry's `name` identifies the sound-file namespace. Sound files are Vorbis\n`.ogg` under `assets\u002F\u003Cnamespace>\u002Fsounds\u002F`. Read\n[conditional assets](references\u002Fconditional-assets.md) for a correct event\nexample, aliases, sound-source selection, and replacement behavior.\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\nRead [conditional assets](references\u002Fconditional-assets.md) for bitmap provider\nlayout and private-use icon guidance.\n\n---\n\n## OptiFine and shaders\n\nOptiFine CIT and Iris shader packs have client-mod-specific formats. Read\n[conditional assets](references\u002Fconditional-assets.md) before adding either;\nthey are not portable vanilla resource-pack features.\n\n---\n\n## Installation\n\nSingleplayer: place the folder or ZIP under the client's resource-pack directory:\n\n```text\n~\u002F.minecraft\u002Fresourcepacks\u002Fmy-pack\u002F\n~\u002F.minecraft\u002Fresourcepacks\u002Fmy-pack.zip\n```\n\nTo require the pack on a server, set these `server.properties` values. Use the\nZIP's actual SHA-1 and a direct download URL:\n\n```properties\nresource-pack=https:\u002F\u002Fexample.com\u002Fmy-pack.zip\nresource-pack-sha1=\u003Csha1 hash>\nresource-pack-prompt={\"text\":\"Required pack\",\"color\":\"gold\"}\nrequire-resource-pack=true\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 | Use F3 to inspect block state; use `\u002Fdata get block \u003Cx> \u003Cy> \u003Cz>` for block-entity NBT |\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 Minecraft release |\n\n## Validator Script\n\nUse the bundled validator script before shipping a resource-pack update:\n\nUnbundled references to another namespace's models, textures, sounds, or fonts\nare warnings requiring runtime verification with the dependency present. Missing\nfiles in the current namespace fail; strict mode also fails unresolved warnings.\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- Legacy versus modern `pack.mcmeta` field shape, including integer, `[major]`, and `[major, minor]` versions\n- Model\u002Fblockstate\u002Ffont\u002Fsounds references resolve to real files\n- Current `custom_model_data` select cases use strings; 26.1 texture objects use a string `sprite` and optional boolean `force_translucent`\n- Same-namespace `type: \"event\"` sound aliases name an event in that `sounds.json`\n- Every `*.png.mcmeta` has a matching `*.png`\n\nThe validator cannot resolve a sound event owned by another namespace, or prove\nthat a command or mod code invokes an event with the intended sound source.\nThose cases warn and require an exact-client runtime check.\n\n---\n\n## References\n\n- [Mojang: Java Edition 1.21.4](https:\u002F\u002Fwww.minecraft.net\u002Fen-us\u002Farticle\u002Fminecraft-java-edition-1-21-4)\n- [Mojang: Java Edition 1.21.9](https:\u002F\u002Fwww.minecraft.net\u002Fen-us\u002Farticle\u002Fminecraft-java-edition-1-21-9)\n- [Mojang: Java Edition 26.1](https:\u002F\u002Fwww.minecraft.net\u002Fen-us\u002Farticle\u002Fminecraft-java-edition-26-1)\n- [NeoForge 1.21.8: Sounds](https:\u002F\u002Fdocs.neoforged.net\u002Fdocs\u002F1.21.8\u002Fresources\u002Fclient\u002Fsounds\u002F)\n- Misode's model viewer: https:\u002F\u002Fmisode.github.io\u002F\n- OptiFine CIT guide: https:\u002F\u002Foptifine.readthedocs.io\u002Fcit.html\n\n- [Mojang: Java Edition 26.3](https:\u002F\u002Fwww.minecraft.net\u002Fen-us\u002Farticle\u002Fminecraft-java-edition-26-3)\n",{"name":5,"description":7},"main","22d61ce6b7a0c5f215008824aa6b94ecc73f2a43",".agents\u002Fskills\u002Fminecraft-resource-pack",11,"https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills","https:\u002F\u002Fgithub.com\u002FJahrome907","joe-o.com","Product engineer building field tools, workflow automation, and polished web applications.","2026-10-30 08:19:45",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add Jahrome907\u002Fminecraft-agent-skills --skill minecraft-resource-pack",{"tool":57,"command":58},"bunx","bunx skills add Jahrome907\u002Fminecraft-agent-skills --skill minecraft-resource-pack",{"tool":60,"command":61},"pnpm","pnpm dlx skills add Jahrome907\u002Fminecraft-agent-skills --skill minecraft-resource-pack","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fminecraft-resource-pack\u002FSKILL.md",true,[65,71,77],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"references\u002Fconditional-assets.md","REFERENCE","参考文档",3808,"https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fminecraft-resource-pack\u002Freferences\u002Fconditional-assets.md",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"scripts\u002Fjq-shim.mjs","SCRIPT","脚本",12985,"https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fminecraft-resource-pack\u002Fscripts\u002Fjq-shim.mjs",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"scripts\u002Fvalidate-resource-pack.sh",14219,"https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fminecraft-resource-pack\u002Fscripts\u002Fvalidate-resource-pack.sh",[82,98,103,115,123,130],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":37},"01M6D2TV8CBAMB70CEC19VMVX5","minecraft-ci-release","Fixture with valid workflow YAML and a warning-only glob pattern.","https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fwarn-only\u002FSKILL.md",[],[89,24,90,91,92,93,94,95,96,97],"minecraft ci release","ci","release","fixture","pattern","only","yaml","workflow","valid",{"skillNo":99,"name":97,"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":100,"categories":101,"keywords":102,"publishedAt":37},"01M6D2TR1N9TNJPTRB66WDCY8X","https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fvalid\u002FSKILL.md",[],[97],{"skillNo":104,"name":84,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":113,"publishedAt":37},"01M6D2TNBM97CCTYFCDKCFQ4AR","Fixture for a secretless workflow that passes strict validation.","https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fsecretless-strict\u002FSKILL.md",[108],{"categoryNo":109,"categoryName":110,"taxonomyType":111,"taxonomyTypeDesc":112},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[89,24,90,91,92,114,96],"validation",{"skillNo":116,"name":117,"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":118,"categories":119,"keywords":121,"publishedAt":37},"01M6D2TJ9FX4FH1TMGKQPYNZQX","non-workflow-yaml","https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fnon-workflow-yaml\u002FSKILL.md",[120],{"categoryNo":109,"categoryName":110,"taxonomyType":111,"taxonomyTypeDesc":112},[122,95,96],"non workflow yaml",{"skillNo":124,"name":84,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":37},"01M6D2TFE807BSXTEREYPWFY3G","Fixture with a mutable remote action reference.","https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fmutable-action\u002FSKILL.md",[],[89,24,90,91,129,92],"reference",{"skillNo":131,"name":84,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":37},"01M6D2TBYJ0SM3B79908DH9ECE","Fixture with valid multiline flow collections in workflow YAML.","https:\u002F\u002Fgithub.com\u002FJahrome907\u002Fminecraft-agent-skills\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalidators\u002Fci-release\u002Fmultiline-flow\u002FSKILL.md",[],[89,91,24,90,96,95,136,92,137,97],"flow","collections"]