▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Моды/CobblemonOptimizer
CobblemonOptimizer

CobblemonOptimizer

CobbleOptimizer is a server-side Fabric mod that reduces lag caused by Cobblemon's Pokemon entities.

Оцените первым
14.4K
23
Все версииCobblemonOptimizer 4.6.0

CobblemonOptimizer 4.6.0

Release24.05.2026

Список изменений

● CobbleOptimizer 4.6.0 — Changelog

New: CobBreeding compatibility patch

Added a @Pseudo mixin targeting ludichat.cobbreeding.utils.SemVerKt::toSemVer to address two distinct issues in CobBreeding (Ludichat/Cobbreeding) versions ≤ 2.2.1.

Performance fix (always active, zero risk)

CobBreeding's toSemVer constructed a new kotlin.text.Regex on every invocation, triggering Pattern.compile (1–10 µs per call). On servers with many eggs, spark profiler flagged this as a measurable hotspot during egg deserialization.

The mixin uses @Redirect on the new kotlin/text/Regex(String) instruction inside toSemVer to return one of two process-wide cached Regex singletons. Pattern compilation now happens twice total at class load instead of once per call.

Correctness fix (toggleable, off by default)

The original regex ^\d(.\d(.\d([.-_].+)?)?)?$ has two bugs:

  1. Single \d per component. Multi-digit version components (e.g. 1.21.1, 2.2.10) fail to match, so toSemVer returns SemVer(emptyList()) with major=minor=patch=0. Downstream, PokemonEgg.verifyComponentsAfterLoad() misidentifies the egg as pre-2.0.0 and runs the wrong migration, crashing the server with NumberFormatException when an egg is moved/cloned from a pasture block.
  2. [.-_] as a character class. This is a regex range from . (0x2E) to _ (0x5F) instead of three literal characters. It accidentally matches digits, uppercase letters, and various punctuation.

When the toggle is enabled, the cached regex is the corrected version: ^\d+(.\d+(.\d+([._-].+)?)?)?$.

New config option

[patches] fix_cobbreeding_semver = false # default off, opt-in

Also reachable via the existing /cobbleoptimizer config patches.fix_cobbreeding_semver <true|false> command. The mixin re-reads the config on every call to toSemVer, so the toggle takes effect immediately without a server restart.

When the toggle is false, the cache still returns a singleton with the original (buggy) regex — semantics are bit-identical to vanilla CobBreeding, but the per-call Pattern.compile cost is eliminated. When the toggle is true, the cache returns the corrected regex.

Safety properties

  • No compile-time dependency on CobBreeding. The mixin uses @Pseudo + string target, so CobbleOptimizer builds and runs identically whether CobBreeding is installed or not.
  • Silent no-op when CobBreeding is absent. Registered in cobbleoptimizer-patches.mixins.json with defaultRequire: 0, so missing target classes don't propagate as errors.
  • Forward compatibility. If a future CobBreeding release changes the bytecode shape of toSemVer (e.g. caches the regex upstream, renames the method), the @Redirect no longer matches and the mixin becomes a silent no-op.

Файлы

CobbleOptimizer-4.6.0.jar(120.06 KiB)
Основной
Скачать

Метаданные

Канал релиза

Release

Номер версии

4.6.0

Загрузчики

NeoForge

Версии игры

1.21.1

Загрузок

962

Дата публикации

24.05.2026

Загрузил

ID версии

Главная