Files
cobblemon-survival-pack/tools/cobblemon_ore_overrides.py
claudeandClaude Opus 5.5 398301f0be Cobblemon Survival Pack: phases 0-2 and Phase 3 zones and hazards
Free NeoForge 1.21.1 modpack on Cobblemon 1.8.4 built with packwiz, plus
the Kotlin companion mod (cobblesurvival) and its built-in data pack.

- Phase 0: packwiz pack with Modrinth/CurseForge cross-links, build and
  export tooling, Prism instance sync, test server with smoke checks.
- Phase 1: Poke Ball shaped island (WorldGen Editor preset, seed isle-26),
  Adrian's biome list, no natural ore, structures without ore or vanilla
  mobs, no Nether portals, world template builder and world report.
- Phase 2: permadeath (CobbleHardcoreMon plus the companion mod's gap
  fixes), Revival Charm, expensive Healing Machine, Lootr refreshing
  loot, in-game self-tests on Minecraft's GameTest framework.
- Phase 3 so far: 14 zones with their own spawn pools and level bands
  (tools/zone_layout.py, tools/zone_spawns.py, "zone" spawn condition),
  Cold Sweat heat and cold as gates with boss-drop insulation recipes,
  spawn survey and hazard self-tests in tools/quick_check.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 19:01:21 +01:00

39 lines
1.3 KiB
Python

#!/usr/bin/env python3
"""Write data-pack overrides that stop Cobblemon's evolution-stone ores from generating.
Cobblemon adds its ore features from code as direct holders, so the
`neoforge:remove_features` modifier (which matches registry holders) cannot
remove them. Cobblemon looks each placed feature up by id, though, so an
override with zero placements under the same id turns it off. Re-run this
after a Cobblemon update and commit the result.
Usage: tools/cobblemon_ore_overrides.py <Cobblemon jar>
"""
import json
import shutil
import sys
import zipfile
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
PREFIX = "data/cobblemon/worldgen/placed_feature/ore/"
OUT = ROOT / "datapacks/core" / PREFIX
def main():
if len(sys.argv) != 2:
sys.exit(__doc__)
jar = zipfile.ZipFile(sys.argv[1])
shutil.rmtree(OUT, ignore_errors=True)
OUT.mkdir(parents=True)
names = sorted(n for n in jar.namelist() if n.startswith(PREFIX) and n.endswith(".json"))
for name in names:
original = json.loads(jar.read(name))
override = {"feature": original["feature"], "placement": [{"type": "minecraft:count", "count": 0}]}
(OUT / name[len(PREFIX):]).write_text(json.dumps(override, indent=2) + "\n")
print(f"wrote {len(names)} overrides to {OUT.relative_to(ROOT)}")
if __name__ == "__main__":
main()