Phase 4: veins in every chunk, drops for the mobs the island lacks

Ore veins: make_world.py loads the island again row by row until
Regenerating Ore Veins has filled every chunk (/cobblesurvival veins
unfilled), cave tiers sit at their biome's depths, small zones get denser
veins, showcase veins are full size. The world report checks surface
tiers against the zone grid, cave tiers within two biome cells of their
cave, and fails on unfilled chunks; the template passes (37,689 chunks).

Drops: tools/drop_audit.py checks every creature drop a recipe or brewing
needs (docs/pokemon-drops.md). Blaze rods, ghast tears, breeze rods,
shulker shells and nether stars now drop from Pokemon through species
additions (self-test drop_additions_apply). The field guide counts vanilla
mobs as absent, applies species additions and reads the veins as sources.

Cobblebase tried (loads, self-tests pass) and left out until Adrian
decides its scope. Phase 4 checklist with the open questions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
claudeandClaude Opus 5.5 committed 2026-10-30 03:36:50 +01:00
1 parent 5d275e4e14
commit 1a1fb93da8
33 files changed
+1279 -126

No files matched your search

+2 -2
View File
@@ -31,7 +31,7 @@ The HTML works from disk (no server, no network) and follows the system's light
The data stack mirrors Minecraft's pack order: vanilla server data, NeoForge, every jar named in `pack/mods/*.pw.toml` (plus the companion mod), then `datapacks/core`, then `pack/kubejs` on top (KubeJS serves its `data/` as a data pack and its `assets/` as a resource pack; the guide reads textures and lang from there). A higher layer replaces a file, tags merge across layers, and a `pack.mcmeta` `filter` block hides the matching files of the layers below, so now that `datapacks/core` filters out Cobblemon's spawn pools and adds the zone pools, `spawns` and every page show only the zone pools. Cobblemon's own entries stay in `fieldguide.json` under `hidden_spawns`, in the same shape and resolved against the island the same way (status is what the entry would have if it were active), because `tools/zone_spawns.py` plans the zones from them; they count for nothing else. Jars are copied to `build/fieldguide-cache/jars/` first.
The island comes from `world/biomes.json` (`allowed` + `water`), the world preset named in `world/world.json` (which dimensions exist: overworld and the End, no Nether), structure and structure-set JSON (which structures can generate in the island's biomes), biome feature lists plus NeoForge biome modifiers (which blocks generate naturally, and which ores the pack switched off), and biome spawners plus structure spawn overrides (which vanilla mobs exist).
The island comes from `world/biomes.json` (`allowed` + `water`), the world preset named in `world/world.json` (which dimensions exist: overworld and the End, no Nether), structure and structure-set JSON (which structures can generate in the island's biomes), biome feature lists plus NeoForge biome modifiers (which blocks generate naturally, and which ores the pack switched off), and biome spawners plus structure spawn overrides (where vanilla mobs would spawn). The companion mod lets no mob but Cobblemon's join a world, apart from the entity tag `cobblesurvival:allowed_vanilla_mobs` (the Ender Dragon), so every other mob counts as absent and its drops need another source.
Spawns follow Cobblemon 1.8.4's rules: a spawn's conditions are alternatives, anticonditions veto, presets are merged into every condition (lists appended, single values kept), and a biome named in any anticondition never counts. A spawn that needs a structure is only listed in the biomes that structure generates in.
@@ -66,7 +66,7 @@ If the export cannot run (no EULA in `build/server/eula.txt`, a test server is a
## Adding sources: `--extra`
Sources the data cannot show yet (Phase 4 ore veins, trades, code-only mechanics) can be fed in without touching the code:
Sources the data cannot show yet (trades, code-only mechanics) can be fed in without touching the code. The Phase 4 ore veins come this way too: `tools/zone_ores.py` writes `world/vein-sources.json`, which the build always reads.
```json
{