{"slug":"minecraft-world-generation-2","title":"minecraft-world-generation","summary":"Create and debug Minecraft 26.x and legacy 1.21.x world generation for datapacks, NeoForge, or Fabric, including biomes, dimensions, features, structures, and biome modifiers. Use for worldgen data or registration, not general gameplay systems.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-07T18:38:48.803743Z","repo":{"url":"https://github.com/Jahrome907/minecraft-agent-skills","stars":151,"forks":9,"license":"MIT","updatedAt":"2026-09-13T05:52:30Z"},"bodyHtml":"<hr>\n<h2>name: minecraft-world-generation\ndescription: \"Create and debug Minecraft 26.x and legacy 1.21.x world generation for datapacks, NeoForge, or Fabric, including biomes, dimensions, features, structures, and biome modifiers. Use for worldgen data or registration, not general gameplay systems.\"</h2>\n<h1>Minecraft World Generation</h1>\n<p>Use this skill for biome, dimension, feature, or structure data and their\nregistration. Use <code>minecraft-datapack</code> for non-worldgen data and\n<code>minecraft-modding</code> for non-worldgen gameplay code.</p>\n<h2>Routing Boundaries</h2>\n<ul>\n<li><code>Use when</code>: the task changes worldgen data, registration, or injection.</li>\n<li><code>Do not use when</code>: the task is non-worldgen datapack work (<code>minecraft-datapack</code>).</li>\n<li><code>Do not use when</code>: the task is non-worldgen mod systems (<code>minecraft-modding</code>).</li>\n</ul>\n<h2>Choose the delivery path</h2>\n<table>\n<thead>\n<tr>\n<th>Approach</th>\n<th>Best When</th>\n<th>Platform</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Datapack JSON</td>\n<td>Change data supplied by a pack</td>\n<td>Vanilla, any server</td>\n</tr>\n<tr>\n<td><strong>Mod + Datagen</strong></td>\n<td>Registering new biomes/dimensions, code-driven</td>\n<td>NeoForge / Fabric</td>\n</tr>\n<tr>\n<td><strong>Biome Modifier (NeoForge)</strong></td>\n<td>Adding features/spawns to existing biomes</td>\n<td>NeoForge</td>\n</tr>\n<tr>\n<td><strong>BiomeModification API (Fabric)</strong></td>\n<td>Adding features/spawns to existing biomes</td>\n<td>Fabric</td>\n</tr>\n</tbody>\n</table>\n<p>Worldgen registries are datapack registries: their files load at world load and\ntheir registry path determines the data path. Read the <a href=\"https://docs.neoforged.net/docs/concepts/registries/\">NeoForge registry\nguide</a> before choosing a\nmod-specific registry path.</p>\n<h2>Version boundary</h2>\n<p>Treat Minecraft 26.x as the current lane for new work. Use Java 25 and start\neach JSON schema from the exact target's vanilla data or generated output. Do\nnot copy a 1.21 shape into a 26.x pack merely because it parses as JSON.</p>\n<p>Preserve an established 1.21.x project on Java 21 and its matching schema unless\nthe task explicitly includes an upgrade. Do not mix compatibility lanes.</p>\n<p>The <a href=\"https://docs.neoforged.net/primer/docs/26.1/\">26.1 migration primer</a>\nremoves <code>minecraft:random_patch</code> and <code>minecraft:no_bonemeal_flower</code>. It replaces\nthe random-patch pattern with a separate <code>minecraft:simple_block</code> configured\nfeature and placements for count, random offset, and block-predicate filtering.\nInspect the relevant primer section before migrating code or data.</p>\n<p>Read <a href=\"references/legacy-1.21-worldgen-json.md\">legacy 1.21 JSON patterns</a> only\nwhen the project targets that compatibility lane. Those examples are not\nrelease artifacts for 26.x.</p>\n<hr>\n<h2>Data layout and reference graph</h2>\n<pre><code>data/&lt;namespace&gt;/\n├── worldgen/\n│   ├── biome/\n│   │   └── my_biome.json\n│   ├── configured_feature/\n│   │   └── my_ore.json\n│   ├── placed_feature/\n│   │   └── my_ore_placed.json\n│   ├── noise_settings/\n│   │   └── my_dimension_noise.json\n│   ├── structure/\n│   │   └── my_structure.json\n│   ├── structure_set/\n│   │   └── my_structures.json\n│   ├── processor_list/\n│   │   └── my_processors.json\n│   ├── template_pool/\n│   │   └── my_pool.json\n│   └── carver/\n│       └── my_carver.json\n├── dimension/\n│   └── my_dimension.json\n├── dimension_type/\n│   └── my_type.json\n├── tags/\n│   └── worldgen/\n│       └── biome/\n│           └── is_forest.json\n└── neoforge/\n    └── biome_modifier/      (NeoForge mod only)\n        └── add_ores.json\n</code></pre>\n<p>Build and review the graph from its leaves upward:</p>\n<ol>\n<li>Define a configured feature, then its placed feature.</li>\n<li>Reference placed features from a biome or biome modifier at the intended\ndecoration step.</li>\n<li>Define a structure, then its structure set; a jigsaw structure also needs a\ntemplate pool, processor list, and structure template.</li>\n<li>Define a dimension type and noise settings before a dimension that references\nthem.</li>\n</ol>\n<p>Use fully qualified identifiers across namespaces. An external <code>minecraft:</code> or\ndependency reference is valid when that dependency supplies the registry entry;\ndo not create a local copy merely to satisfy static checking. If the same pack\ncontains that external namespace and registry directory, treat it as local and\nverify the target exists.</p>\n<hr>\n<h2>Biomes and dimensions</h2>\n<p>For 26.x biome and dimension data, use the exact target's vanilla data or\ndatagen output as the schema source. The older <code>effects</code> and dimension-type\nfields do not model newer environment behavior. The 11 decoration steps still\norganize placed features; choose the semantically appropriate step and keep ore\nplacement in <code>underground_ores</code>.</p>\n<p>The version-labeled 1.21.5 biome and dimension examples are in\n<a href=\"references/legacy-1.21-worldgen-json.md\">legacy 1.21 JSON patterns</a>.</p>\n<h2>26.x feature pattern</h2>\n<p>For the 26.1 replacement for a simple random patch, the migration primer shows\na <code>simple_block</code> configured feature and a placed feature with count, random\noffset, and a block-predicate filter. Adapt the exact values and block state to\nthe target release's generated data.</p>\n<p>At <code>data/&lt;namespace&gt;/worldgen/configured_feature/my_plant.json</code>:</p>\n<pre><code>{\n  \"type\": \"minecraft:simple_block\",\n  \"config\": {\n    \"to_place\": {\n      \"type\": \"minecraft:simple_state_provider\",\n      \"state\": { \"Name\": \"minecraft:sweet_berry_bush\", \"Properties\": { \"age\": \"3\" } }\n    }\n  }\n}\n</code></pre>\n<p>At <code>data/&lt;namespace&gt;/worldgen/placed_feature/my_plant.json</code>:</p>\n<pre><code>{\n  \"feature\": \"&lt;namespace&gt;:my_plant\",\n  \"placement\": [\n    { \"type\": \"minecraft:count\", \"count\": 96 },\n    {\n      \"type\": \"minecraft:random_offset\",\n      \"xz_spread\": { \"type\": \"minecraft:trapezoid\", \"min\": -7, \"max\": 7, \"plateau\": 0 },\n      \"y_spread\": { \"type\": \"minecraft:trapezoid\", \"min\": -3, \"max\": 3, \"plateau\": 0 }\n    },\n    {\n      \"type\": \"minecraft:block_predicate_filter\",\n      \"predicate\": {\n        \"type\": \"minecraft:all_of\",\n        \"predicates\": [\n          { \"type\": \"minecraft:matching_block_tag\", \"tag\": \"minecraft:air\" },\n          { \"type\": \"minecraft:matching_blocks\", \"blocks\": \"minecraft:grass_block\", \"offset\": [0, -1, 0] }\n        ]\n      }\n    }\n  ]\n}\n</code></pre>\n<hr>\n<h2>NeoForge biome modifiers</h2>\n<p>Biome modifiers load from\n<code>data/&lt;modid&gt;/neoforge/biome_modifier/&lt;path&gt;.json</code>. They can target a biome id\nor tag and add or remove placed features, among other changes. The current\n<a href=\"https://docs.neoforged.net/docs/worldgen/biomemodifier/\">Biome Modifiers guide</a>\ndocuments their schemas, decoration steps, and datagen.</p>\n<p>For <code>neoforge:add_features</code>, <code>features</code> accepts a placed-feature id, list, or\ntag. Vanilla placed features may be referenced in biome JSON or added with a\nmodifier, but NeoForge cautions against doing both because feature-order cycles\ncan crash world loading. Prefer a copy under the mod namespace when an injected\nvanilla feature would create that risk.</p>\n<p>When targeting a biome from an optional dependency, put the target in a biome\ntag entry with <code>required: false</code>, then use that tag in the modifier. This lets\nthe pack load when the dependency is absent.</p>\n<hr>\n<h2>Structures and dimensions</h2>\n<p>For any current release, derive structure, template-pool, dimension, and\ndimension-type JSON from that release's vanilla data or datagen output. Confirm\nthe reference graph before launching a test world:</p>\n<ul>\n<li><code>structure_set</code> references <code>structure</code>.</li>\n<li>Jigsaw <code>start_pool</code> references <code>template_pool</code>; each single-pool element\nreferences its structure template and processor list.</li>\n<li><code>dimension.type</code> references <code>dimension_type</code>; a noise generator's string\n<code>settings</code> references <code>worldgen/noise_settings</code>.</li>\n</ul>\n<p>For Fabric registration or mod datagen, use the exact loader and API version's\ndocumentation rather than copying 1.21 code into a 26.x project.</p>\n<p>The detailed 1.21 structure and dimension examples are in\n<a href=\"references/legacy-1.21-worldgen-json.md\">legacy 1.21 JSON patterns</a>.</p>\n<hr>\n<h2>Development Workflow</h2>\n<ol>\n<li>Create or edit worldgen JSON files in <code>data/&lt;namespace&gt;/worldgen/</code> (or equivalent mod resources path).</li>\n<li>Run the bundled validator to catch JSON and cross-reference errors before loading:\n<pre><code>./scripts/validate-worldgen-json.sh --root /path/to/datapack-or-mod-resources\n# Strict mode treats warnings as failures:\n./scripts/validate-worldgen-json.sh --root /path/to/datapack-or-mod-resources --strict\n</code></pre>\n</li>\n<li>Fix any reported errors and re-validate until clean. The validator checks:\n<ul>\n<li>JSON validity for <code>worldgen/**</code> and <code>neoforge/biome_modifier/**</code></li>\n<li>Cross-reference integrity for <code>placed_feature -&gt; configured_feature</code></li>\n<li>Cross-reference integrity for <code>structure_set -&gt; structure</code> and biome/biome_modifier feature targets</li>\n<li>Cross-reference integrity for <code>jigsaw structure -&gt; start_pool</code> and <code>template_pool -&gt; structure template / processor_list</code></li>\n</ul>\n</li>\n<li>Compare biome and dimension-type JSON against the exact target's vanilla\nregistry shape before in-game testing. The helper does not run Mojang codecs:\nvalid JSON and local references do not prove that fields such as <code>carvers</code>,\n<code>effects</code>, or dimension settings match that release's schema.</li>\n<li>In-game biome and structure testing:\n<pre><code>/locate structure &lt;namespace&gt;:my_structure\n/locate biome &lt;namespace&gt;:my_biome\n/place feature &lt;namespace&gt;:my_ore\n</code></pre>\n<code>place feature</code> takes a configured-feature ID, not its placed-feature wrapper.\nSee Mojang's <a href=\"https://www.minecraft.net/en-us/article/the-wild-update-out-today-java\">place command reference in the 1.19 release notes</a>.</li>\n<li>For dimension testing, use <code>/execute in</code> (dimension must exist at world load, not added via <code>/reload</code>):\n<pre><code>execute in &lt;namespace&gt;:my_dimension run tp @s 0 100 0\n</code></pre>\n</li>\n<li>Check <code>latest.log</code> for worldgen errors (missing biome references, malformed noise settings).</li>\n<li>Note: <code>/reload</code> refreshes datapack JSON but does <strong>not</strong> re-generate already-generated chunks. Test new worldgen in a fresh world or newly generated chunks. For existing test worlds, use a disposable copy and a purpose-built chunk reset/regeneration workflow; <code>/fill</code> only replaces blocks and is not a substitute for world generation.</li>\n</ol>\n<hr>\n<h2>References</h2>\n<ul>\n<li>Minecraft Wiki — World generation: <a href=\"https://minecraft.wiki/w/Custom_world_generation\">https://minecraft.wiki/w/Custom_world_generation</a></li>\n<li>Minecraft Wiki — Biome: <a href=\"https://minecraft.wiki/w/Biome/JSON_format\">https://minecraft.wiki/w/Biome/JSON_format</a></li>\n<li>Minecraft Wiki — Features: <a href=\"https://minecraft.wiki/w/World_generation/Configured_feature\">https://minecraft.wiki/w/World_generation/Configured_feature</a></li>\n<li>NeoForge Biome Modifiers: <a href=\"https://docs.neoforged.net/docs/worldgen/biomemodifier/\">https://docs.neoforged.net/docs/worldgen/biomemodifier/</a></li>\n<li>Fabric BiomeModifications: <a href=\"https://wiki.fabricmc.net/tutorial:biomemodification\">https://wiki.fabricmc.net/tutorial:biomemodification</a></li>\n<li>misode's data pack generator (worldgen UI): <a href=\"https://misode.github.io/worldgen/\">https://misode.github.io/worldgen/</a></li>\n</ul>\n","files":[{"path":"references/legacy-1.21-worldgen-json.md","sizeBytes":4669,"isText":true},{"path":"scripts/jq-shim.mjs","sizeBytes":7435,"isText":false},{"path":"scripts/validate-worldgen-json.sh","sizeBytes":18395,"isText":true},{"path":"SKILL.md","sizeBytes":10598,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-16T16:00:04.962063Z","sha256":"582F824D969D00E556E8B437D1048765801457DE2FCEF9945F4BD15CFD9642E5","sizeBytes":12010},"review":null,"source":{"repositoryUrl":"https://github.com/Jahrome907/minecraft-agent-skills","path":".claude/skills/minecraft-world-generation","license":"MIT","commit":"dd57c5a97741cdc0eb5bb3a8f876581a4f09eeb0","subtreeSha":"A27A1C46E5273E253C7D2D8C39724ADDC206809D3DA324453150E6604DC63C9B","lastSyncedAt":"2026-09-25T06:49:17.478439Z"},"reviewedAt":"2026-09-16T16:01:14.215924Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/Jahrome907/minecraft-agent-skills/tree/main/.claude/skills/minecraft-world-generation"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install jahrome907-minecraft-agent-skills@llmmart"},{"target":"git","command":"git clone https://github.com/Jahrome907/minecraft-agent-skills.git"}]}