Adrian, 2026-11-09: legendaries, mythicals, Ultra Beasts and Paradox Pokemon
come from crafted summons. 22 Sigils (Naganadel evolves from Poipole), one
item told apart by custom data, from world/summons.json through
tools/summons.py: late-game recipes in three tiers (Lv 70, 80, 90), each used
in a fitting zone. A summoned legend fights as a boss (area attacks by level
and type, arena 32, the Guardian's Ward) but can be caught; on capture it
loses every boss mark. One at a time within 96 blocks.
Quest book: a Legends chapter, one quest per Sigil (97 quests). JEI lists each
Sigil as its own item, and Island Drops says where a legend is summoned; drops
Cobblemon names but doesn't have (Ho-Oh's Sacred Ash) get no slot.
Self-tests every_implemented_pokemon_is_obtainable (spawn, fossil or Sigil for
every implemented species) and sigil_summons_a_catchable_legend. Self-tests
and the island check pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Phase 8 approved (2026-11-09). Adrian's Phase 9 answers: left-out Pokemon rare
in fitting zones; legendaries from crafted summons; no public release.
- Ore veins more sporadic but bigger: nodes about 40 % rarer, veins about 30 %
further apart, each one block larger in radius. 1.5-3x the ore overall; a
new island is needed to see it. World check on the regenerated island passes.
- The respawn block (Regenerating Ore Veins' regenerator): the aim passes
through it unless sneaking (mixin, the pack's first), so ore behind it can be
mined; much fainter glass through KubeJS assets. Self-test
regenerator_lets_the_aim_through casts a real ray.
- 31 lines (67 species) with no matching island biome, or no spawn data
(Rotom), get rare homes in fitting zones (world/zones.json -> homeless).
Existing spawns and guardians don't change. JEI data and quests regenerated.
- surface_nodes_lie_in_the_ground checks the node's centre column: a wider
node's edge can lie under a tree or a slope.
- Roadmap: every implemented Pokemon obtainable; Iris and Complementary
Reimagined as the default shader.
Self-tests and the island check pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adrian, 2026-11-02/03: every item that can drop gets a JEI page naming its
sources, alongside the Cobblemon Info add-on (which shows drops and biomes,
not zones). The companion mod's JEI plugin (jei/DropSourcesJei.kt) adds:
- Pokemon drops on the island: 794 species of lines that live on the
island, with chances, amounts and the zones they spawn in (or where their
line lives); spawns with their own drops (Beheeyem in the End). The Drop
Synthesizer core is the catalyst.
- Guardians and the End boss; Sacrifice Altar tiers and specials; Rebirth
Chamber; zone ore veins with regrow times; Cobblebase pasture finds per
skill and zone.
JEI runs on the client, so the pages read assets/cobblesurvival/jei/
drop_sources.json inside the mod, written by tools/jei_sources.py from the
pack's files. Self-tests drop_sources_match_the_server (file vs live server:
drops, zones, own-drop spawns, guardians, End boss, altar) and
jei_pages_build (every page builds, every item exists). The ore a vein gives
moved into world/zones.json (ores -> item), shared with the quest book.
JEI's API (19.64.0.455) is a compile-only dependency from JEI's own Maven.
Self-tests and the island check pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
Adrian, 2026-11-03: guardians get a boss health bar like the Wither's, which
also leads players to them. Every player within 128 blocks of a living
guardian sees a red bar of their own (GuardianBars): name, zone, how many
blocks away, and HP. The End boss keeps the dragon's bar.
guardian_appears_and_returns checks the bar appears and goes once beaten.
Self-tests and the island check pass.
Phase 7 approved ("Then begin with the next phase"); README status updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adrian (2026-11-02): every zone guardian gets area attacks (harder in
harder zones); a boss for the Basalt Furnace; a Pokémon replaces the
Ender Dragon; dying or leaving the arena loses; the Deep Dark gets a
legendary and every guardian should fit its zone. Groudon, Giratina and
Meloetta have no model in Cobblemon 1.8.4: Moltres, Eternatus and
Regigigas stand in.
- Guardians: Mudsdale, Flygon, Abomasnow, Regigigas (normal size), new
Moltres for the Basalt Furnace; zone_spawns.py takes a guardian
"scale".
- tools/zone_bosses.py writes bosses/<zone>.json and end.json from a
tier table (circle, line, cone, rings; telegraph, damage, triggers,
fire/ice/poison effects, arena).
- boss/: BossFights runs patterns during a guardian or End boss battle
(particle telegraphs, hits players inside, stops on battle end),
enforces the arena and death as a loss (battle ends, boss heals);
EndBoss keeps the dragon out (allowlist emptied), spawns Eternatus on
the main island with the dragon's boss bar, and on defeat opens the
exit portal, gateway and egg via the vanilla dragon fight, plus XP.
- Self-tests: coverage (incl. Cobblemon models), shapes, landing and
stopping, arena loss, End boss. Docs, balance, Phase 7 checklist.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adrian (2026-11-02): the cores should be transparent so the Pokémon
shows; the Pokémon's death sound when a sacrifice is made or a rebirth
ends; then start the next phase (Phase 6 approved).
- Cores drawn as a solid frame around tinted glass, rendered
translucent, no occlusion (tools/machine_assets.py).
- The shown Pokémon plays Cobblemon's faint animation and its cry
pitched down (Cobblemon has no death sounds), vanishes after 2 s; a
reborn Pokémon then shows in its new form. Tests check the new form.
- Phase 7 decisions (every guardian gets area attacks, Groudon for the
Basalt Furnace, Giratina replaces the Ender Dragon, dying or leaving
the arena loses) and design in docs/design.md; README status.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adrian (2026-11-02): double the furnace speed; there must be a way in
game to see how a machine is built; a test world with the machines.
- Large Furnace speed doubled (2 + 0.08 x level + 0.02 x SpA).
- Ghost preview: placing a core, using it with an incomplete shell, or
sneak-using it empty shows every wrong spot as a small glowing block
display for 10 s (never saved), in the core's orientation, with a
chat line counting what's missing.
- Core tooltips: what the machine does, what its shell is made of.
- /cobblesurvival machines showcase builds every machine three times
(working with a Showcase-owned Pokemon, empty, bare core) with signs,
hoppers, chests and cables; tools/make_machine_world.py makes a
superflat creative world from it (level.dat via tools/nbtfile.py)
and --prism installs it as "Machine Test (Phase 6)".
- Self-tests machine_preview_shows_the_shell and
machine_showcase_builds_every_machine; docs and checklist.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adrian (2026-10-31): a Large Furnace where a Fire Pokémon heats real
furnaces (hoppers in and out), our own Electric generator, no upkeep;
then a drop synthesizer (FE into full drop rolls, looting tiers), a
sacrifice altar (level tiers, rare candies only from Lv 80) and a
rebirth chamber (Lv 100 -> shiny Lv 1 first stage, three perfect IVs,
moves kept, Ability Patch so the hidden ability is optional).
- machine/: data-driven 3x3x3 shells (window spots for glass, free
spot under the core), checked in four rotations; the Pokémon walks in
from the party and lives in the core; breaking core or shell sends it
home (party, else PC, offline too); a real Cobblemon entity copy is
shown in the chamber (no AI, invulnerable, uncatchable, never saved).
- Heat Core keeps vanilla furnaces lit and faster; Dynamo Core makes
and pushes FE; Synthesis Core takes FE and rolls drops into a hopper-
extractable buffer; Altar Core sacrifices on a confirmed sneak-use;
Rebirth Core runs on server time.
- Recipes, casing tags, block loot, textures (tools/machine_assets.py),
models, blockstates, names.
- Self-tests: in/out, refusal, shell and core breaks (PC when full),
chunk unload, server restart, and each machine's work.
- Docs: design, balance table, Phase 6 checklist; Phase 5 approved.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From Adrian's Mining test (2026-10-31):
- A gated job assigned to a pastured Pokemon that doesn't pass its gate
is taken back at once (BaseManager assignment cleared, Cobblebase's
assignment sync sent, owner told what the Pokemon needs), so it no
longer sticks or shows under Buffs -> Active.
- Mining, Ore Finder and Evolution-item Finder only give the ores and
evolution stones of the pasture's zone: new loot condition
cobblesurvival:in_zone, the pack's versions of the 12 Cobblebase
tables (tools/cobblebase_loot.py), Cobblebase's built-in copies
removed at server start (ore/BaseLoot.kt). Mining adds quartz and the
evolution stones, drops the type gems.
- Mining's loot reaching the chest needs an Item Gatherer in the same
pasture (Cobblebase's design); documented, not changed.
- Self-tests gated_jobs_are_taken_back, base_jobs_dig_their_zones_ores;
docs, balance table, licenses, Phase 5 checklist.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Done and checked: surface and cave-floor ore nodes (companion mod
ore/OreNodes.kt), bigger and rarer underground veins; template with nodes
passed the world check and the island quick check (node self-tests).
Built, not yet tested: catching rules (catch rate falls with the level
gap to the trainer's strongest Pokemon, failed catch enrages, strong wild
Pokemon hunt weaker trainers; catching/, Fight or Flight config), bee
nests emptied when their bee is turned away.
In progress: the Deep Dark no longer fills the deepslate layer (split by
temperature: cold = Deep Dark, hot = basalt deltas, warm = ordinary caves;
world/biomes.json), zone layout regenerated; cave zone types added to
world/zones.json but tools/zone_spawns.py doesn't use them yet; template
not rebuilt for the new caves.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
A push that started .github/workflows/ci.yml crashed the server (Adrian,
2026-10-30). The smoke test, self-tests and quick check run locally.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Companion mod (zone/Guardians.kt): each zone's guardian stands at the
zone's sample point, appears when a player is within 96 blocks, stays
within 24 blocks, is uncatchable and half again as big. Beating it in a
battle gives every player in the battle its drops; it returns after 5
hours of game time (Adrian: fixed spots, 5 hours). State lives in the
world save; /cobblesurvival guardians lists it.
- tools/zone_spawns.py writes data/cobblesurvival/guardians/<zone>.json:
the strongest walking (or swimming) Pokemon of the zone at band top + 5,
with the drops from world/zones.json. Boss drops follow Adrian's rule:
Icy Rocks before Sunscorch, Heat Rocks before Frostpeak.
- Goat Fur and Hoglin Hide recipes make 8 per rock, so one guardian's 3
rocks pay for one full insulating set.
- Self-test guardian_appears_and_returns; hazard tests cleaned up; the
zone generator reads Cobblemon's own entries from the field guide's
hidden_spawns.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>