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>
39 lines
1.3 KiB
Python
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()
|