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>
This commit is contained in:
claudeandClaude Opus 5.5 committed 2026-11-09 16:26:30 +01:00
1 parent 0741c84077
commit 4083791944
133 files changed
+8350 -3273

No files matched your search

+155 -6
View File
@@ -2,6 +2,8 @@
"chapter.0217ED8D82F11BE4.chapter_subtitle": ["What never spawns on its own"]
"chapter.0217ED8D82F11BE4.title": "Legends"
"chapter.0F763138AA0551CF.title": "Verdant Jungle"
"chapter.15B6062D067ECE6C.chapter_subtitle": ["Every field move your Pokémon can lend you"]
"chapter.15B6062D067ECE6C.title": "HMs"
"chapter.1AB2113B8D294817.title": "Basalt Furnace"
"chapter.1B23BCD483E3F9CE.title": "Shallows"
"chapter.1CC462D3533A24CB.title": "Dripstone Depths"
@@ -23,10 +25,24 @@
"chapter.683F9A3EE54CFAEB.title": "Sunscorch"
"chapter.720F052C0D14A813.title": "Deep Sea"
"file.0000000000000001.title": "Cobblemon Survival"
"quest.027E3B8E614FA133.quest_desc": [
"Craft the Galarian Zapdos Sigil and use it in Verdant Jungle. Catch the Lv 80 Galarian Zapdos that answers."
]
"quest.027E3B8E614FA133.title": "Galarian Zapdos"
"quest.035E43CC5E263118.quest_desc": [
"Feed energy into a Synthesis Core shell: the Pokémon inside makes its own drops, as if defeated. Gold, diamond or netherite shells add looting."
]
"quest.035E43CC5E263118.title": "Drop Synthesizer"
"quest.0364A4D8EA904F6E.quest_desc": [
"Only one weather runs at a time: the last one switched on wins."
"Rain Dance: real rain around you, anywhere; it puts out fires and counts for rain evolutions and spawns."
"Thunder: a thunderstorm around you."
"Sunny Day: keeps the sky clear."
"Blizzard: real snow falls and settles around you."
"Sandstorm: soul sand and honey don't slow you, and sand, gravel and clay break four times as fast."
"Mist: anything hunting you loses you once you're 8 blocks away. Needs the Mire gate."
]
"quest.0364A4D8EA904F6E.title": "Weather"
"quest.0416CE46FDF992CF.quest_desc": [
"Each machine is a 3×3×3 shell with its core in the middle of one wall and an empty chamber in the centre for the Pokémon. Place the core: glowing ghost blocks show where the shell goes."
"Send your Pokémon out near the core and use the core with an empty hand: it walks in. Use the core again to take it back; sneak-use to see what the machine is doing."
@@ -71,6 +87,16 @@
"Craft the Latios Sigil and use it in Highland Meadows. Catch the Lv 70 Latios that answers."
]
"quest.0BCD6F1DF120EEF0.title": "Latios"
"quest.0C98431E89D63AA8.quest_desc": [
"Switch these on from the Field moves of the Pokémon you ride. They stay on for that Pokémon."
"Surf: much faster through water."
"Tailwind: faster through the air."
"Agility: faster on land."
"Swift: reaches top speed twice as quickly."
"U-turn: turns far more sharply."
"Endure: double the stamina."
]
"quest.0C98431E89D63AA8.title": "Mount Toggles"
"quest.0CA0C724D201B8A0.quest_desc": [
"There is no ore anywhere except in each zone's own veins, and they grow back after you mine them."
"Basalt Furnace has Ancient Debris, Quartz."
@@ -96,11 +122,42 @@
"Craft the Zapdos Sigil and use it in Westmarch. Catch the Lv 70 Zapdos that answers."
]
"quest.1334D8BDB02D0027.title": "Zapdos"
"quest.136DBA5479235C7C.quest_desc": [
"Cut: fells a whole tree, or clears the plants in front of you."
"Rock Smash: breaks a stone block, or mines up to 32 connected ore in one punch, and veins still grow back."
"Dig: takes dirt, sand, gravel, clay and snow in one hit."
"Leafage: grows nearby crops, saplings and berry trees at once, and covers bare ground in flowers. Sneak to till soil instead."
"Stockpile: drinks water or lava, then spits it back out where you aim."
"Strength: pushes the block you aim at one block, in any direction, along with anything inside it."
"Tail Whip: sweeps suspicious sand or gravel clean in one go."
]
"quest.136DBA5479235C7C.title": "Gathering and Building"
"quest.1391BDC3E21A671E.quest_desc": [
"Each kind of Pokémon lives in one zone of the island. Catch three that call Basalt Furnace home."
"Their drops are what this zone adds to your crafting: look an item up in JEI to see who drops it."
]
"quest.1391BDC3E21A671E.title": "Locals of Basalt Furnace"
"quest.14426F35CDAB120B.quest_desc": [
"Growth: makes the Pokémon you aim at one size bigger for good; aim elsewhere and you grow for 5 minutes."
"Minimize: the same, but smaller."
"Outrage: turns an XL Pokémon of yours into an Alpha."
"Calm Mind: settles an Alpha of yours back into an ordinary Pokémon."
"Decorate: one roll at making the Pokémon you aim at shiny for good, once an hour."
]
"quest.14426F35CDAB120B.title": "Changing a Pokémon"
"quest.14A663D7085B96EF.quest_desc": [
"Flash: lets you see in the dark. Needs the Dripstone gate."
"Dive: breathe, walk and mine at full speed underwater. Needs the Mire gate."
"Rock Climb: walls work like ladders, on foot or riding. Needs the Highlands gate."
"Magnet Rise: slow flight for building. Double-tap jump to lift off. Needs the Sunscorch gate."
"Lava Plume: the same as Dive, for lava, with fire immunity. Needs the Deep Dark gate."
"Jump: jump higher and land safely. Comes from Splash."
"Shadow Sneak: walk silently, unseen by pressure plates and sculk, at a reduced speed."
"Snowscape: snow under your feet, and still water freezes as you walk across it."
""
"A gate means the Pokémon must have reached the top level of that zone, or hold one of its materials: its ore, evolution stone or guardian's drop."
]
"quest.14A663D7085B96EF.title": "Exploring Auras"
"quest.15287B830F186D1D.quest_desc": [
"There is no ore anywhere except in each zone's own veins, and they grow back after you mine them."
"Highland Meadows has Lapis Lazuli, Sun Stone."
@@ -137,6 +194,10 @@
"Their drops are what this zone adds to your crafting: look an item up in JEI to see who drops it."
]
"quest.1CC49658829D508F.title": "Locals of Verdant Jungle"
"quest.1DADE103D473A8DB.quest_desc": [
"Craft the Galarian Moltres Sigil and use it in Deep Dark. Catch the Lv 80 Galarian Moltres that answers."
]
"quest.1DADE103D473A8DB.title": "Galarian Moltres"
"quest.1DE944B24F006EB2.quest_desc": [
"A level 100 Pokémon in a Rebirth Core shell of amethyst is reborn after two hours as a shiny level 1 of its first stage, with better IVs and every move it knew."
]
@@ -145,12 +206,24 @@
"Craft the Eternatus Sigil and use it in The End. Catch the Lv 90 Eternatus that answers."
]
"quest.1F0FBB6BF2F87AA2.title": "Eternatus"
"quest.20A91DB2D922F503.quest_desc": [
"When you first arrive you choose a starter. Look after it: it is the only Pokémon on the island that can never be lost."
"When it faints it stays with you, fainted, until you heal it. It can't be released or sacrificed."
"Every other Pokémon is gone for good when it faints."
]
"quest.20A91DB2D922F503.title": "Your First Partner"
"quest.20F77357783CD1BD.quest_desc": [
"Flygon, Lv 50, guards Sunscorch: a giant that takes at most a quarter of its health from any one attack."
"Within 128 blocks its bar shows how far away it is. In the fight, watch the ground and step out of its area attacks; leaving the arena or dying loses the fight."
"Beat it for 3 Heat Rock, 2 Exp Candy L. It returns 5 hours later."
]
"quest.20F77357783CD1BD.title": "Guardian of Sunscorch"
"quest.22D0F5E8ADD14B3C.quest_desc": [
"Absorb: loose items drift toward you."
"Lucky Chant: more from what you break and fish. Needs the Frostpeak gate."
"Sweet Scent: draws a wild Pokémon of the area about once a minute, like a Poké Snack. What the Pokémon holds works as seasoning."
]
"quest.22D0F5E8ADD14B3C.title": "Helping Auras"
"quest.234A59E2E707A288.quest_desc": [
"Wild Pokémon in Dripstone Depths are level 22 to 38. Bring a team that can hold its own there."
"A Pokémon far above a zone's levels learns less from battles there; Exp. Candy always works in full."
@@ -191,6 +264,23 @@
"Their drops are what this zone adds to your crafting: look an item up in JEI to see who drops it."
]
"quest.2B50212FDAA429C2.title": "Locals of Shallows"
"quest.2CD942BD947AD220.quest_desc": [
"Some zones hurt to be in. Sunscorch is hot and Frostpeak is cold: your body temperature climbs or falls quickly there, so wear hide against heat and fur against cold."
"The Mangrove Mire poisons you unless you wear Mire Waders. Look these up in JEI with R."
]
"quest.2CD942BD947AD220.title": "Heat, Cold and Poison"
"quest.2CE94666160FA049.quest_desc": [
"Teleport: blinks you up to 30 blocks to where you look (30 seconds to recharge)."
"Charge: turns a block into a lasting redstone power source. Use it again to switch it off."
"Camouflage: makes you look like the creature you aim at for 15 minutes."
"Celebrate: fireworks over your head, for no reason at all."
]
"quest.2CE94666160FA049.title": "Handy Tricks"
"quest.2E30721826656889.quest_desc": [
"There is no ore in ordinary stone. Each zone has its own nodes and underground veins, which grow back after you mine them. JEI's Ore Veins pages show what grows where."
"A Pokémon that knows Rock Smash can mine a whole vein with one punch: see the HMs page of this book."
]
"quest.2E30721826656889.title": "Ore Comes from Veins"
"quest.2F51067D3773786B.quest_desc": [
"Wild Pokémon in Shallows are level 5 to 20. Bring a team that can hold its own there."
"A Pokémon far above a zone's levels learns less from battles there; Exp. Candy always works in full."
@@ -230,6 +320,10 @@
"Craft the Moltres Sigil and use it in Basalt Furnace. Catch the Lv 70 Moltres that answers."
]
"quest.3A7416794209F29E.title": "Moltres"
"quest.3B2B92B85F91AABA.quest_desc": [
"Craft the Galarian Articuno Sigil and use it in Highland Meadows. Catch the Lv 80 Galarian Articuno that answers."
]
"quest.3B2B92B85F91AABA.title": "Galarian Articuno"
"quest.3B64655619EB4CD4.quest_desc": [
"A Pokémon of level 20 or more in an Altar Core shell of obsidian can be given up for rare rewards: rare candies, ability items, even a nether star. It is gone for good."
]
@@ -245,6 +339,13 @@
"Beat it for 1 Mire Waders, 4 Pecha Berry, 2 Exp Candy M. It returns 5 hours later."
]
"quest.3D8B1B2FA845C406.title": "Guardian of Verdant Jungle"
"quest.3E981E279A76CEC0.quest_desc": [
"§ (left of 1) opens this book. J opens the map."
"R sends out the Pokémon selected on the left of your screen, or calls it back. Up and down arrows pick another. N opens its summary."
"Over an item in your inventory or JEI, R shows how to get it and U what it's used for."
"V shows more detail on what you're looking at. M switches shaders on and off. Everything can be changed in Options > Controls."
]
"quest.3E981E279A76CEC0.title": "Keys Worth Knowing"
"quest.3F61AFD873C3F8EE.quest_desc": [
"Abomasnow, Lv 60, guards Frostpeak Range: a giant that takes at most a quarter of its health from any one attack."
"Within 128 blocks its bar shows how far away it is. In the fight, watch the ground and step out of its area attacks; leaving the arena or dying loses the fight."
@@ -260,6 +361,12 @@
"Their drops are what this zone adds to your crafting: look an item up in JEI to see who drops it."
]
"quest.4508548D257AA751.title": "Locals of Dripstone Depths"
"quest.47A58B466F15469C.quest_desc": [
"Look at a wild Pokémon and press R: your Pokémon goes out and the battle starts."
"Wild Pokémon can also come to you. One that attacks you starts a battle instead of hurting you, unless none of your Pokémon can fight: then you take the hit yourself."
"Pokémon stronger than your team hunt you; weaker ones keep their distance. In a battle you can run, and you get a few seconds' head start."
]
"quest.47A58B466F15469C.title": "Battling"
"quest.47CC5F3E473D3ADA.quest_desc": [
"Craft the Regidrago Sigil and use it in Sunscorch. Catch the Lv 70 Regidrago that answers."
]
@@ -294,7 +401,7 @@
]
"quest.4CA0BE77C607EFF4.title": "Registeel"
"quest.4CCE497681B71AB5.quest_desc": [
"Sleeping doesn't heal your Pokémon. A Healing Machine does, but it is expensive and recharges slowly; potions and berries help in between."
"Sleeping doesn't heal your Pokémon. A Healing Machine does, and it also wakes a fainted starter, but it is expensive and recharges slowly; potions and berries help in between."
]
"quest.4CCE497681B71AB5.title": "Healing"
"quest.4D8A9AAC3492BF6A.quest_desc": [
@@ -329,6 +436,17 @@
]
"quest.55ECFCF6F71DD9EA.quest_subtitle": "Lv 30–45"
"quest.55ECFCF6F71DD9EA.title": "Sunscorch"
"quest.5662DCFF3C494207.quest_desc": [
"Any Pokémon of yours that has learned one of these moves can use it for you outside battle. There is nothing to craft or learn yourself."
"Send the Pokémon out, sneak and right-click it, and pick Field moves. It lists what that Pokémon can do; hover over one to read about it. The top left of your screen shows what is active."
""
"Partner HMs go to your empty hand: one per Pokémon, fired with a click."
"Auras and weather work on you while the Pokémon is out and within 24 blocks."
"Mount toggles help the Pokémon itself while you ride it."
""
"Working makes a Pokémon hungry. Right-click it with any berry to feed it. If it works on an empty stomach it loses friendship, and at none it refuses."
]
"quest.5662DCFF3C494207.title": "How HMs Work"
"quest.5A9BD54AA3CCF992.quest_desc": [
"Each kind of Pokémon lives in one zone of the island. Catch three that call Sunscorch home."
"Their drops are what this zone adds to your crafting: look an item up in JEI to see who drops it."
@@ -356,6 +474,11 @@
"Their drops are what this zone adds to your crafting: look an item up in JEI to see who drops it."
]
"quest.60D115B2A0C801B7.title": "Locals of Highland Meadows"
"quest.60FEC6A879706B6D.quest_desc": [
"Each zone has its own Pokémon and level range; the book has a page for each. The channels between the islands are gentle, the open sea around them is not."
"Most zones have a guardian: a giant Pokémon with a health bar at the top of your screen when you are near. Only a battle can hurt it, and it can lose at most a quarter of its health to one attack. Beat it for its rewards; it comes back hours later."
]
"quest.60FEC6A879706B6D.title": "Zones and Guardians"
"quest.6293CDFC2970C810.quest_desc": [
"Kingdra, Lv 55, guards Deep Sea: a giant that takes at most a quarter of its health from any one attack."
"Within 128 blocks its bar shows how far away it is. In the fight, watch the ground and step out of its area attacks; leaving the arena or dying loses the fight."
@@ -368,17 +491,24 @@
"Beat it for 3 Exp Candy Xl, 2 Netherite Scrap. It returns 5 hours later."
]
"quest.64893157D81592CD.title": "Guardian of Basalt Furnace"
"quest.64D6151FAA5792B2.quest_desc": [
"Machines are small buildings with a Pokémon inside: a Large Furnace, a Generator, a Drop Synthesizer, a Sacrifice Altar and a Rebirth Chamber. Craft a core, use it, and ghost blocks show how to build around it."
"JEI lists each core's recipe, and each machine's own page says what it makes."
]
"quest.64D6151FAA5792B2.title": "Pokémon at Work"
"quest.65A44ABB757D8EC9.quest_desc": [
"Craft the Latias Sigil and use it in Highland Meadows. Catch the Lv 70 Latias that answers."
]
"quest.65A44ABB757D8EC9.title": "Latias"
"quest.6603239BE6012B1F.quest_desc": [
"A Pokémon that faints is gone for good once the battle ends. Revives only help within that battle."
"A Pokémon holding a Revival Charm is saved once instead: the charm is used up and the Pokémon is healed. Give one to your most valuable partner."
"Apart from your starter, a Pokémon that faints is gone for good once the battle ends. Revives only help within that battle."
"A Pokémon holding a Revival Charm is saved once instead: the charm is used up and the Pokémon is healed. Give one to your most valuable partner. Your starter doesn't need one."
]
"quest.6603239BE6012B1F.title": "A Second Chance"
"quest.662D0BC3B032EA6A.quest_desc": ["Weaken a wild Pokémon in battle, then throw a Poké Ball at it."]
"quest.662D0BC3B032EA6A.title": "A Partner"
"quest.662D0BC3B032EA6A.quest_desc": [
"Weaken a wild Pokémon in battle, then throw a Poké Ball at it. The weaker it is, the easier it is to catch, and a Pokémon far above your team's level is much harder."
]
"quest.662D0BC3B032EA6A.title": "Your First Catch"
"quest.66F360A95FD42556.quest_desc": [
"Each kind of Pokémon lives in one zone of the island. Catch three that call Westmarch home."
"Their drops are what this zone adds to your crafting: look an item up in JEI to see who drops it."
@@ -398,7 +528,7 @@
"This island has no zombies, no creepers and no cows: only Pokémon. Their drops are your food, string, leather and much more."
"The island is split into zones, each with its own Pokémon, levels, ores and a guardian. You start on Button Isle; the further out you go, the stronger everything gets."
""
"This book suggests what to do next. Nothing in it is locked and it gives no rewards: do things in any order you like."
"This book suggests what to do next. Nothing in it is locked and it gives no rewards: do things in any order you like. This first page walks through how the island works; the next one lists every field move your Pokémon can lend you."
]
"quest.692C224D099307BA.title": "Welcome to the Island"
"quest.69D3A6622A0EE729.quest_desc": [
@@ -467,6 +597,11 @@
]
"quest.74149A0BF939C15E.quest_subtitle": "Lv 2–10"
"quest.74149A0BF939C15E.title": "Button Isle"
"quest.7426375BD8FE75B4.quest_desc": [
"A PC holds the Pokémon that don't fit in your party. A Pasture Block lets them out to roam around your base."
"Pastured Pokémon also work: open the pasture and give them a skill, such as mining or gathering, and they bring in items. What they can find depends on the zone the pasture stands in, and JEI's Pasture Finds pages list it."
]
"quest.7426375BD8FE75B4.title": "PC and Pastures"
"quest.7B60BB7EF06BE4E4.quest_desc": [
"Evolve a Pokémon. Some need a level, some an evolution stone: the stones come from ore veins in particular zones."
]
@@ -497,28 +632,37 @@
"task.011FDF522119676D.title": "Beat Eternatus"
"task.03F5C5D2587C6503.title": "Reach Westmarch"
"task.0988A335BEF29999.title": "Reach Basalt Furnace"
"task.12874838083C1D42.title": "Read this"
"task.16DC8BE1DDE7B0D7.title": "Beat Scyther"
"task.180A6D1BC999F7D4.title": "Read this"
"task.1AD94715DD267878.title": "Reach Lush Caves"
"task.1DC91BD8BFFFEDA9.title": "Put a Pokémon into a Drop Synthesizer"
"task.1E3E3883C5B3D807.title": "Read this"
"task.1E88C490A11841C2.title": "Put a Fire type into a Large Furnace"
"task.1EB647481990638E.title": "Read this"
"task.1FDC2EC84BCB0799.title": "Beat Mudsdale"
"task.22A180D1442FFCE5.title": "Beat Abomasnow"
"task.25A95FE7586E9E36.title": "Reach Sunscorch"
"task.26D7F4049F9F71AF.title": "Beat Tangrowth"
"task.27978949A669D5C5.title": "Read this"
"task.29BC1DB51DDFA453.title": "Put an Electric type into a Generator"
"task.2B27F35809CBDD44.title": "Read this"
"task.2D2320863A33D6F6.title": "Reach Highland Meadows"
"task.330E52B7A4CDB749.title": "Read this"
"task.34B8D43E572277D5.title": "Reach The End"
"task.3733FBDB6C485FA5.title": "Start a rebirth"
"task.3760C53D7E826E9F.title": "Beat Moltres"
"task.37E7DC548E1504B2.title": "Read this"
"task.37E84BF7E0830965.title": "Reach Button Isle"
"task.3DDCEC8895708D8B.title": "Reach Frostpeak Range"
"task.400C02B8A2511867.title": "Reach Shallows"
"task.40450EFE21BCC6AC.title": "Beat Kingdra"
"task.44B70BA974514E63.title": "Reach Southwold"
"task.44F75B6501B37EE0.title": "Read this"
"task.48FAAD6D76831C55.title": "Beat Swampert"
"task.4F3BC1526B0D54EB.title": "Read this"
"task.541704C98A1EFEFD.title": "Reach Dripstone Depths"
"task.54E90B9B1AF4C46C.title": "Read this"
"task.574F9217F1F28CA1.title": "Reach Deep Sea"
"task.58EAEDE25DA7FDA3.title": "Reach Southwold"
"task.601AABB55A476514.title": "Beat Morpeko"
@@ -526,8 +670,13 @@
"task.6120ECDE48C04063.title": "Read this"
"task.63B77EE998527582.title": "Beat Flygon"
"task.643C68559D41888A.title": "Beat Pinsir"
"task.66630E973B974C93.title": "Read this"
"task.68A914F71CB2AC6B.title": "Read this"
"task.6D2ED8A178EE3B43.title": "Reach Verdant Jungle"
"task.6EC304EEC3D8E6C3.title": "Put a Pokémon on a Sacrifice Altar"
"task.6F3A4DD1B1D796C0.title": "Reach Deep Dark"
"task.6FC8CBBD36184562.title": "Beat Regigigas"
"task.72EC56D3618A6550.title": "Read this"
"task.79A62C2E20551202.title": "Got it"
"task.7AF22D9FB20998A9.title": "Read this"
}