#!/usr/bin/env python
import argparse
import code # for code.interact(local=dict(globals(), **locals()) ) debugging
import glob
import json
import os
import re
import shutil
import tempfile
from typing import Dict, List, Tuple # for mypy
######################
# programname
#
# What the program is for
def main():
cfg = handle_args()
orig_metadata = jload(os.path.join(cfg.src, 'manifest.json'))
with tempfile.TemporaryDirectory() as td:
# In this context manager, we made a directory into which we'll place everything before we zip it
shutil.copy(src=os.path.join(cfg.src, 'pack_icon.png'), dst=(os.path.join(td, 'pack.png')))
with open(os.path.join(td, 'pack.mcmeta'), 'w') as mcmf:
data = {
"pack": {
"pack_format": cfg.pack_ver,
"description": orig_metadata['header']['description']
}
}
json.dump(data, mcmf)
os.makedirs(os.path.join(td, 'assets', 'minecraft', 'textures', 'block'))
for btfile in os.listdir(os.path.join(cfg.src, 'textures', 'blocks')):
if '_mer' in btfile:
continue
if 'texture_set' in btfile:
continue
if not os.path.isfile(os.path.join(cfg.src, 'textures', 'blocks', btfile)):
continue # Embedded dir?
print(f"Processing texture {btfile}")
targfn = btfile
# TODO add more specific rules for remapping names here.
if btfile.startswith('wool_colored_'):
targfn = re.sub('wool_colored_(.*).png', '\\1_wool.png', btfile)
# We may also bail for textures that are too different in format (e.g. lava flow), or figure out how to convert them
shutil.copy(src=os.path.join(cfg.src, 'textures', 'blocks', btfile), dst=os.path.join(td, 'assets', 'minecraft', 'textures', 'block', targfn))
shutil.make_archive(f"{orig_metadata['header']['name']}-{orig_metadata['header']['version'][0]}.{orig_metadata['header']['version'][1]}.{orig_metadata['header']['version'][2]}", 'zip', td)
def handle_args():
parser = argparse.ArgumentParser(description="This does a thing")
parser.add_argument("--src", default='dlight', type=str, help="source dir for bedrock pack")
parser.add_argument("--pack_ver", default=6, type=int, help="Pack version")
ret = parser.parse_args()
return ret
#####
def jload(fn:str):
with open(fn, 'r') as fh:
ret = json.load(fh)
return ret
#####
main()
Comments