dachte icon

mcpack_convert_alpha.py

dachte | PRO | 03/12/21 01:58:31 AM UTC | 0 ⭐ | 1283 👁️ | Never ⏰ | []
Python |

2.29 KB

|

None

|

0 👍

/

0 👎

#!/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