
Cobblemon Routes
Turn any Cobblemon world into a classic Pokemon-style RPG: auto-generated routes and towns, named capture areas, automated Hardcore Nuzlocke rules, route trainers, and full Xaero map integration.
Оцените первым
692
6
Список изменений
Changelog
All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Planned
- A real CreateWorldScreen tab for choosing the starting-city type (the
spawn_city_structure_tagslist covers the function for now; default is the village tags → effectively random nearest). - Per-variant city tags (so the starting city type can be e.g. only "fighting" bca villages).
- Dive item (Phase 9): underwater breathing/mobility to travel the aquatic routes (HM Dive-style).
[0.45.0] - 2026-06-14
Fixed — No route toast while inside a town/structure
- Route-entry toasts are now suppressed whenever the player stands inside any generated structure
(village/city, gym, …), not just within a fixed 64-block radius of the recorded centre. Fixes the
"route toast while in a city" report for villages whose footprint extends past that radius
(
getStructureContainingcheck inRouteTracker).
[0.44.0] - 2026-06-14
Fixed — Downed wilds stay put and can't be re-battled
- A defeated wild lying in its Defeated-Catch window can no longer re-enter combat. Any battle that
would include a downed wild is cancelled at
BATTLE_STARTED_PRE— it can only be re-caught, not fought again. - The downed body is kept inert. Its freeze (AI off, navigation stopped, zeroed velocity, lying SLEEP pose) is now re-asserted every second, so flows that re-enable AI or recalculate the pose can't make it wander or stand back up.
[0.43.0] - 2026-06-14
Added — Differentiable road intersections
- Crossings now get a contrasting plaza so they stand out from the road ("haz las intercepciones más diferenciables"): where two roads cross (out in the open, away from cities), the junction is paved as a stone-brick ring around a polished-andesite floor, radius 3 — wider than the 2-wide road — in addition to the existing four-line junction signpost. Skips aquatic crossings.
[0.42.0] - 2026-06-14
Added — Mineshaft tunnels through mountains
- Routes now bore tunnels through terrain too costly to go around. When a road is connecting to a
known node and a segment's surface path would climb ≥
TUNNEL_RISE_TRIGGER(12) blocks — or no surface path exists at all — the road bores a straight, constant-height mineshaft toward the target instead of contouring up and over the mountain. (The user's explicit exception to the never-terraform rule: "si una ruta ya ve un nodo pero el costo es demasiado alto… como un mineshaft".) - The tunnel is 3 wide × 4 high, floored with the route's path block, with an oak frame + beam + a hung lantern every 5 cells for support and light. Carved blocks are removed without dropping items.
- It self-terminates: each segment re-checks the surface, so it keeps tunnelling while the mountain stays ≥12 above the bore and resumes normal surface paving once the terrain descends to meet it.
- Won't bore through other structures (a centreline cell inside a foreign structure cancels the tunnel, falling back to the normal stall/retry).
[0.41.0] - 2026-06-14
Changed — Routes flatter + kept off the coast
- Routes now keep a buffer inland from shorelines ("aléjalas de la costa"). A bounded multi-source
BFS from water cells fills a coast-distance gradient (
Snapshot.coastCost); the A* pays(COAST_RADIUS - dist) * COAST_COSTfor cells within 6 of water, so roads stay ~a few blocks off coasts instead of hugging them — while still able to approach/bridge water when there's no alternative (the penalty is finite). Water cells themselves are unchanged (they already payWATER_COST). - Routes prefer flatter ground: the per-step climb penalty (
SLOPE_COST, applied to the square of the height change) is raised 5 → 7, so roads contour around hills on gentler grades. - A* optimality preserved: both penalties only raise real step cost above the (still admissible) heuristic.
[0.40.0] - 2026-06-13
Added — Hunger toggle + PC-only-at-block enforcement
- Hunger toggle now enforced. When the world's
enableHungerrule is off, survival/adventure players are kept fed once a second (food + saturation topped, exhaustion zeroed) so they never starve; when on (the default) vanilla hunger drains normally. (NuzlockeManager.enforceHunger.) - "PC only at the PC block" now enforced. A
PCLinkManagermixin drops remote/portable PC links (a plainPCLinkor the predicate overload) when the rule is on, so the PC can only be opened at a real PC block. The block's ownProximityPCLinkis never touched — normal PC use (the only way to store dead Pokémon in a Nuzlocke) keeps working. Blocked remote opens tell the player why. The rule applies only in Nuzlocke worlds.
Notes
- Both rules read the per-world value (
NuzlockeManager.effectiveRules()) when the world is configured, else the global config — same as the rest of the 0.39.0 options.
[0.39.0] - 2026-06-13
Added — NUZLOCKE tab at world creation (all options, visible at last)
- A real NUZLOCKE tab on the create-world screen, sitting next to GAME / WORLD / MORE
(
CreateWorldScreenMixinwidens the tab-navigationTab[]). It shows the four gamemode toggles inline plus an "All Nuzlocke options…" button to the full screen. This replaces the old top-left button that was hidden behind the tab bar — the reason the options weren't visible at world creation. - The setup screen now exposes every option (15 total) in a two-column layout with sliders for the integers: Nuzlocke, encounter lock, permadeath, spectator-on-loss, healing mode, starter mode, starter level (1–25), shared EXP, EXP-per-KO, EXP boost (1–16×), capture-zone mode, share same-structure zones, route generation, hunger, PC-only-at-block.
- Choices made in the tab/screen are parked per change and pushed to the integrated server on world
join; they only configure a new (unconfigured) world, so loading an existing world never gets its
rules clobbered (
preWorldflag on the submit payload, gated server-side).
Changed
- The world-setup payloads now carry the full rule set as one NBT blob (
NuzlockeRules) instead of a 6-field tuple (PacketCodec.tuplemaxes at 6) — this is what let the long option tail reach the world.NuzlockeDatapersists all 15 per world (older saves fall back to the rule defaults). - The Nuzlocke manager now reads starter level, EXP boost, capture-zone mode, share-structure zones,
and route generation through the per-world rules when the world is configured (else the config),
via
NuzlockeManager.effectiveRules().
[0.38.0] - 2026-06-13
Changed — Routes clear whole trees + English biome names
- Routes now fell entire trees in the path. When a route's clearance pass hits a log or leaf, it
flood-fills the connected logs+leaves (26-neighbour BFS, bounded) and removes them all — no floating
canopy left behind, no item drops (
fellTreeinRouteGenerator.clearAbove). Previously only the single block directly above the road was cleared, leaving stumps and hovering foliage. - Route names are now
"Route N: <Biome> <Biome>"in English, derived from the biomes the road traverses (e.g.Route 3: Plains Forest). Replaces the old Spanish flavour-name pool. The name is stamped eagerly with the start biome while a directional walk is being laid (Route 3: Plains), then re-stamped with both endpoint biomes — keeping its number — once the walk connects to a node. Endpoint biomes that match collapse to a single word (Route 4: Taiga).biomeWord/biomeSpanhelpers inRouteGenerator;nextRouteName(descriptor)/restampDescriptorinRouteData.
[0.37.0] - 2026-06-13
Added — Nuzlocke options (config; world-creation tab is the next step)
- Starter level (
nuzlocke_starter_level, default 5, max 25): a freshly chosen starter is set to this level onSTARTER_CHOSEN. - EXP boost (
nuzlocke_exp_boost, integer, default 1×): multiplies every EXP gain viaEXPERIENCE_GAINED_EVENT_PRE. - Capture-zone mode (
nuzlocke_zone_mode: BIOME / ROUTE / BOTH) +nuzlocke_share_structure_zones(same-type structures share one zone vs. one per instance). Biome zones are selectable again; ROUTE (city/route/structure) stays the default, BOTH adds a biome fallback in open wilderness. - Flags
nuzlocke_enable_hungerandnuzlocke_pc_only_at_block(the PC-block lock + hunger enforcement wiring follows).
Notes
- These live in the config screen (
/cobbleverserpg configor key K) for now. Moving them into a proper NUZLOCKE tab in the world-creation screen needs the per-world setup payload to switch from a 6-field tuple to an NBT blob (PacketCodec.tuplemaxes at 6) — that refactor is the next step.
[0.36.0] - 2026-06-13
Changed
- Routes seek flat ground instead of charging over mountains. Directional walks now sample candidate headings each step and steer toward the flattest one (with a small on-course bias), and the A* climb penalty is much stronger (squared height-change × 5). Roads contour around hills and hug level terrain — and they still never terraform; only the existing surface is paved.
- Natural, unambiguous route names: a themed pool ("Sendero del Roble", "Paso del Río", "Vereda Brumosa"…) replaces "Ruta 1S"-style names, removing the S/6 confusion; names cycle with a numeral suffix once the pool is exhausted.
[0.35.0] - 2026-06-13
Added
- Capsule Display Pedestal (Module 5, phase 2): a craftable block (6 quartz blocks + an amethyst
shard) that displays a sealed Pokémon. Right-click it with a filled Pokémon Capsule to set the
capsule on the pedestal — it floats, bobs and spins above the block (block-entity renderer),
with the sealed Pokémon's name billboarded over it when you're close. Right-click empty-handed
to take the capsule back; breaking the pedestal drops it. This is the mod's first custom block
(block + block-entity + renderer infrastructure, in a new
blockpackage).
[0.34.0] - 2026-06-13
Changed
- Nuzlocke zones are never biome-based. A position now resolves only to the city, named
route, or structure it belongs to; open wilderness falls back to the nearest city or route
(whichever is closer), never to a biome. The only non-city/route/structure key is a single generic
"Wilderness" zone, and only when nothing has been discovered yet. (Legacy biome-keyed records from
old saves still display via their biome name;
/cobbleverserpg nuzlocke resetfor a clean chart.) - Directional walks wander more while searching for a node: a stronger per-segment random drift plus a slow sinusoidal sway sweeps the walk across directions, so roads cover more ground (and reach more nodes) instead of ruling near-straight lines.
- Roads are named the moment they start being laid, not only when they connect: a directional walk
gets its "Ruta N
" name (from its bearing) as soon as it begins, and carries that name over to the final city edge when it connects. Abandoned walks release their provisional name (no save leak).
[0.33.0] - 2026-06-13
Added
- Nuzlocke setup from the main menu (GDD Module 8 — the CreateWorldScreen integration): the vanilla
Create New World screen now has a "Nuzlocke Rules (Cobbleverse)" button (top-left). It opens the
rule screen pre-world; the chosen rules are parked client-side (
PendingNuzlockeRules) and pushed to the integrated server on join, configuring that world — so you set the Nuzlocke up while creating the world instead of waiting for the in-world prompt. The in-world first-join prompt and/cobbleverserpg nuzlocke setupstill work for already-running worlds.
[0.32.1] - 2026-06-13
Fixed
- Server-tick crash in the route engine (
NullPointerExceptioninRouteData.edgeKey): a shelved directional walk (whose target is awalkKey, so the job'sbnode is null) was requeued as a fixedEdge(a, b)with a nullb, which then NPE'd inisCompletedand took down the tick loop. Walks now requeue by key intopendingWalksand city-edges into the queue (shelveJob()), andenqueue()drops any malformed (null-endpoint) edge as a safety net.
[0.32.0] - 2026-06-12
Sprint from the new testing environment.
Added
- Notification style toggle (
notification_style, client-side): the mod's pop-ups can be shown as a corner toast, a big on-screen announcement (title + subtitle), or a chat line — routed through a newNotificationsclient helper (waypoint discovery uses it). - Kanto gyms are road "cities": a shipped
#cobbleverse_rpg:gymsstructure tag (Brock, Misty, Lt. Surge, Erika, Koga, Sabrina, Blaine, Giovanni, Kanto League — optional entries) is added toroute_city_structure_tags, so roads connect the gyms. Region gyms also connect viaconnect_all_structures. - Challenged players turn to face the trainer: when a route trainer's line-of-sight engagement fires the "!", the player's head snaps toward the NPC (synced to client) to acknowledge the duel.
Changed
- No item revives in Nuzlocke: any item / machine / command that would revive a fainted (0 HP)
Pokémon is rejected in
onHealAttempt; only a Pokémon's move (e.g. Revival Blessing, which is applied by the battle engine and never hits this out-of-battle gate) can bring a fainted ally back. - Healing config reads as "Healing Allowed" (en) / "Curación Permitida" (es); the
ITEMS_ONLYmode no longer implies revives. - Game-over is a mass notification: losing the run now pushes a bold title + subtitle + sound to every player (plus the existing chat broadcast), not just a chat line.
- One command root: the client config command moved from
/cobbleverse_rpgto/cobbleverserpg, unifying with the server'sroutes/nuzlocke/soullocksubcommands. - License changed from CC0 to a revenue-share, source-available license ("if you make money, the
author makes money"): free for personal/non-commercial use; commercial use requires a revenue-share
agreement.
fabric.mod.jsonlicense id updated.
Datapacks (testing profile) — reverted (see notes)
- All-region gyms: enabling the Hoenn/Johto/Sinnoh datapacks crashes world load on their own
because they reference Terralith biomes (Terralith-DP must be enabled too — that's why all four
sit together in
datapacks/extra/). They also don't persist: the Modrinth profile restores pack files on launch. To get every region's gyms, enable all four (regions + Terralith) via the world's Data Packs screen — note Terralith overhauls terrain. The mod's#cobbleverse_rpg:gymstag (above) connects whichever gyms are present, so Kanto works out of the box. - Hunger: the No Hunger datapack is Modrinth-managed and auto-restored; disable it through Modrinth / the pack to re-enable hunger (a manual file move gets reverted on launch).
Deferred
- PC requires the block: blocking remote PC access safely needs the pack's exact remote-PC
mechanism (likely cobblenav) identified first — a blind Cobblemon
PCLinkManagermixin risks breaking all PC access, so it's held until the trigger is confirmed in-game.
[0.31.0] - 2026-06-12
Added
- Pokémon Capsule (PLAN Módulo 5 "Encapsulación", supersedes the GDD v1 Showcase): craft with 3× glass + 1 amethyst shard. Sneak + use the empty capsule on your own sent-out Pokémon to seal it — it leaves your possession entirely (party/PC), its full data moves into the item, and the capsule takes the Pokémon's name with an enchant glint: a display piece for item frames. Right-click a filled capsule to release it back (party, PC overflow; capsule consumed). Tooltip shows species, level and ✝ for deceased memorials. Battling Pokémon can't be sealed; dead ones can (and return still dead — permadeath holds). Note: an encapsulated Pokémon doesn't count as "owned" for the game-over check — capsuling your last living Pokémon ends the run. Placeable pedestal/miniature display is the planned phase 2.
[0.30.0] - 2026-06-12
Added
- Soullock co-op (GDD Módulo 6 / PLAN Módulo 2) — groups of up to four players:
/cobbleverserpg soullock link <player2> [player3] [player4]links the parties slot by slot (GDD: "las mismas ranuras"): every slot where ALL players have a living, unlinked Pokémon becomes one soul group (persisted inSoullockData). A purple broadcast announces the forged link.unlinkdissolves your links;statuslists them with partners, owners and ✝.- Shared death: when a linked Pokémon dies (permadeath), every soulmate dies with it — even if its owner is offline (their party/PC storage is loaded on demand); online owners get the dark-red message and an immediate game-over check, offline ones meet the news on login.
- No lone combat (
prevent_lone_combat, the config existed since 0.2.0 — now it works): a linked Pokémon refuses to be sent out unless EVERY partner is in its owner's active party with the owner online. - Phase 2 (planned): creating links from the trainer's interaction-ring GUI instead of commands.
[0.29.0] - 2026-06-12
Added
- Defeated bodies now lie on the ground. No render mixin needed after all: Cobblemon's server
delegate skips pose recalculation when
enablePoseTypeRecalculationis off, and both that flag and the pose persist to entity NBT — so Defeated Catch freezes recalculation and forces the SLEEP pose, laying the model down for the whole catch window (survives reloads). Species without a sleep animation fall back to their idle pose gracefully. - Aquatic route signage (the last Module 1 signage gap): a sign that would land on water now stands on a cobblestone buoy at the surface — aquatic channels get their end/junction signposts, legible from a boat, instead of silently skipping them. (The submarine bed already paves in gravel/cobble/stone, never sand, since 0.12.0.)
[0.28.0] - 2026-06-12
Added
- No forfeit in Nuzlocke (
nuzlocke_no_forfeit, default on) — the project's first mixin. Cobblemon validates every battle choice throughShowdownActionResponse.isValidand re-prompts the player on an invalid one;ForfeitActionResponse.isValidwas an unconditionaltrue. A 10-line mixin turns itfalsewhile Nuzlocke is active (honouring the per-world setup), so the server rejects the surrender through Cobblemon's own illegal-choice flow and tells the player "there is no surrender — fight!". Fleeing WILD battles is untouched (that's the encounter-lock's flee rule); this blocks giving up against trainers/players. - Mixin infrastructure established (
cobbleverse_rpg.mixins.json), unblocking the visual-faint spike and future deep hooks.
[0.27.0] - 2026-06-12
Added
- Defeated Catch (PLAN Módulo 6): defeated wild Pokémon no longer despawn instantly — they
stay on the ground for
defeated_catch_seconds(default 60), still catchable, marked by grey smoke and a "%s is down — 60s to catch it!" action-bar notice for nearby players.- Implemented by reviving the wild to 1 HP the moment it faints (a dying entity can't be hit by Poké Balls — vanilla projectiles ignore health ≤ 0), with AI frozen and silenced; the 1 HP also gives the natural near-max catch-rate bonus.
- A failed capture during the window despawns the body right after the ball breaks free; an expired window poofs it (cloud + extinguish sound). Either way the Nuzlocke zone verdict is deferred: the encounter only counts as FAILED when the window resolves uncaught — defeating your first encounter now gives you one last minute to secure it.
- Survives restarts (absolute expiry stored in the Pokémon's persistent data, re-registered on entity load); level-cap and zone-lock ball gates still apply to the downed body.
- The lying-down faint pose still needs the GeckoLib render spike (Phase 5) — for now the body stands frozen with smoke.
[0.26.1] - 2026-06-12
Fixed
- 0.26.0 did not compile: the level-cap helper methods (
partyLevelCap/overLevelCap) were referenced but their definitions were lost in an edit anchored on a method removed in 0.13. Definitions restored; the pre-push verification now flags missing method/variable symbols on the mod's own classes as real errors instead of dependency noise.
[0.26.0] - 2026-06-12
Big batch release from in-game feedback.
Changed — route engine v2 ("conexión por descubrimiento")
- The locateStructure pairing is GONE (it was the remaining performance hog). Each node now
launches up to
max_route_connections(default 3) directional walks: evenly spread bearings with random jitter that pave forward segment by segment, drifting gently at random, and connect to whatever node the terrain they generate reveals (≤96 blocks of the frontier) — bending into its cardinal gate without overwriting anything. Walks persist across restarts, are abandoned afterroute_walk_max_lengthblocks (default 1600) or at impassable terrain, and the per-node connection cap applies on BOTH ends — no more cities with a road per direction. connect_all_structuresnow defaults true: ruins, fossils, shipwrecks, outposts, henges, gyms — every surface structure is a node ("camino a todo tipo de estructura"). Existing configs keep their saved value — flip it manually.- Vanilla villages no longer generate (datapack override of
minecraft:villages): the pack's bca villages replace them, so roads stop finding duplicate default villages. - Spawn is always beside a waystone: on a world's first boot a Waystones block is planted two blocks from spawn (once, persisted; inert without the Waystones mod).
Changed — Nuzlocke
- No bag items during battle (
disable_combat_inventory, finally wired): healing items on a Pokémon whose owner is mid-battle are rejected. - Capture level cap (
nuzlocke_capture_level_cap, default on): Pokémon above your strongest party member's level can't be caught — the ball bounces (out of battle) or the roll is zeroed (in battle), and the throw never burns the zone. (RCT's own badge-based cap isn't readable without its API; the party-max proxy is the house-rule equivalent.) - Zone header: the capture-zone notification is now a big centred on-screen title + subtitle (zone name + ○●✔✘ state) instead of an action-bar line.
- Setup screen gained a starter selection row (Default / Default+random / Three random), persisted per world and overriding the global config.
Changed — route trainers
- Line of sight 15 blocks (new default; existing configs keep their saved value).
- Instant battles: on sight the trainer engages immediately — no walk-up. Busy players (already battling) reset the trainer's recognition: it simply retries when they're free and still in view.
- Gym leaders & Elite 4 exempt: trainers standing inside ANY structure (gyms, league towers) never auto-engage — they require direct interaction.
Deferred (PLAN)
- Forfeit removal needs a mixin into Cobblemon's forfeit action (no event exists) — first mixin of the project, scheduled separately.
- Xaero chunk-colour zone layer needs Xaero's WorldMap jar in
libs/to compile against its highlighter internals;nuzlocke mapwaypoints remain the interim map view. - Tera/Mega/Gmax world toggles belong to mega_showdown's config — can't be controlled from another mod without its API.
[0.25.0] - 2026-06-11
Added
- Route trainers duel each other (
route_trainer_skirmishes, default on): two idle route trainers within sight of each other near a player square off — they face each other, close in, and exchange battle effects (crit/cloud particles + attack sounds) for ~15 s, ending with a winner's celebration and the loser fuming. Per-pair 5-minute cooldown; a player entering either trainer's line of sight takes priority (the duel breaks off and the player engagement runs). These are ambient skirmishes: a real NPC-vs-NPC Pokémon battle with their actual teams needs the trainer mod's API (Cobblemon only exposes player battles — pvp/pve/pvn), noted in the PLAN for the rival-system work.
[0.24.0] - 2026-06-11
Added
- Route trainers with line-of-sight auto-battle (GDD "rutas con entrenadores"), implemented
mod-agnostically by entity id (no compile-time dependency on rctmod):
- When a road completes, persistent trainer NPCs (
route_trainer_entity, defaultrctmod:trainer) are placed along it — one perroute_trainer_spacingblocks (default 160, max 6 per route), jittered beside the centreline, never in water, away from both cities, once per route ever (persisted). With the trainer mod absent (or a typo'd id) the feature is completely inert. - Line of sight: every half second, a trainer within
trainer_los_rangeblocks (the config existed since 0.2.0 — now it does something) with a clear sight line to a player does the classic routine: "!" (angry particle + chime), walks up to the player, and on reach triggers the battle by simulating the player's interaction — the same code path as right-clicking, so RCT's own battle flow is what runs. Per trainer-player cooldown (60 s), 10 s chase before giving up; spectators/creative and players already in a Pokémon battle are ignored. - Note: if RCT's trainer entity id differs in your pack version, run
/cobbleverserpg routes structures-style discovery via/summonautocomplete or F3 targeting and setroute_trainer_entityaccordingly.
- When a road completes, persistent trainer NPCs (
[0.23.0] - 2026-06-11
Added
/cobbleverserpg routes structures(op): dumps every structure in the registry — id, tags, and a[CITY]flag for the ones the currentroute_city_structure_tagsalready match — tocobbleverse_rpg_structures.txtin the game directory. The way to find a gym's real id instead of guessing.- Roads blend with their biomes: the paving palette now follows the landscape — deserts and badlands pave in smooth sandstone/sandstone, snowy and frozen biomes in cobblestone/gravel/stone, swamps and mangroves in packed mud/coarse dirt, and everywhere else keeps the classic dirt-path mix. Junction/street detection understands all the new palette blocks (primaries like smooth sandstone and packed mud count as strict road evidence).
- Subtle perimeter grooming: a sparse ring just beyond the road's edge (≈35% of cells, 2-block band) clears small plants only — grass, ferns, flowers — never trees or solid blocks, so the road reads cleanly without a shaved strip.
[0.22.0] - 2026-06-11
Changed
- Route generation is much cheaper and smoother.
- At most one corridor snapshot + A* every 2 ticks (was 4 whole segments per tick — the snapshot is the expensive part), narrower corridor (detour 28→24), and jobs whose frontier is far from every player are parked instead of burning processing.
- The per-cell structure-avoidance query is memoized per chunk: chunks without structure references (the vast majority) skip it entirely.
- Better hill handling: the climb penalty is now applied to the square of the height change (a 3-block scramble costs 9× a gentle step), so roads contour around elevations on smooth grades instead of charging up them.
- Smooth direction changes: a per-45° turn penalty makes paths flow in progressive curves — no more hard 90° corners or zigzag stitching.
- Cities now have four cardinal gates (N/S/E/W points on the standoff ring): roads leave through the gate facing their destination and aim at the destination's facing gate, so towns read like classic Pokémon cities with tidy outlets instead of radial spaghetti.
- Roads never overwrite each other (nor village streets): paving that meets an existing road surface adopts those cells and merges into them; the dock connector likewise preserves the streets it reaches.
Added
- Capture-zone identification on the map and HUD:
/cobbleverserpg nuzlocke map(any player) drops one Xaero waypoint per recorded capture zone — named with its state symbol (● pending, ✔ captured, ✘ lost) and the zone's real name. Without Xaero the payloads are harmless. Biome zones have no map anchor and are skipped.- Zone HUD (
nuzlocke_zone_hud, default on): crossing into a different capture zone shows its name and state in the action bar (○ free / ● pending / ✔ captured / ✘ lost). WaypointDiscoveredPayloadgained ashowToastflag so bulk waypoint dumps don't spam toasts.
[0.21.0] - 2026-06-11
Changed
- Nuzlocke zones now follow the world's geography (GDD: "ciudad/estructura/ruta") instead of
being one-per-biome. A position resolves, in priority order, to: the city it is in (≤64
blocks of a known city, including waystone cities), the named route it is on (≤32 blocks of
a finished road's segment — "Ruta 1E" is a capture zone of its own, like the classic games), the
structure instance it is inside (per-instance key, so two ruins are two zones), and only in
open wilderness the legacy biome zone. Zone keys are stable per place; messages, the status
command and toasts show the city/route name. Existing biome-keyed records from older versions
remain valid (they simply stop being hit where a city/route/structure now takes precedence) —
use
/cobbleverserpg nuzlocke resetfor a clean chart.
[0.20.0] - 2026-06-11
Added
- Healing sources are chosen in the world setup (and changeable later): the Nuzlocke setup
screen gained a fifth selector — All / Machines only / Items only / None (hardcore) — persisted
per world and taking precedence over the global
healing_modeconfig;/cobbleverserpg nuzlocke setup(op) re-opens the screen to change it at any time. Hardcore-created worlds take the global config's mode. Worlds configured before 0.20.0 default to All until re-run.
Changed
PLAN.mdrewritten (v2, Spanish) around the full feature roadmap: route trainers + RCT rivals, structure listing, biome blending, submarine signage; zone redefinition (city/structure/route), 4-player Soullock with interaction-ring GUI; Ditto HM field moves + Habitat Table; Sophisticated-Storage Ball Storage / Apricorn Processor (2 fases); Pokémon encapsulation (PC → display ball item); Defeated Catch (1-minute fainted catch window); and the Action Combat system (research spike). Includes shipped-state per module and a proposed order.
[0.19.0] - 2026-06-11
Route-quality release addressing the first in-game testing feedback.
Fixed
- Severe lag while routes load. Two causes removed: corridor pre-generation no longer calls
synchronous
getChunk(FULL, true)on the server thread (100 ms+ stalls per chunk) — it now only adds short self-expiring chunk tickets and lets the chunk system generate on its worker threads, resuming the segment when the corridor turns up loaded; and the boot-timelocateStructurestorm is gone — each city's neighbour search runs once ever (persistedseededflag inRouteData) instead of re-running for every known city on every server start, and seeding is spaced to one call per 2 s (routes resetre-seeds everything). - Roads paved across treetops and structures. The pavers and the A* used the
WORLD_SURFACEheightmap, which sits on forest canopy and roofs. Heights now come from a ground probe that descends through logs, leaves and plants (RoutePathfinder.groundY), used by the pathfinder and every placement helper; additionally the A* marks cells inside any non-city structure impassable (getStructureContaining, city tags/ids excluded; disabled in connect-all mode), so roads detour around ruins/towers/foreign villages instead of crossing them. Paved cells also clear trunks/canopy up to 6 blocks above (roads are walkable under trees). - Routes now actually reach the town streets. The 0.16 connector walked a straight line and gave up at the first wall. Docking v2 scans up to 28 blocks around the road end for the nearest real street cell (street block + ≥2 street neighbours, own cells excluded) and paves a 3-wide connector along a mini-A* path to it — steering around houses; the straight walk remains only as fallback when no street is found.
- Submarine routes are now lit: a sea lantern is embedded in the paved channel floor every 11 cells (same cadence as the land lamp posts).
Added
- Hardcore = Nuzlocke game mode at world creation: creating the world in Hardcore in the vanilla create-world screen auto-enables the full Nuzlocke rule set (lock + permadeath + spectator-on-loss) — the setup screen then never shows. Non-hardcore worlds keep the first-join setup screen.
- Trainer gyms (and anything else) can join the network: entries in
route_city_structure_tagsnow also match exact structure IDs (not just tags), and the new operator command/cobbleverserpg routes addcity [name]registers the spot you're standing on as a named city (default "Gym") and queues its road connections — works for gyms from any mod and even player builds.
[0.18.0] - 2026-06-11
Added
- Escape Rope (GDD Module 7 / Phase 9 — first custom item): craft 2× string + 1 ender pearl → 2 ropes (shapeless), found in the Tools creative tab. Using it teleports you to a safe, dry spot at the nearest known town of the route network — which includes every activated waystone, since those register as named cities — so it works with or without the Waystones mod (a deliberate deviation from the GDD's "nearest visited waystone", using our own persisted data instead of Waystones internals). Overworld only, blocked while in a Pokémon battle, 10 s cooldown, consumes one rope (not in creative), enderman teleport sounds at both ends, action-bar feedback with the town's name. Pixel-art texture + model + es/en names shipped.
[0.17.0] - 2026-06-11
Added
- Starter randomizer (GDD Module 4) —
starter_selection_modefinally does something:DEFAULT: Cobblemon's starter screen untouched.DEFAULT_PLUS_RANDOM(config default): the vanilla categories plus an extra "Random" category with three random species.THREE_RANDOM: the screen offers a single category of three random species.- Random picks are implemented, base-stage species without the
legendary/mythical/ultra_beastlabels, at the same level the pack's own starters use. The offer is seeded from the world seed + player UUID (and the registry is sorted before shuffling), so each player sees a stable offer in a given world — reopening the screen or restarting never re-rolls, and the choice always validates against the same list. Implemented by replacing Cobblemon'sstarterHandlerwith a subclass that transformsgetStarterList; selection, locking and the mandatory-nickname prompt keep working unchanged.
[0.16.0] - 2026-06-11
Fixed
- Diagonal roads no longer look broken. The paver stamped a 1-D cross-section perpendicular to the travel direction; on diagonal stretches those are 5 corner-touching diagonal lines, leaving checkerboard holes and jagged edges. Each centreline cell now stamps a round, solid brush (radius 2.5) — overlapping discs stay gap-free in every direction, with the ragged-edge randomness applied to the brush's outer ring. (The A* itself was fine: diagonals already cost √2 with an octile heuristic.)
- Aquatic-channel surface markers are placed as one buoy per side of the centreline (outside the brush); with the new ring-shaped brush edge the old per-edge-cell logic would have built stone rings walling the channel shut.
Added
- Roads now dock into the town's own streets. When a road finishes, each end extends from the 20-block standoff ring toward the city centre with a narrow 3-wide connector until it touches an existing village street (dirt path, gravel, cobblestone, coarse dirt, or desert villages' smooth sandstone), stopping early at building walls/roofs (height jump > 4) and skipping water — so routes visibly merge into the village path grid instead of dying on the outskirts.
[0.15.0] - 2026-06-11
Added
- Cities adopt their waypoint's name: activating a waystone within 128 blocks of a known city now renames that city to the waystone's name (previously only ≤64 blocks collapsed into the node), and the end signposts of every finished road touching it are rewritten in place — signs, completion broadcasts and route-entry toasts all refer to the city by its waypoint name. Only a waystone with no city nearby becomes a new node of its own.
- Sign placement is now rename-aware in general: a signpost that already stands at the target spot gets its text rewritten instead of a second sign being stacked on top of it.
Removed
- GitHub Actions build workflow (
.github/workflows/build.yml): the Fabric-template CI built with JDK 25, which Gradle 8.10 can't run, so every push failed and spammed e-mail notifications. Builds happen locally via.\gradlew build(see README); CI can return later properly pinned to JDK 21 if wanted.
Файлы
cobbleverse_rpg-0.45.0.jar(221.24 KiB)
ОсновнойМетаданные
Канал релиза
Beta
Номер версии
0.45.0
Загрузчики
Fabric
Версии игры
1.21.1–1.21.11
Загрузок
46
Дата публикации
14.06.2026
