Fixed
- Ancient Great Ball, Ancient Ultra Ball, and Origin Ball now show correct multipliers (1.5x, 2x, 255x). These balls were showing 1x because their multipliers depended on Cobblemon API property lookups (
pokeBall.ancient,catchRateModifier.isGuaranteed()) that silently returned false. Ball multipliers for these three are now hardcoded by name at the top of the calculation, bypassing API lookups entirely.
Fixed
- Eliminated lag spike when first looking at a Pokémon with a Poké Ball. The catch rate cache (datapack scan + classpath JSON reads for every species) was being done lazily on the render thread. Now preloads all species data on a background thread during client init, so the first lookup is instant.
Added
- Comprehensive debug logging system. All catch rate calculations are now logged to an in-memory buffer with full details: Pokémon, ball, multipliers, HP, status, modified catch rate, and whether the catch was predicted as guaranteed.
- Guaranteed catch failure detection. If the mod predicts a 100% catch (Master Ball, or formula-guaranteed) and the Pokémon breaks free, a prominent chat notification appears with instructions to generate a debug report.
/catchrate logcommand. Generates a comprehensive debug report including environment info (mod version, Minecraft version, loader, Cobblemon version, Java, OS, server type), installed mods list, config state, all recent calculation logs, guaranteed catch failures, and catch rate cache info — then uploads it to mclo.gs and gives the player a clickable link to share. Also saves a local copy tocatchrate-logs/as fallback.- Auto-enable debug on failure. Debug logging is automatically enabled for the session after a guaranteed catch failure, so subsequent calculations are captured in the report.
Added
- Estimated catch rates now show a
~prefix. If the mod can't find a species in any local data source (datapacks or mod JARs), it falls back to the default catch rate of 45. When this happens, the HUD and ball comparison panel prefix the percentage with~(e.g.,~14.2%) to indicate the value may be inaccurate. Species that genuinely have a catch rate of 45 are unaffected — the indicator only appears when no local data was found at all.
Changed
- Catch rate cache now resolves entirely from local data. Cobblemon's Species.encode/decode never includes catchRate, so the client registry always has the default 45 for every species. The old code checked the registry first and trusted any non-45 value, which was dead logic. The cache now always resolves from local datapacks and classpath JARs — one consistent source of truth, no registry dependency.
Fixed
- Wrong catch rates for Meltan, Melmetal, Enamorus, Kleavor, Sneasler, and Ursaluna. The species catch rate cache only scanned
generation1throughgeneration9on the classpath, missing Cobblemon'sgeneration7b(Meltan/Melmetal) andgeneration8a(Legends: Arceus) folders. If the registry served the broken default 45, these species would show inflated catch rates (e.g., Meltan/Melmetal real rate is 3, displayed as 45 — 15x too easy).
Fixed
- Ancient Great Ball, Ultra Ball, and Origin Ball multipliers now correct. Replaced reflection-based multiplier reading with hardcoded values: Ancient Great Ball = 1.5x, Ancient Ultra Ball = 2x, Ancient Origin Ball = guaranteed catch (255x).
Fixed
- Ancient Ultra Ball showed 1x instead of 2x. Ancient Great Ball also showed 1x instead of 1.5x. The
calculateAncientBall()method was returning a flat 1x for every ancient ball instead of reading the actualMultiplierModifierfrom the PokeBall object. Now dynamically reads the multiplier from Cobblemon's registry. Verified against PokeBalls.class bytecode: ancient_ultra_ball =MultiplierModifier(2.0f), ancient_great_ball =MultiplierModifier(1.5f), all others = null (1x). Ancient Origin Ball was already correct (caught by theisGuaranteed()check).
Fixed
- Timer Ball multiplier was wrong. The mod used the mainline games formula (
(turn-1) × 0.3 + 1, capped at 4) but Cobblemon uses its own formula (turn × 0.3, capped at 4). At turn 10 this showed 3.7x instead of the correct 3.0x, which could inflate catch rates enough to falsely display "Guaranteed" when the actual server-side chance was ~86%.


