Files
claudeandClaude Opus 5.5 4083791944 Phase 9: reproducible builds, balance from the server, spark check, play feedback
Build: every tool pinned (JDK, packwiz, Gradle plugins, Python packages), exports
normalised, tools/check_reproducible.py proves two clean builds are byte-identical.

Server-side balance: a server can load config/cobblesurvival/datapack.zip in place of
the jar's data, /reload applies it, tools/server_update.py packages it and refuses
when a client change is needed. JEI drop pages are sent by the server. Code-held
balance numbers moved to tuning/server.json.

Performance: spark in the pack (server only), tools/perf_test.py with fake players
whose chunks really are active, docs/performance.md.

Adrian's feedback: default keys R, U, J, §; drop pages link to Cobblemon Info and show
real chances; bosses only hurt in battles; battle XP halved; channels between the
islands low level; temperature ×3 with insulation doubled; hazards start at once; no
item dots on the map; a wild attack starts a battle; the starter only faints; quest
book on join with a basics page and an HMs page; regional forms obtainable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 16:26:30 +01:00

3.5 KiB
Raw Permalink Blame History

Performance

Generated by tools/perf_test.py: the island world template, a 6G heap, 120 s to settle, then 180 s measured tick by tick with spark profiling the server thread. Players are the self-tests' fake clients: the server ticks them, loads their chunks and spawns Pokémon around them. One walks a long ring round the island when there are several. They send and encode no packets and fight no battles, so read this as the cost of the world, not of the network.

A tick has 50 ms; over that, the server falls behind.

Scenario Players Pastures × Pokémon each Machines each Mean tick p95 p99 Worst Ticks over 50 ms Pokémon pastured / wild Working machines Loaded chunks
solo 1 0 × 0 0 4.6 ms 6.4 ms 9.8 ms 216 ms 1 of 3900 0 / 18 0 of 0 2731
group 5 4 × 8 5 19.2 ms 25.7 ms 33.3 ms 269 ms 2 of 3900 113 / 175 16 of 25 8704
stress 8 6 × 16 10 38.3 ms 50.4 ms 54.9 ms 322 ms 215 of 3900 558 / 246 46 of 80 10763

Where the server thread's busy time goes: solo

Part Share
Minecraft 46.2 %
Other mods 39.0 %
JVM and Kotlin 11.4 %
Cobblemon 3.1 %
Companion mod 0.3 %

Companion mod, heaviest methods including what they call:

  • dev.cobblesurvival.selftest.PerfLoad$$Lambda.0x000000080138d638.accept: 2.02 %
  • dev.cobblesurvival.selftest.PerfLoad.register$onTickDone: 2.00 %
  • dev.cobblesurvival.selftest.PerfLoad.onTickDone: 2.00 %
  • dev.cobblesurvival.progress.HmsGate$$Lambda.0x0000000801380c60.accept: 0.12 %
  • dev.cobblesurvival.progress.HmsGate.register$onServerTick: 0.10 %
  • dev.cobblesurvival.progress.HmsGate.onServerTick: 0.10 %
  • dev.cobblesurvival.progress.HmsGate.check: 0.07 %
  • dev.cobblesurvival.progress.QuestEvents$$Lambda.0x000000080137b338.accept: 0.07 %

Where the server thread's busy time goes: group

Part Share
Minecraft 61.4 %
Other mods 20.6 %
JVM and Kotlin 13.2 %
Cobblemon 4.5 %
Companion mod 0.2 %

Companion mod, heaviest methods including what they call:

  • dev.cobblesurvival.selftest.PerfLoad$$Lambda.0x0000000801394200.accept: 1.34 %
  • dev.cobblesurvival.selftest.PerfLoad.register$onTickDone: 1.32 %
  • dev.cobblesurvival.selftest.PerfLoad.onTickDone: 1.32 %
  • dev.cobblesurvival.selftest.PerfLoad.walk: 0.24 %
  • dev.cobblesurvival.machine.MachineBlock$$Lambda.0x00000008022acee8.tick: 0.13 %
  • dev.cobblesurvival.machine.MachineBlock.getTicker$lambda$1: 0.13 %
  • dev.cobblesurvival.machine.MachineBlockEntity.serverTick: 0.13 %
  • dev.cobblesurvival.progress.CobblebaseGate$Gate.invoke: 0.08 %

Where the server thread's busy time goes: stress

Part Share
Minecraft 58.4 %
Other mods 18.9 %
JVM and Kotlin 17.0 %
Cobblemon 5.5 %
Companion mod 0.2 %

Companion mod, heaviest methods including what they call:

  • dev.cobblesurvival.selftest.PerfLoad$$Lambda.0x0000000801386618.accept: 1.02 %
  • dev.cobblesurvival.selftest.PerfLoad.register$onTickDone: 1.02 %
  • dev.cobblesurvival.selftest.PerfLoad.onTickDone: 1.02 %
  • dev.cobblesurvival.machine.MachineBlock$$Lambda.0x00000008022c2988.tick: 0.31 %
  • dev.cobblesurvival.machine.MachineBlock.getTicker$lambda$1: 0.30 %
  • dev.cobblesurvival.machine.MachineBlockEntity.serverTick: 0.30 %
  • dev.cobblesurvival.selftest.PerfLoad.walk: 0.27 %
  • dev.cobblesurvival.machine.MachineWork.tick: 0.15 %