Files
cobblemon-survival-pack/world/README.md
T
claudeandClaude Opus 5.5 398301f0be Cobblemon Survival Pack: phases 0-2 and Phase 3 zones and hazards
Free NeoForge 1.21.1 modpack on Cobblemon 1.8.4 built with packwiz, plus
the Kotlin companion mod (cobblesurvival) and its built-in data pack.

- Phase 0: packwiz pack with Modrinth/CurseForge cross-links, build and
  export tooling, Prism instance sync, test server with smoke checks.
- Phase 1: Poke Ball shaped island (WorldGen Editor preset, seed isle-26),
  Adrian's biome list, no natural ore, structures without ore or vanilla
  mobs, no Nether portals, world template builder and world report.
- Phase 2: permadeath (CobbleHardcoreMon plus the companion mod's gap
  fixes), Revival Charm, expensive Healing Machine, Lootr refreshing
  loot, in-game self-tests on Minecraft's GameTest framework.
- Phase 3 so far: 14 zones with their own spawn pools and level bands
  (tools/zone_layout.py, tools/zone_spawns.py, "zone" spawn condition),
  Cold Sweat heat and cold as gates with boss-drop insulation recipes,
  spawn survey and hazard self-tests in tools/quick_check.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 19:01:21 +01:00

54 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# World template
The island world is generated, not hand-built. This folder holds the recipe. The world itself is a build output (several hundred MB of region files), so it stays out of git.
| File | What it sets |
| --- | --- |
| `world.json` | Seed, world type, pregeneration radius, border margin, pinned Chunky download |
| `biomes.json` | The biome list and how every vanilla biome maps onto it, plus extra entries (basalt deltas as a cave biome) |
| `../pack/config/worldgen_editor/presets/cobblesurvival_island.json` | The island's outline: a Poké Ball (round island, channel across the middle, ring channel around the centre island). **Generated** by `tools/pokeball_preset.py` |
| `../datapacks/core/data/cobblesurvival/worldgen/world_preset/island.json` | The world type `cobblesurvival:island`: overworld (island shape + remapped biome table) and the End, no Nether. **Generated** by `tools/biome_layout.py` from `biomes.json`; don't edit by hand |
## Building it
```bash
python3 tools/biome_layout.py # only after changing biomes.json
python3 tools/seed_search.py # only to pick a new seed (add --apply to write it to world.json)
python3 tools/build.py && python3 tools/make_world.py
```
`seed_search.py` previews many seeds without generating chunks (op-only dev command `/cobblesurvival biomepreview`) and ranks them on biome coverage, patch size, a gentle start area and cave biomes. It writes `build/seed-search/candidates.png` and `report.json`.
`make_world.py` uses the local test server (its `eula.txt` must already accept the EULA). In one server session it creates the world, pregenerates a circle of `pregen_radius` with Chunky (the island and a strip of sea; the sea corners inside the square border generate when someone gets there), and puts a square world border `border_margin` blocks outside the outermost coast. It takes about 6 minutes and writes:
- `build/world-template/`: the world, without player data
- `build/island-map.png`: top-down biome map with zone outlines, border and spawn
- `build/island-report.json`: ore scan, land bounds, border gaps, biome shares
For checking a change without rebuilding the island, `tools/quick_check.py` samples a fresh world instead (about 1–2 minutes; structures to sample are listed under `quick_check` in `world.json`).
`python3 tools/prism_instance.py` installs the template into the Prism instance as the save **Cobblemon Survival Island**. `tools/smoke_test.py` boots the test server on it.
Same seed, preset and mod versions give the same island. After changing any of them, rebuild the template; existing chunks never change on their own.
## Editing the island
Change the outline: `python3 tools/pokeball_preset.py --radius 1500 --band 160 --button 280 --ring 120` (all in blocks), then search seeds again and rebuild the template. For other shapes, edit the preset JSON by hand (field reference: the [WorldGen Editor wiki](https://github.com/waterflane/WorldGen-Editor/wiki); the [previewer](https://github.com/waterflane/WorldGen-Editor-Preview) shows outlines before generating). Keep `temperature` at `standard` and don't use `exclude_biomes`: both make WorldGen Editor swap cave biomes for surface fallbacks and let unlisted biomes in. If the ball gets bigger, raise `pregen_radius` in `world.json` too.
Change which biomes exist, or what replaces what: edit `biomes.json`, run `tools/biome_layout.py`, then search seeds again. Where a biome lands depends on the seed's climate noise, not on the lobes.
Hand edits on the finished world (paths, landmarks, a reshaped coast):
- **WorldPainter** (desktop): import `build/world-template` (File → Import → Existing Minecraft map), edit, and export it back to a folder. Keep a copy first. WorldPainter rewrites chunks and may drop Cobblemon data in those chunks, so edit before anyone plays on the world.
- **In-game**, in creative on the Prism save: build normally, or use a world-edit mod for larger changes. Then copy the save back over `build/world-template` and run `python3 tools/world_report.py` to re-check ore and border.
Hand edits are lost when the template is regenerated, so keep them few, or export them as structures.
## Ore
There is no natural ore. NeoForge's `remove_features` biome modifier (`datapacks/core/.../biome_modifier/no_natural_ores.json`) removes vanilla ore features. Cobblemon's evolution-stone ores are added from code, so they are switched off by overriding their placed features with zero placements (`tools/cobblemon_ore_overrides.py`; re-run it after a Cobblemon update). The large copper/iron ore veins are turned off in the overridden WorldGen Editor noise settings (`ore_veins_enabled: false`). Structures and fossils that have ore built in (Cobblemon habitats and ruins, vanilla fossils) keep their shape, but `tools/clean_structures.py` makes their processors turn ore into stone (re-run it after a mod update). Nether fortresses and Nether ruined portals can't appear in the basalt-delta caves (their biome tags leave basalt deltas out). `tools/world_report.py` scans every block of every chunk for anything ending in `_ore`, ancient debris and raw ore blocks.
## Mobs
Only Pokémon. The companion mod (`mod/.../world/OnlyPokemon.kt`) never lets a vanilla mob join a world unless it is loaded from a save (exceptions: entity type tag `cobblesurvival:allowed_vanilla_mobs`, for now the Ender Dragon). That covers mobs that structures place during generation, so all structures stay. When a chunk has just been generated it also removes spawners and trial spawners (block tag `cobblesurvival:removed_on_generation`), stops sculk shriekers from summoning the Warden, and turns infested blocks back into normal ones. Underneath, vanilla spawn lists are emptied (`no_vanilla_spawns.json`), infested stone doesn't generate (`no_infested_stone.json`) and the template has `doMobSpawning false`. `tools/world_report.py` fails if the world stores any vanilla mob or mob source.