claudeandClaude Opus 5.5 c5d1cf93f4 Phase 8: the quest book, generated from docs/quests.yaml
- tools/quests.py writes pack/config/ftbquests/quests/ in FTB Quests 2101's
  format (data.snbt, chapters/*.snbt, texts in lang/en_us.snbt) with ids
  derived from the YAML names, so progress survives regeneration. Flexible
  progression, no lock icons, no rewards (Adrian, 2026-11-03). tools/build.py
  runs it.
- docs/quests.yaml: 18 chapters, 74 quests. Getting Started; one chapter per
  zone and the End from a zone template (reach it, catch three of its
  Pokemon, mine its ores, beat its guardian) plus chapter extras (Mire
  Waders, Eyes of Ender, Eternatus); Pokemon Machines; Base and Jobs.
- Node positions: --pull reads them from an FTB Quests folder into the
  layout block (only moved nodes); tools/prism_instance.py pulls from the
  instance before each sync and rebuilds if something moved.
- The pack's own events as hidden advancements (cobblesurvival:events/...),
  granted by QuestEvents: zone reached, guardian beaten, machine filled, End
  boss beaten.
- Self-tests quest_book_loads and quest_events_mark_zones; the guardian and
  furnace tests check their events. Self-tests and island check pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 10:57:35 +01:00

Cobblemon Survival Pack

A free NeoForge 1.21.1 modpack on Cobblemon 1.8: one large island with soft-gated, Palworld/ARK-style progression, plus a companion mod for the mechanics no addon covers. The plan is in docs/roadmap.md; decisions taken so far are in docs/design.md.

Status: Phases 0–7 approved (2026-11-03); Phase 8 (questbook as a research tree, drop sources in JEI) in progress. Checks per phase: docs/checklists/.

What's in the pack

  • Core: Cobblemon 1.8.4, KubeJS, FTB Quests, WorldGen Editor, and the companion mod (mod/).
  • World: a Poké Ball-shaped island (world type "Cobblemon Survival Island") with a fixed biome list, no natural ore and no Nether. See world/README.md.
  • Quality of life: JEI, Jade, Inventory Profiles Next, Mouse Tweaks, AppleSkin, Controlling, Xaero's Minimap and World Map; Default Options ships conflict-free default keybinds (pack/config/defaultoptions/keybindings.txt, check with tools/check_keybinds.py).
  • Rules: no vanilla mobs (only Pokémon), Nether portals don't form.
  • Performance: Sodium, FerriteCore, ModernFix, ImmediatelyFast, Entity Culling.

Exact versions and each mod's Cobblemon 1.8 status are in docs/addon-status.md.

Layout

pack/              packwiz definition: mods/*.pw.toml (config/, kubejs/, defaultconfigs/ as phases add them)
datapacks/core/    data pack shipped inside the companion mod, always enabled
mod/               companion mod (Kotlin, Cobblemon NeoForge MDK)
world/             recipe for the island world template (the world itself is built into build/)
docs/              roadmap, design, balance, licenses, addon status
tools/             build/export, cross-linking, Prism sync, server smoke test, in-game self-tests,
                   dependency check, world builder and world report, zone map, field guide (tools/fieldguide/)

Requirements

  • Java 21 to run Gradle and the server. tools/ uses Prism's bundled Java 21 when present; Gradle downloads a JDK 21 for compiling if needed.
  • packwiz: go install github.com/packwiz/packwiz@latest
  • Python 3.11+

Everyday commands

python3 tools/build.py

Builds the companion mod and writes build/cobblemon-survival-pack-<ver>.mrpack, build/…-curseforge.zip and build/stage/full/ (every mod plus the companion jar). An export lists any mod it had to leave out because that platform doesn't host it, and fails if a third-party jar would end up in overrides/.

python3 tools/prism_instance.py

Creates or updates the Prism instance Cobblemon Survival Pack (dev) from build/stage/full. Run it after every build, with the instance closed. Worlds and options are kept.

python3 tools/quick_check.py

The everyday check after a change (about 5 minutes, two server boots): the smoke checks below, the in-game self-tests (next), /locate proof that ruined portals don't generate, and a sampled world (spawn plus a stronghold, mineshaft, trial chambers, ancient city, Gimmighoul towers and habitats) checked for ore outside regenerating veins or outside their zone, vanilla mobs and mob sources, unlisted biomes and gamerules, plus Lootr chests in a village. It then starts the server a second time for the self-tests that span a restart.

python3 tools/selftest.py

Only the companion mod's in-game tests, on a fresh flat world (faster while working on them), with a second server start for the tests that span a restart. They play real situations on the live server with every mod and config of the pack: for permadeath, Pokémon faint from a fall, lava, poison, in wild and trainer battles, with and without a Revival Charm, and in the PC. They use Minecraft's GameTest framework, started by /cobblesurvival selftest run; the command only exists when the server runs with -Dcobblesurvival.selftest=true. Tests live in mod/src/main/kotlin/dev/cobblesurvival/selftest/.

python3 tools/make_world.py

Builds the island world template (build/world-template, about 20 minutes: pregeneration, then a pass that waits until every chunk has its ore veins and nodes), runs the same world checks on the whole island plus border fit and End access, and renders build/island-map.png. Only needed when the island itself should change. Details in world/README.md. Run tools/prism_instance.py afterwards to put it in Prism as the save "Cobblemon Survival Island".

python3 tools/make_machine_world.py --prism

Builds the machine test world (build/machine-world, a minute): superflat, creative, cheats on, every Phase 6 machine built three times (working with a Pokémon inside, empty, bare core). --prism copies it into the Prism instance as the save "Machine Test (Phase 6)", replacing an older copy.

python3 tools/zone_layout.py

Lays the zone plan in world/zones.json onto the island (from the seed's biome grid), draws build/zone-map.png with each zone's share of the land, and writes the zone grid the companion mod reads. Edit the JSON and rerun to try other zone shapes.

python3 tools/zone_spawns.py

Writes each zone's spawn pool from Cobblemon's spawn data (every evolution line on the island gets one home zone; levels follow the zone's band) and its Alpha guardian, and lists both in docs/zone-species.md. Run after tools/zone_layout.py and the field guide; pin a line to a zone in world/zones.json → species.

python3 tools/zone_bosses.py

Writes the boss fights (Phase 7): every guardian's area attacks by its level's tier, and the End boss. Run after tools/zone_spawns.py.

python3 tools/zone_ores.py

Writes Regenerating Ore Veins' config (pack/config/regenerating_ore_veins/) and the companion mod's ore node table from world/zones.json → ores: each ore tier's surface or cave-floor nodes and underground veins only in its zone, plus world/vein-sources.json for the field guide. Run after changing the ore tiers or the zone grid; the template must be rebuilt for new veins.

python3 tools/cobblebase_loot.py

Writes the pack's versions of Cobblebase's Mining, Ore Finder and Evolution-item Finder loot tables (datapacks/core/data/cobblebase/loot_table/): ores and evolution stones only from the pasture's zone, by world/zones.json → ores, and no type gems from Mining. Reads Cobblebase's own tables from its jar in build/server/mods; run after changing the ore tiers or updating Cobblebase.

python3 tools/drop_audit.py

Checks that every item a Pokémon or a vanilla mob drops and a recipe or brewing consumes has a source on the island (only Pokémon live there), and writes docs/pokemon-drops.md. Uses the field guide's model and its last KubeJS export, no server.

python3 tools/fieldguide/build.py

Writes the field guide to build/field-guide/ (open index.html): where each Pokémon spawns on the island, how to get every mod item and what it's for, with items that have no source on the island flagged. Also generates FTB Quests chapters and a Pokédex text override under build/field-guide/ingame/ (not installed). Details in docs/field-guide.md.

python3 tools/smoke_test.py --load-only

Installs a NeoForge server under build/server, checks every mod's dependency ranges, and confirms the loader discovers all mods. It stops at the EULA check, so it needs no EULA.

python3 tools/smoke_test.py --accept-eula

The full smoke test: boots the server and runs tools/smoke_checks.json over RCON (companion mod live, core data pack enabled, key commands registered), then fails on unexpected errors in the log. Passing --accept-eula states that you accept the Minecraft EULA for this test server. There is no CI: the Gitea server has no capacity for Actions runners, so the checks run locally (this, tools/selftest.py, tools/quick_check.py).

Quest book

python3 tools/quests.py

Generates the quest book (Phase 8) from docs/quests.yaml into pack/config/ftbquests/quests/, and the hidden advancements quests check. tools/build.py runs it. --pull <FTB Quests folder> first copies node positions moved in the in-game editor back into docs/quests.yaml (tools/prism_instance.py does it from the instance before each sync); --check fails if the generated files are out of date.

Adding a mod

  1. Read its license and its Cobblemon 1.8 status; add both to docs/licenses.md and docs/addon-status.md.
  2. cd pack && packwiz modrinth add --project-id <id> --version-id <id> (or packwiz curseforge add --addon-id <id> --file-id <id>). Always pin a version.
  3. python3 tools/crosslink.py, which adds the other platform's source after checking that it's the same file. Overrides go in tools/crosslink.json.
  4. python3 tools/build.py, then the smoke test.

Disclaimer

Unofficial fan project, not affiliated with Nintendo, Game Freak, Creatures Inc., The Pokémon Company, the Cobblemon team, Mojang Studios or Microsoft. Free, with no monetization. Full credits: docs/licenses.md.

S
Description
No description provided
Readme
1.6 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 51.2%
Kotlin 47.8%
JavaScript 0.6%
Java 0.4%