From 1c12ac7c827d6183703fdfcf9a405cd46a8f7f2e Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Thu, 19 Dec 2024 22:49:20 +0100 Subject: [PATCH] Improve script using classes --- Better-Leaves-Lite-1.0.zip | Bin 737601 -> 737601 bytes gen_pack.py | 158 +++++++++++++++++++++---------------- 2 files changed, 88 insertions(+), 70 deletions(-) diff --git a/Better-Leaves-Lite-1.0.zip b/Better-Leaves-Lite-1.0.zip index fc5c148cf7d1ffd377630c1315f35a78a40d685c..3bb27d9b6aeebca0e7307a86ea6aea791b6392a9 100644 GIT binary patch delta 56032 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 delta 56032 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 VP@snR1NRJ_BuKeB;%)C^_kWGLVQc^Z diff --git a/gen_pack.py b/gen_pack.py index 2006322..55a25d0 100644 --- a/gen_pack.py +++ b/gen_pack.py @@ -17,6 +17,33 @@ def printGreen(out): print("\033[92m{}\033[00m".format(out)) def printCyan(out): print("\033[96m{}\033[00m" .format(out)) def printOverride(out): print(" -> {}".format(out)) +class LeafBlock: + def __init__(self, namespace, block_name, texture_name): + self.namespace = namespace + self.block_name = block_name + self.texture_name = texture_name + base_model = "leaves" + has_carpet = False + has_no_tint = False + use_legacy_model = False + texture_prefix = "" + overlay_texture_id = "" + block_id_override = None + texture_id_override = None + dynamictrees_namespace = None + def getId(self): + if (self.block_id_override != None): return self.block_id_override + return self.namespace+":"+self.block_name + def getTextureId(self): + if (self.texture_id_override != None): return self.texture_id_override + return self.namespace+":block/"+self.texture_prefix+self.texture_name +class CarpetBlock: + def __init__(self, carpet_id, leaf): + self.carpet_id = carpet_id + self.leaf = leaf + if (leaf.has_no_tint): self.base_model = "leaf_carpet_notint" + base_model = "leaf_carpet" + # This is where the magic happens def autoGen(jsonData, args): notint_overrides = jsonData["noTint"] @@ -36,83 +63,78 @@ def autoGen(jsonData, args): for root, dirs, files in os.walk("./input/assets"): for infile in files: if infile.endswith(".png") and (len(root.split("/")) > 3): - namespace = root.split("/")[3] texture_name = infile.replace(".png", "") - block_name = texture_name + + leaf = LeafBlock(root.split("/")[3], texture_name, texture_name) # Handle leaf textures in subfolders - texture_prefix = "" if (len(root.split("/")) > 6): - texture_prefix = root.split("/")[6]+"/" - if (block_name == "leaves"): # For mods that use a structure like "texture/woodtype/leaves.png" - block_name = texture_prefix.replace("/", "_")+block_name - printGreen(namespace+":"+block_name) - printOverride("Auto-redirected from "+namespace+":"+texture_name) + leaf.texture_prefix = root.split("/")[6]+"/" + if (leaf.block_name == "leaves"): # For mods that use a structure like "texture/woodtype/leaves.png" + leaf.block_name = leaf.texture_prefix.replace("/", "_")+leaf.block_name + printGreen(leaf.getId()) + printOverride("Auto-redirected from "+leaf.getId()) else: # For mods that use a structure like "texture/natural/some_leaves.png" - printGreen(namespace+":"+block_name) - printOverride("Prefix: "+ texture_prefix); - else: printGreen(namespace+":"+block_name) + printGreen(leaf.getId()) + printOverride("Prefix: "+ leaf.texture_prefix); + else: printGreen(leaf.getId()) # We don't want to generate assets for overlay textures - if (namespace+":block/"+texture_prefix+texture_name) in overlay_textures.values(): + if (leaf.getTextureId()) in overlay_textures.values(): printOverride("Skipping overlay texture") continue texture = Image.open(os.path.join(root, infile)) - use_legacy_model = texture.size[0] != texture.size[1] - if use_legacy_model: printOverride("Animated – using legacy model") + leaf.use_legacy_model = texture.size[0] != texture.size[1] + if leaf.use_legacy_model: printOverride("Animated – using legacy model") if args.legacy: - use_legacy_model = True + leaf.use_legacy_model = True printOverride("Using legacy model as requested") # Generate texture - if not use_legacy_model: generateTexture(root, infile) + if not leaf.use_legacy_model: generateTexture(root, infile) # Set block id and apply overrides - block_id = namespace+":"+block_name - if block_id in block_id_overrides: - block_id = block_id_overrides[block_id] - printOverride("ID Override: "+block_id) + if leaf.getId() in block_id_overrides: + leaf.block_id_override = block_id_overrides[leaf.getId()] + printOverride("ID Override: "+leaf.getId()) # Set texture id and apply overrides - texture_id = namespace+":block/"+texture_prefix+texture_name - has_texture_override = (block_id) in block_texture_overrides + has_texture_override = (leaf.getId()) in block_texture_overrides if has_texture_override: - texture_id = block_texture_overrides[block_id] - printOverride("Texture Override: "+texture_id) + leaf.texture_id_override = block_texture_overrides[leaf.getId()] + printOverride("Texture Override: "+leaf.getTextureId()) - base_model = "leaves" # Check if the block appears in the notint overrides - hasNoTint = block_id in notint_overrides - if use_legacy_model: - base_model = "leaves_legacy" - elif hasNoTint: - base_model = "leaves_notint" + leaf.has_no_tint = leaf.getId() in notint_overrides + if leaf.use_legacy_model: + leaf.base_model = "leaves_legacy" + elif leaf.has_no_tint: + leaf.base_model = "leaves_notint" printOverride("No tint") # Check if the block has an additional overlay texture - overlay_texture_id = "" - if block_id in overlay_textures: - base_model = "leaves_overlay" - overlay_texture_id = overlay_textures[block_id] - printOverride("Has overlay texture: "+overlay_texture_id) + if leaf.getId() in overlay_textures: + leaf.base_model = "leaves_overlay" + leaf.overlay_texture_id = overlay_textures[leaf.getId()] + printOverride("Has overlay texture: "+leaf.overlay_texture_id) # Check if the block has a dynamic trees addon namespace - dynamictrees_namespace = None - if (namespace) in dynamictrees_namespaces: - dynamictrees_namespace = dynamictrees_namespaces[namespace] + + if (leaf.namespace) in dynamictrees_namespaces: + leaf.dynamictrees_namespace = dynamictrees_namespaces[leaf.namespace] # Generate blockstates & models - generateBlockstate(block_id, dynamictrees_namespace) - generateBlockModels(block_id, base_model, texture_id, overlay_texture_id) - generateItemModel(block_id, has_texture_override) + generateBlockstate(leaf) + generateBlockModels(leaf) + generateItemModel(leaf, has_texture_override) # Certain mods contain leaf carpets. # Because we change the leaf texture, we need to fix the carpet models. - if (block_id) in leaves_with_carpet: - carpet_id = leaves_with_carpet[block_id] - generateCarpetAssets(carpet_id, hasNoTint, texture_id) - printOverride(f"Generating leaf carpet: {carpet_id}") + if (leaf.getId()) in leaves_with_carpet: + carpet = CarpetBlock(leaves_with_carpet[leaf.getId()], leaf) + generateCarpetAssets(carpet) + printOverride(f"Generating leaf carpet: {carpet.carpet_id}") filecount += 1 # End of autoGen @@ -202,9 +224,9 @@ def generateTexture(root, infile): print("Error while generating texture for '%s'" % infile) -def generateBlockstate(block_id, dynamictrees_namespace): - mod_namespace = block_id.split(":")[0] - block_name = block_id.split(":")[1] +def generateBlockstate(leaf): + mod_namespace = leaf.getId().split(":")[0] + block_name = leaf.getId().split(":")[1] # Create structure for blockstate file block_state_file = f"assets/{mod_namespace}/blockstates/{block_name}.json" @@ -225,18 +247,18 @@ def generateBlockstate(block_id, dynamictrees_namespace): json.dump(block_state_data, f, indent=4) # Do the same for the dynamic trees namespace - if dynamictrees_namespace != None: - dyntrees_block_state_file = f"assets/{dynamictrees_namespace}/blockstates/{block_name}.json" - os.makedirs("assets/{}/blockstates/".format(dynamictrees_namespace), exist_ok=True) + if leaf.dynamictrees_namespace != None: + dyntrees_block_state_file = f"assets/{leaf.dynamictrees_namespace}/blockstates/{block_name}.json" + os.makedirs("assets/{}/blockstates/".format(leaf.dynamictrees_namespace), exist_ok=True) # Write blockstate file with open(dyntrees_block_state_file, "w") as f: json.dump(block_state_data, f, indent=4) -def generateBlockModels(block_id, base_model, texture_id, overlay_texture_id): - mod_namespace = block_id.split(":")[0] - block_name = block_id.split(":")[1] +def generateBlockModels(leaf): + mod_namespace = leaf.getId().split(":")[0] + block_name = leaf.getId().split(":")[1] # Create models folder if it doesn't exist already os.makedirs("assets/{}/models/block/".format(mod_namespace), exist_ok=True) @@ -245,22 +267,22 @@ def generateBlockModels(block_id, base_model, texture_id, overlay_texture_id): # Create structure for block model file block_model_file = f"assets/{mod_namespace}/models/block/{block_name}{i}.json" block_model_data = { - "parent": f"betterleaves:block/{base_model}{i}", + "parent": f"betterleaves:block/{leaf.base_model}{i}", "textures": { - "all": f"{texture_id}" + "all": f"{leaf.getTextureId()}" } } # Add overlay texture on request - if (overlay_texture_id != ""): - block_model_data["textures"]["overlay"] = overlay_texture_id + if (leaf.overlay_texture_id != ""): + block_model_data["textures"]["overlay"] = leaf.overlay_texture_id # Write block model file with open(block_model_file, "w") as f: json.dump(block_model_data, f, indent=4) -def generateItemModel(block_id, override_block_texture=False): - mod_namespace = block_id.split(":")[0] - block_name = block_id.split(":")[1] +def generateItemModel(leaf, override_block_texture=False): + mod_namespace = leaf.getId().split(":")[0] + block_name = leaf.getId().split(":")[1] # Create models folder if it doesn't exist already os.makedirs("assets/{}/models/item/".format(mod_namespace), exist_ok=True) @@ -282,9 +304,9 @@ def generateItemModel(block_id, override_block_texture=False): with open(item_model_file, "w") as f: json.dump(item_model_data, f, indent=4) -def generateCarpetAssets(carpet_id, notint, texture_id): - mod_namespace = carpet_id.split(":")[0] - block_name = carpet_id.split(":")[1] +def generateCarpetAssets(carpet): + mod_namespace = carpet.carpet_id.split(":")[0] + block_name = carpet.carpet_id.split(":")[1] # Create structure for blockstate file block_state_file = f"assets/{mod_namespace}/blockstates/{block_name}.json" @@ -300,16 +322,12 @@ def generateCarpetAssets(carpet_id, notint, texture_id): with open(block_state_file, "w") as f: json.dump(block_state_data, f, indent=4) - base_model = "leaf_carpet" - if (notint): - base_model = "leaf_carpet_notint" - # Create structure for block model file block_model_file = f"assets/{mod_namespace}/models/block/{block_name}.json" block_model_data = { - "parent": f"betterleaves:block/{base_model}", + "parent": f"betterleaves:block/{carpet.base_model}", "textures": { - "wool": f"{texture_id}" + "wool": f"{carpet.leaf.getTextureId()}" } } # Save the carpet block model file