Phase 8 begins: quest and JEI add-ons, checked against the pack

Adrian's Phase 8 answers (2026-11-03): Cobblemon tasks from Cobblemon Quests
Reloaded; JEI gets the Cobblemon Info for REI/JEI/EMI add-on, its spawn info
checked against the pack, plus our own pages; no quest rewards; quests
generated from docs/quests.yaml with in-game node moves read back.

- Cobblemon Quests Reloaded 2.0.2+1.8 (CF only, CC-BY-NC-4.0): declares
  Cobblemon 1.8+ and FTB Quests 2101+; adds cobblemon_tasks:cobblemon_task.
  Its bundled MongoDB client is an optional storage backend, off by default.
- Cobblemon Info for REI/JEI/EMI 2.32.14 (MIT, both sides): reads the live
  spawn pool, so it shows the zone pools' species, levels and rarity; it lists
  biomes, not zones (our pages will add the zone). Without it on the server a
  client falls back to Cobblemon's own spawn files.
- crosslink.py found the same Cobblebase and Cobblemon HMs files on CF.
- Self-tests quests_have_cobblemon_tasks and jei_addon_shows_island_spawns
  (every entry the add-on shows is one of the pack's, at the zone's levels,
  none missing). Smoke test, self-tests and the island check pass.
- Docs: design.md Phase 8 section and plan, checklists/phase-8.md,
  addon-status.md, licenses.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
claudeandClaude Opus 5.5 committed 2026-11-03 10:37:57 +01:00
1 parent fe6b8dfe57
commit 9fb5e9895e
12 files changed
+142 -9

No files matched your search

+7 -5
View File
@@ -40,7 +40,7 @@ Checked 2026-10-28 against Cobblemon **1.8.4** (NeoForge, MC 1.21.1). Re-check b
| Cobblemon Fight or Flight Reborn | wild Pokémon flee or fight back (Phase 2) | `fightorflight-neoforge-0.11.1.jar` (MR `OD7X9rYz`, CF `9156010`) | MR + CF | ✅ Declares `[1.8.2,)` | | Cobblemon Fight or Flight Reborn | wild Pokémon flee or fight back (Phase 2) | `fightorflight-neoforge-0.11.1.jar` (MR `OD7X9rYz`, CF `9156010`) | MR + CF | ✅ Declares `[1.8.2,)` |
| Cobblemon TP-Pastures | pastured Pokémon teleported back, not recalled (Phase 2) | `cobblemon_tp_pastures-1.21.1-1.3.0.jar` (MR `so0hyqC2`) | MR + CF | ⚠️ Declares `[1.7.1,)`; loads on 1.8.4, behaviour still to be checked in-game | | Cobblemon TP-Pastures | pastured Pokémon teleported back, not recalled (Phase 2) | `cobblemon_tp_pastures-1.21.1-1.3.0.jar` (MR `so0hyqC2`) | MR + CF | ⚠️ Declares `[1.7.1,)`; loads on 1.8.4, behaviour still to be checked in-game |
| Lootr | loot containers refill 1 hour after first opened, loot per player (Phase 2) | `lootr-neoforge-1.21.1-1.11.38.127.jar` (MR `SPOrIzX8`, CF `8968561`) | MR + CF | n/a (no Cobblemon dependency); converts Cobblemon's loot chests too | | Lootr | loot containers refill 1 hour after first opened, loot per player (Phase 2) | `lootr-neoforge-1.21.1-1.11.38.127.jar` (MR `SPOrIzX8`, CF `8968561`) | MR + CF | n/a (no Cobblemon dependency); converts Cobblemon's loot chests too |
| Cobblemon HMs | field moves (Phase 5) | `cobblemon-hms-neoforge-4.1.0.jar` (MR `uC02CqRy`) | MR; also on CF (project `1587850`), not linked in the pack yet | ✅ Declares Cobblemon ≥ 1.8.0; loads and runs on 1.8.4 (self-tests, incl. Rock Smash on a regenerating vein). Added 2026-10-31 | | Cobblemon HMs | field moves (Phase 5) | `cobblemon-hms-neoforge-4.1.0.jar` (MR `uC02CqRy`) | MR + CF (CF file `9375436` linked 2026-11-03 by `tools/crosslink.py`, same file) | ✅ Declares Cobblemon ≥ 1.8.0; loads and runs on 1.8.4 (self-tests, incl. Rock Smash on a regenerating vein). Added 2026-10-31 |
| Cobbreeding | breeding: eggs from Pasture Blocks, for Cobblebase's hatchery too (Phase 5) | `Cobbreeding-neoforge-2.4.1.jar` (MR `jzxflH2c`) | **MR only** (the authors won't upload to CurseForge) | ✅ Declares `[1.8.2,)`; loads and runs on 1.8.4 (self-tests). Logs one harmless client-mixin error on a dedicated server (allowlisted). Added 2026-10-31 | | Cobbreeding | breeding: eggs from Pasture Blocks, for Cobblebase's hatchery too (Phase 5) | `Cobbreeding-neoforge-2.4.1.jar` (MR `jzxflH2c`) | **MR only** (the authors won't upload to CurseForge) | ✅ Declares `[1.8.2,)`; loads and runs on 1.8.4 (self-tests). Logs one harmless client-mixin error on a dedicated server (allowlisted). Added 2026-10-31 |
| Cloth Config API | Cobbreeding's config screen (client only) | `cloth-config-15.0.140-neoforge.jar` (MR `izKINKFg`) | MR + CF | n/a (no Cobblemon dependency); side: client | | Cloth Config API | Cobbreeding's config screen (client only) | `cloth-config-15.0.140-neoforge.jar` (MR `izKINKFg`) | MR + CF | n/a (no Cobblemon dependency); side: client |
| Better Advanced Tooltips | none: ships *inside* KubeJS as jar-in-jar | — | — | Modrinth marks it as a required KubeJS dependency, but KubeJS declares it optional and embeds it. Not referenced separately | | Better Advanced Tooltips | none: ships *inside* KubeJS as jar-in-jar | — | — | Modrinth marks it as a required KubeJS dependency, but KubeJS declares it optional and embeds it. Not referenced separately |
@@ -55,9 +55,11 @@ JEI declares Minecraft `[1.21, 1.21.1)` in every 1.21.1 build, which a strict re
| Chunky | 1 (build tool only, not in the pack) | 1.4.23 (MR `LuFhm4eU`, CF project `485681`) | MR + CF | n/a. `tools/make_world.py` adds it to the test server only while pregenerating | | Chunky | 1 (build tool only, not in the pack) | 1.4.23 (MR `LuFhm4eU`, CF project `485681`) | MR + CF | n/a. `tools/make_world.py` adds it to the test server only while pregenerating |
| Cold Sweat | 3 | 2.4.4 (MR `UGoodVYD`, CF `9215368`) | MR + CF | **In the pack** (2026-10-29); same jar on both platforms | | Cold Sweat | 3 | 2.4.4 (MR `UGoodVYD`, CF `9215368`) | MR + CF | **In the pack** (2026-10-29); same jar on both platforms |
| Regenerating Ore Veins | 4 | 1.4.0 (CF `8066055`) | **CF only** | **In the pack** (2026-10-30); n/a (no Cobblemon dependency). Left out of the Modrinth export | | Regenerating Ore Veins | 4 | 1.4.0 (CF `8066055`) | **CF only** | **In the pack** (2026-10-30); n/a (no Cobblemon dependency). Left out of the Modrinth export |
| Cobblebase | 4 | 2.0.1+1.8.0 (MR `pFYNQ6W2`) | MR has the 1.8 build; **CF only has 2.0.0+1.7.0** | ✅ 2.0.1 requires ≥ 1.8.0 and fixes a startup crash on 1.8. Modrinth lists Xaero's Minimap, Cobbreeding and Cloth Config as required, but the jar declares only Cobblemon and Kotlin for Forge. **In the pack** (2026-10-30); every skill behind a soft gate on the pastured Pokémon (companion mod, `progression_gates`). Cobbreeding and Cloth Config joined on 2026-10-31, so Breeder and Egg Hatcher work | | Cobblebase | 4 | 2.0.1+1.8.0 (MR `pFYNQ6W2`) | MR + CF (the 1.8 build reached CF; file `9049624` linked 2026-11-03 by `tools/crosslink.py`, same file) | ✅ 2.0.1 requires ≥ 1.8.0 and fixes a startup crash on 1.8. Modrinth lists Xaero's Minimap, Cobbreeding and Cloth Config as required, but the jar declares only Cobblemon and Kotlin for Forge. **In the pack** (2026-10-30); every skill behind a soft gate on the pastured Pokémon (companion mod, `progression_gates`). Cobbreeding and Cloth Config joined on 2026-10-31, so Breeder and Egg Hatcher work |
| Cobblemon Poke Power | 4 | 1.3.1 (MR `vGpaTxmN`) | **MR only** | ✅ Declares `[1.8.0,)`. Needs Matthiesen Core. **In the pack** (2026-10-30, Adrian: use the existing option, gated): the Power Block is gated by its recipe (redstone blocks from the Verdant Jungle). Jade is an optional extra it supports | | Cobblemon Poke Power | 4 | 1.3.1 (MR `vGpaTxmN`) | **MR only** | ✅ Declares `[1.8.0,)`. Needs Matthiesen Core. **In the pack** (2026-10-30, Adrian: use the existing option, gated): the Power Block is gated by its recipe (redstone blocks from the Verdant Jungle). Jade is an optional extra it supports |
| Cobblemon Quests (FTB Quests integration) | 8 | 1.2.0 (MR `8KeptEg2`; CF project `922979`) | MR + CF | ❌ Targets 1.7. Its own changelog says it does not work with FTB Quests ≥ 2101.1.19; the pack has 2101.1.37. Blocked until updated | | Cobblemon Quests (FTB Quests integration) | 8 | 1.2.0 (MR `8KeptEg2`; CF project `922979`) | MR + CF | ❌ Targets 1.7. Its own changelog says it does not work with FTB Quests ≥ 2101.1.19; the pack has 2101.1.37. Blocked until updated. **Replaced by Cobblemon Quests Reloaded** (in the pack since 2026-11-03) |
| Cobblemon Quests Reloaded (FTB Quests integration, fork) | 8 | 2.0.2+1.8 (CF `9148242`, project `1389481`) | **CF only** | ✅ Declares Cobblemon `[1.8.0,)`, FTB Quests `[2101.0.0,)`. **In the pack** (2026-11-03, Adrian). Adds the task type `cobblemon_tasks:cobblemon_task` (catch, defeat, evolve, level up, obtain, seen, …); self-test `quests_have_cobblemon_tasks`. Bundles a MongoDB client for an optional storage backend, off by default (`useMongo: false`, localhost) |
| Cobblemon Info for REI / JEI / EMI | 8 | 2.32.14+neoforge (MR `bxd0xXZI`) | MR | ✅ Declares Cobblemon `[1.7.1,)`. **In the pack** (2026-11-03, Adrian), on both sides: it reads the server's live spawn pool (the pack's zone pools); a client on a server without it falls back to Cobblemon's own spawn files. Shows spawns, drops, evolutions; doesn't know the pack's zone rule, so it lists a spawn's biomes, not its zone. Self-test `jei_addon_shows_island_spawns` |
| Quests & Teams Fixes (flexible-mode soft-lock fix) | 8 | — | MR | ❌ Only 1.20.1 builds exist. Test the soft-lock on FTB Quests 2101.1.37 ourselves | | Quests & Teams Fixes (flexible-mode soft-lock fix) | 8 | — | MR | ❌ Only 1.20.1 builds exist. Test the soft-lock on FTB Quests 2101.1.37 ourselves |
| spark | 9 | 1.10.124 (MR `v5qtqRQi`, CF `6225208`) | MR + CF | n/a | | spark | 9 | 1.10.124 (MR `v5qtqRQi`, CF `6225208`) | MR + CF | n/a |
@@ -76,7 +78,7 @@ JEI declares Minecraft `[1.21, 1.21.1)` in every 1.21.1 build, which a strict re
No single platform hosts everything the roadmap names: No single platform hosts everything the roadmap names:
- **CurseForge only:** FTB Quests, FTB Library, FTB Teams, Ore Generation Configuration, Regenerating Ore Veins (and the 1.8 build of Cobblebase is Modrinth only). - **CurseForge only:** FTB Quests, FTB Library, FTB Teams, Cobblemon Quests Reloaded, Ore Generation Configuration, Regenerating Ore Veins.
- **Modrinth only:** CobbleHardcoreMon, Matthiesen Core, Cobblemon Poke Power, Cobblebase 2.0.1. - **Modrinth only:** CobbleHardcoreMon, Matthiesen Core, Cobblemon Poke Power, Cobblemon Info for REI / JEI / EMI.
`tools/build.py` leaves each mod out of the export for the platform that doesn't host it and lists what it left out. Today the `.mrpack` lacks the three FTB mods and Regenerating Ore Veins; the CurseForge zip lacks CobbleHardcoreMon, Matthiesen Core, Poke Power and Cobblebase. Once Phases 1–4 land, the CurseForge zip will lack permadeath, and the Modrinth pack will lack quests and ore veins. This needs a decision (see `docs/design.md`, open decisions). `tools/build.py` leaves each mod out of the export for the platform that doesn't host it and lists what it left out. Today the `.mrpack` lacks the three FTB mods and Regenerating Ore Veins; the CurseForge zip lacks CobbleHardcoreMon, Matthiesen Core, Poke Power and Cobblebase. Once Phases 1–4 land, the CurseForge zip will lack permadeath, and the Modrinth pack will lack quests and ore veins. This needs a decision (see `docs/design.md`, open decisions).
+18
View File
@@ -0,0 +1,18 @@
# Phase 8 – checks for Adrian
## Decided
**2026-11-03:** Cobblemon tasks come from Cobblemon Quests Reloaded; JEI gets the Cobblemon Info for REI / JEI / EMI add-on (its spawn info checked against the pack) plus our own pages for the pack's sources; quests give no rewards; quests are generated from `docs/quests.yaml`, and node positions you move in game are read back into it. Earlier (2026-11-02): every item that can drop gets a JEI page naming its sources. Details: `docs/design.md` → "Phase 8".
## Built so far
- **Add-ons in the pack:** Cobblemon Quests Reloaded 2.0.2 (Cobblemon task type for FTB Quests) and Cobblemon Info for REI / JEI / EMI 2.32.14. Automated: `quests_have_cobblemon_tasks`, `jei_addon_shows_island_spawns`.
- **Spawn info in JEI:** right for the pack (species, levels, rarity come from the zone pools), but it shows biomes, not zones; our own pages will add the zone.
## In game (Prism instance)
- [ ] Open JEI, look up a Pokémon (e.g. Pikachu) in Cobblemon Info's pages: the spawn levels match its zone (`docs/zone-species.md`), and its drops are listed.
## Ask Adrian
- (after the first chapters) Does the layout read well? Move nodes freely in the editor; the next generation keeps your positions.
+12
View File
@@ -298,6 +298,18 @@ Self-tests (`BossTests`): every guardian has a fight and a Cobblemon model; each
**The End has Pokémon** (Adrian, 2026-11-02: it looked barren). The End is a zone of its own, "The End", Lv 50–70 (`world/zones.json` → `dimensions`; `Zones.at` returns it anywhere in the End). Every line Cobblemon spawns in End biomes spawns there too, on top of its home on the island: Beheeyem, Reuniclus and Metagross anywhere; Gothitelle and Sigilyph in End cities; Malamar and Unown with a Poké Snack. Gothita had no island home (it only spawns in the End), so it's new. Cobblemon has all of these uncommon or rare, and it rolls the bucket before the Pokémon, so in the End they move to the common bucket or the End would stay nearly empty; each line weighs the same, Metagross a fifth. Being a zone, the End also has level pressure (full experience up to Lv 75, like the Basalt Furnace) and the wild-Pokémon cleanup above Lv 80; Eternatus is exempt as an uncatchable boss. Self-test `end_has_spawns`. **The End has Pokémon** (Adrian, 2026-11-02: it looked barren). The End is a zone of its own, "The End", Lv 50–70 (`world/zones.json` → `dimensions`; `Zones.at` returns it anywhere in the End). Every line Cobblemon spawns in End biomes spawns there too, on top of its home on the island: Beheeyem, Reuniclus and Metagross anywhere; Gothitelle and Sigilyph in End cities; Malamar and Unown with a Poké Snack. Gothita had no island home (it only spawns in the End), so it's new. Cobblemon has all of these uncommon or rare, and it rolls the bucket before the Pokémon, so in the End they move to the common bucket or the End would stay nearly empty; each line weighs the same, Metagross a fifth. Being a zone, the End also has level pressure (full experience up to Lv 75, like the Basalt Furnace) and the wild-Pokémon cleanup above Lv 80; Eternatus is exempt as an uncatchable boss. Self-test `end_has_spawns`.
## Phase 8: questbook and drop sources (Adrian, 2026-11-03)
Adrian's choices: Cobblemon tasks come from **Cobblemon Quests Reloaded** (a maintained fork of Cobblemon Quests for Cobblemon 1.8; the original is stuck on 1.7); JEI gets an add-on, **Cobblemon Info for REI / JEI / EMI**, checked against the pack, plus our own pages for the pack's sources; **quests give no rewards**; quests are written in `docs/quests.yaml` and generated, and node positions Adrian moves in the in-game editor are read back into the file (text and tasks stay in the file).
**Add-ons checked** (2026-11-03). Quests Reloaded declares Cobblemon 1.8+ and FTB Quests 2101+, boots with the pack and adds the task type `cobblemon_tasks:cobblemon_task` (catch, defeat, evolve into, level up, obtain, seen, and more; filters by species, type, form, shiny, level, biome). Cobblemon Info reads the server's live spawn pool, so what it shows is the pack's own zone pools: right species, levels and rarity; the self-test compares every entry. It does not know the pack's zone rule and lists a spawn's biomes instead: a Southwold Pokémon reads as "plains", though it only spawns in Southwold's plains. Our own JEI pages add the zone. It must be on the server too (it is, side both): a client on a server without it falls back to Cobblemon's unmodified spawn files.
**Plan** (in progress):
- `docs/quests.yaml` → `tools/quests.py` → `pack/config/ftbquests/quests/` (FTB Quests 2101 format: `data.snbt`, `chapter_groups.snbt`, `chapters/*.snbt`, texts in `lang/en_us.snbt`). Quest ids are derived from the YAML ids, so they stay the same across regenerations and players keep their progress. `tools/quests.py --pull <instance>` reads node positions back from an instance's quest files first.
- Flexible progression everywhere and no lock icons, so dependencies show as lines but never block; check FTB Quests 2101.1.37 for the soft-lock a fix mod reports for 1.20.1.
- Chapters: getting started, one per zone, base building and Pokémon jobs, machines, bosses and the End. Tasks: Cobblemon tasks (Quests Reloaded), items (drops, materials), and the pack's own events (zone reached, guardian beaten, machine built) as hidden advancements the companion mod grants.
- JEI: our plugin adds, per item, every place on the island it comes from that Cobblemon Info doesn't cover: guardian and End boss rewards, Sacrifice Altar tiers, ore veins by zone, pasture mining and finder tables by zone; and per Pokémon its zone.
## Open decisions for Adrian (proceeding with the default, flagged) ## Open decisions for Adrian (proceeding with the default, flagged)
| Decision | Default used for now | | Decision | Default used for now |
+2
View File
@@ -45,6 +45,8 @@ Read each license before adding a mod, and add a row here in the same change.
| Cobblemon HMs | shiero | shiero's Mods License (in the jar): free to use, also in free modpacks; any monetized use (paid pack, paid server perks) needs an agreement with the author | [Modrinth](https://modrinth.com/project/cobblemon-hms) | Phase 5: field moves (both). Also on [CurseForge](https://www.curseforge.com/projects/1587850), not linked in the pack yet | | Cobblemon HMs | shiero | shiero's Mods License (in the jar): free to use, also in free modpacks; any monetized use (paid pack, paid server perks) needs an agreement with the author | [Modrinth](https://modrinth.com/project/cobblemon-hms) | Phase 5: field moves (both). Also on [CurseForge](https://www.curseforge.com/projects/1587850), not linked in the pack yet |
| Cobbreeding | Ludichat, Fuzuki | "MIT, no AI, no reupload" ([text](https://fuzuki.dev/~fuzuki/mit-no-ai-no-reupload.txt)): MIT terms, but the mod may not be used to train or improve machine-learning models, and may not be reuploaded unchanged to CurseForge or Modrinth except bundled in a modpack | [Modrinth](https://modrinth.com/mod/cobbreeding), [source](https://gitlab.com/ludichat/Cobbreeding) | Phase 5: breeding (both). Referenced only, never copied. Not on CurseForge by the authors' choice | | Cobbreeding | Ludichat, Fuzuki | "MIT, no AI, no reupload" ([text](https://fuzuki.dev/~fuzuki/mit-no-ai-no-reupload.txt)): MIT terms, but the mod may not be used to train or improve machine-learning models, and may not be reuploaded unchanged to CurseForge or Modrinth except bundled in a modpack | [Modrinth](https://modrinth.com/mod/cobbreeding), [source](https://gitlab.com/ludichat/Cobbreeding) | Phase 5: breeding (both). Referenced only, never copied. Not on CurseForge by the authors' choice |
| Cloth Config API | shedaniel | LGPL-3.0-only | [Modrinth](https://modrinth.com/mod/cloth-config) | Cobbreeding dependency (client) | | Cloth Config API | shedaniel | LGPL-3.0-only | [Modrinth](https://modrinth.com/mod/cloth-config) | Cobbreeding dependency (client) |
| Cobblemon Quests Reloaded | WinterWolfSV (original); community fork | CC-BY-NC-4.0 (jar metadata; the CurseForge page says "custom", the fork keeps the original's non-commercial license) | [CurseForge](https://www.curseforge.com/minecraft/mc-mods/cobblemon-quest-reloaded) | Phase 8: Cobblemon task types for FTB Quests (both). Not on Modrinth. Non-commercial: fine for this free pack |
| Cobblemon Info for REI / JEI / EMI | Akkiruk | MIT | [Modrinth](https://modrinth.com/project/qekxLrOP) | Phase 8: spawns, drops and evolutions in JEI (both) |
| Regenerating Ore Veins | Stargazer | MIT (jar metadata) | [CurseForge](https://www.curseforge.com/minecraft/mc-mods/regenerating-ore-veins) | Phase 4: the only ore source besides chest loot (both). Not on Modrinth | | Regenerating Ore Veins | Stargazer | MIT (jar metadata) | [CurseForge](https://www.curseforge.com/minecraft/mc-mods/regenerating-ore-veins) | Phase 4: the only ore source besides chest loot (both). Not on Modrinth |
| WorldGen Editor | waterflane | CC BY-NC-SA 4.0 | [Modrinth](https://modrinth.com/mod/worldgen-editor) / [CurseForge](https://www.curseforge.com/minecraft/mc-mods/worldgen-editor), [source](https://github.com/waterflane/WorldGen-Editor) | Non-commercial, share-alike. See the derived files below | | WorldGen Editor | waterflane | CC BY-NC-SA 4.0 | [Modrinth](https://modrinth.com/mod/worldgen-editor) / [CurseForge](https://www.curseforge.com/minecraft/mc-mods/worldgen-editor), [source](https://github.com/waterflane/WorldGen-Editor) | Non-commercial, share-alike. See the derived files below |
@@ -0,0 +1,47 @@
package dev.cobblesurvival.selftest
import com.cobblemon.mod.common.api.spawning.CobblemonSpawnPools
import com.cobblemon.mod.common.api.spawning.detail.PokemonSpawnDetail
import dev.cobblesurvival.zone.Zones
/**
* Roadmap Phase 8 (Adrian, 2026-11-03): the add-ons the quest book and JEI lean on work with the pack. Read by
* reflection, so the companion mod needs neither at compile time.
*/
object QuestTests {
fun all() = listOf(
SelfTestCase("quests_have_cobblemon_tasks", 20, ::cobblemonTasks),
SelfTestCase("jei_addon_shows_island_spawns", 20, ::addonSpawns),
)
/** Cobblemon Quests Reloaded adds its task type (catch, defeat, evolve, level up, ...) to FTB Quests. */
private fun cobblemonTasks(s: Scenario) {
val types = Class.forName("dev.ftb.mods.ftbquests.quest.task.TaskTypes").getField("TYPES").get(null) as Map<*, *>
s.check(types.keys.any { it.toString() == "cobblemon_tasks:cobblemon_task" }) { "FTB Quests has no Cobblemon task type: ${types.keys}" }
s.helper.succeed()
}
/**
* Cobblemon Info for REI/JEI/EMI shows what the pack's own spawn pools say (Adrian: check that its spawn info is
* right for the pack): every entry it lists is one of the zone pools' entries, at the zone's levels, and it lists
* all of them. It can't show the zone itself, only the zone's biomes (docs/design.md, Phase 8).
*/
private fun addonSpawns(s: Scenario) {
val loader = Class.forName("com.cobbledex.SpawnDataLoader")
val shown = (loader.getMethod("loadFromRuntime").invoke(loader.getField("INSTANCE").get(null)) as Map<*, *>).values.flatMap { it as List<*> }
fun field(info: Any?, name: String) = info!!.javaClass.getMethod("get" + name.replaceFirstChar { it.uppercase() }).invoke(info) as String
val ours = CobblemonSpawnPools.WORLD_SPAWN_POOL.details.filterIsInstance<PokemonSpawnDetail>().associateBy { it.id }
s.check(shown.isNotEmpty()) { "the JEI add-on shows no spawns" }
val strangers = shown.map { field(it, "id") }.filter { it !in ours }
s.check(strangers.isEmpty()) { "the JEI add-on shows ${strangers.size} spawns the pack doesn't have, e.g. ${strangers.take(5)}" }
val wrongLevels = shown.filter { info ->
val zone = Zones.byId[field(info, "id").substringBefore('-')] ?: return@filter true
val (low, high) = field(info, "levelRange").split("-").map { it.toInt() }
low < zone.minLevel || high > zone.maxLevel
}
s.check(wrongLevels.isEmpty()) { "the JEI add-on shows levels outside the zone's band: ${wrongLevels.take(5).map { field(it, "id") + " " + field(it, "levelRange") }}" }
val missing = ours.keys - shown.map { field(it, "id") }.toSet()
s.check(missing.isEmpty()) { "the JEI add-on leaves out ${missing.size} of the pack's spawns, e.g. ${missing.take(5)}" }
s.helper.succeed()
}
}
@@ -54,7 +54,7 @@ object SelfTest {
private val cases: List<SelfTestCase> get() = private val cases: List<SelfTestCase> get() =
PermadeathTests.all() + SurvivalRulesTests.all() + ZoneTests.all() + HazardTests.all() + GuardianTests.all() + PermadeathTests.all() + SurvivalRulesTests.all() + ZoneTests.all() + HazardTests.all() + GuardianTests.all() +
VeinTests.all() + OreNodeTests.all() + DropTests.all() + ProgressionTests.all() + VeinTests.all() + OreNodeTests.all() + DropTests.all() + ProgressionTests.all() +
CatchingTests.all() + WorldRulesTests.all() + FieldMoveTests.all() + ShoulderTests.all() + BaseLootTests.all() + BreedingTests.all() + MachineTests.all() + BossTests.all() CatchingTests.all() + WorldRulesTests.all() + FieldMoveTests.all() + ShoulderTests.all() + BaseLootTests.all() + BreedingTests.all() + MachineTests.all() + BossTests.all() + QuestTests.all()
private var running: List<Scenario> = emptyList() private var running: List<Scenario> = emptyList()
private var forced: List<ChunkPos> = emptyList() private var forced: List<ChunkPos> = emptyList()
+12 -2
View File
@@ -118,7 +118,12 @@ metafile = true
[[files]] [[files]]
file = "mods/cobblebase.pw.toml" file = "mods/cobblebase.pw.toml"
hash = "586a0c3388e78fea91123f6c88907cc2cc2c5f2b87a15d7c050787d2c8c78cee" hash = "d5f55b1134cd34a2dead81b3790a2e7104cb05dd1f3936abff6188b55297ef7b"
metafile = true
[[files]]
file = "mods/cobbledex-rei-emi-jei.pw.toml"
hash = "45c76954469169c0bf17f7fdbd418c4e90c8362818dfdbd4ea65c661bb61a971"
metafile = true metafile = true
[[files]] [[files]]
@@ -133,7 +138,7 @@ metafile = true
[[files]] [[files]]
file = "mods/cobblemon-hms.pw.toml" file = "mods/cobblemon-hms.pw.toml"
hash = "36f7da26797651777c39409f5e8b2aeb2fe8b7d59a0a62a791a9c6b2c2d318e8" hash = "6f4a03d49d8a3df16414a00b3c4feb1a859ef6d1ab024a31b734c3829cbcda5b"
metafile = true metafile = true
[[files]] [[files]]
@@ -141,6 +146,11 @@ file = "mods/cobblemon-poke-power.pw.toml"
hash = "29ccd4c39e5af1a2fb63a40bf67ecd03bcced42e9e1edf296b26fd1847740a54" hash = "29ccd4c39e5af1a2fb63a40bf67ecd03bcced42e9e1edf296b26fd1847740a54"
metafile = true metafile = true
[[files]]
file = "mods/cobblemon-quest-reloaded.pw.toml"
hash = "fed165481433c2dc8c0c9af939957e9b9852883c1307ca3aef9e1c4e6faf14b4"
metafile = true
[[files]] [[files]]
file = "mods/cobblemon.pw.toml" file = "mods/cobblemon.pw.toml"
hash = "e6bed1ffe881690add7bc456fd8a71c136b01ea4f39683648ae7b0e404329d83" hash = "e6bed1ffe881690add7bc456fd8a71c136b01ea4f39683648ae7b0e404329d83"
+4
View File
@@ -11,3 +11,7 @@ hash = "e7ea95a4b6df6f71ad0c3b6c45038d69267799cfe8a1b3a3b3501077755e2a2e5d16bc7d
[update.modrinth] [update.modrinth]
mod-id = "kPojQdms" mod-id = "kPojQdms"
version = "pFYNQ6W2" version = "pFYNQ6W2"
[update.curseforge]
file-id = 9049624
project-id = 1503124
+17
View File
@@ -0,0 +1,17 @@
name = "Cobblemon Info for REI / JEI / EMI"
filename = "cobbledex-rei-emi-jei-neoforge-2.32.14.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/qekxLrOP/versions/bxd0xXZI/cobbledex-rei-emi-jei-neoforge-2.32.14.jar"
hash-format = "sha512"
hash = "7c0fc472278874a75d783981b9531027cb1ff2a1b885ae8f1c4f403326b21ab77ac5532454cfe0ebcca1d2e755b66cdeffd6f26b29f202a0e55fdc430f737dd6"
[update]
[update.modrinth]
mod-id = "qekxLrOP"
version = "bxd0xXZI"
[update.curseforge]
file-id = 9396631
project-id = 1458447
+4
View File
@@ -11,3 +11,7 @@ hash = "009f1a6deb011ffa42f29bb784a7de5ddd0233b38da0885e6f8aa70ce5a07c961f853ad5
[update.modrinth] [update.modrinth]
mod-id = "JNfSyMuQ" mod-id = "JNfSyMuQ"
version = "uC02CqRy" version = "uC02CqRy"
[update.curseforge]
file-id = 9375436
project-id = 1587850
@@ -0,0 +1,17 @@
name = "Cobblemon Quests Reloaded"
filename = "cobblemon_quests-reloaded-[1.21.1]-neoforge-2.0.2+1.8.jar"
side = "both"
[download]
url = "https://cdn.modrinth.com/data/agTMcrPN/versions/BR87Qlq2/cobblemon_quests-reloaded-%5B1.21.1%5D-neoforge-2.0.2%2B1.8.jar"
hash-format = "sha1"
hash = "9a759fdd55a08dd86c2bde29a2e62e4f656ed95f"
[update]
[update.curseforge]
file-id = 9148242
project-id = 1389481
[update.modrinth]
mod-id = "agTMcrPN"
version = "BR87Qlq2"
+1 -1
View File
@@ -6,7 +6,7 @@ pack-format = "packwiz:1.1.0"
[index] [index]
file = "index.toml" file = "index.toml"
hash-format = "sha256" hash-format = "sha256"
hash = "c890308691806215f70da2c23f27010a9533c24e645a1e7cc127410e4c456453" hash = "08f7e8891c89f74815c92be37a9e80497356dac36b34ba06f060f353df059faa"
[versions] [versions]
minecraft = "1.21.1" minecraft = "1.21.1"