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>
97 lines
6.5 KiB
Markdown
97 lines
6.5 KiB
Markdown
# 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](docs/roadmap.md); decisions taken so far are in [docs/design.md](docs/design.md).
|
||
|
||
**Status:** Phase 1 (island map), waiting for Adrian's review of the island size and layout.
|
||
|
||
## 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](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](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](https://github.com/packwiz/packwiz): `go install github.com/packwiz/packwiz@latest`
|
||
- Python 3.11+
|
||
|
||
## Everyday commands
|
||
|
||
```bash
|
||
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/`.
|
||
|
||
```bash
|
||
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.
|
||
|
||
```bash
|
||
python3 tools/quick_check.py
|
||
```
|
||
The everyday check after a change (about 1–2 minutes, one server boot): 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, vanilla mobs and mob sources, unlisted biomes and gamerules, plus Lootr chests in a village.
|
||
|
||
```bash
|
||
python3 tools/selftest.py
|
||
```
|
||
Only the companion mod's in-game tests, on a fresh flat world (faster while working on them). 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/`.
|
||
|
||
```bash
|
||
python3 tools/make_world.py
|
||
```
|
||
Builds the island world template (`build/world-template`, about 6 minutes), 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](world/README.md). Run `tools/prism_instance.py` afterwards to put it in Prism as the save "Cobblemon Survival Island".
|
||
|
||
```bash
|
||
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.
|
||
|
||
```bash
|
||
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 lists the result 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`.
|
||
|
||
```bash
|
||
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](docs/field-guide.md).
|
||
|
||
```bash
|
||
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.
|
||
|
||
```bash
|
||
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](https://aka.ms/MinecraftEULA) for this test server. CI runs it only when the repository variable `MINECRAFT_EULA_ACCEPTED` is `true`.
|
||
|
||
## 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](docs/licenses.md).
|