53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
from json import load
|
||
|
from os import chdir
|
||
|
from pathlib import Path
|
||
|
from shutil import copy
|
||
|
from shutil import copytree
|
||
|
from shutil import make_archive
|
||
|
from shutil import rmtree
|
||
|
|
||
|
|
||
|
project_dir = Path(".").resolve()
|
||
|
build_root_dir = project_dir / "_build"
|
||
|
|
||
|
fabric_mod_json_path = project_dir / "fabric.mod.json"
|
||
|
source_files = [
|
||
|
fabric_mod_json_path,
|
||
|
project_dir / "pack.mcmeta",
|
||
|
project_dir / "data"
|
||
|
]
|
||
|
|
||
|
|
||
|
def get_build_name(mod_info: dict) -> str:
|
||
|
return f"{mod_info['id'].replace('_', '-')}-{mod_info['version']}-mc{mod_info['depends']['minecraft']}"
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
# load mod info
|
||
|
with fabric_mod_json_path.open("r") as f:
|
||
|
mod_info = load(f)
|
||
|
# get build name
|
||
|
build_name = get_build_name(mod_info)
|
||
|
# clear/create required directories
|
||
|
build_tmp_dir = build_root_dir / build_name
|
||
|
if build_tmp_dir.exists():
|
||
|
rmtree(build_tmp_dir)
|
||
|
build_tmp_dir.mkdir(parents=True)
|
||
|
# copy source files
|
||
|
for s in source_files:
|
||
|
if s.is_dir():
|
||
|
copytree(s, build_tmp_dir / s.name)
|
||
|
else:
|
||
|
copy(s, build_tmp_dir / s.name)
|
||
|
# create jar archive
|
||
|
chdir(build_root_dir)
|
||
|
make_archive(build_name, "zip", build_tmp_dir.name)
|
||
|
output_file = Path(build_name + ".zip").rename(build_name + ".jar").resolve()
|
||
|
chdir(project_dir)
|
||
|
# cleanup
|
||
|
rmtree(build_tmp_dir)
|
||
|
# done
|
||
|
print("Done. The resulting jar file is at", output_file)
|