From d573ec29da0ded47fe832f28c1e5ff411fc5926e Mon Sep 17 00:00:00 2001 From: Nathan Fritzler Date: Thu, 23 Jun 2022 12:59:02 -0600 Subject: [PATCH] Remove `Texture_Converter.py` and mentions of it. --- tools/README.md | 24 +- tools/Texture_Converter.py | 473 ------------------------------------- 2 files changed, 1 insertion(+), 496 deletions(-) delete mode 100755 tools/Texture_Converter.py diff --git a/tools/README.md b/tools/README.md index 4dc378bc1..2237e5377 100644 --- a/tools/README.md +++ b/tools/README.md @@ -3,30 +3,8 @@ This directory is for tools and scripts for MineClone 2. Currently, the only tool is Texture Converter. ## Texture Converter (EXPERIMENTAL) -This is a Python script which converts a resource pack for Minecraft to -a texture pack for Minetest so it can be used with MineClone 2. -**WARNING**: This script is currently incomplete, not all textures will be -converted. Some texture conversions are even buggy! -Coverage is close to 100%, but it's not quite there yet. -For a 100% complete texture pack, a bit of manual work on the textures -will be required afterwards. - -Modes of operation: -- Can create a Minetest texture pack (default) -- Can update the MineClone 2 textures - -Requirements: -- Know how to use the console -- Python 3 -- ImageMagick - -Usage: -- Make sure the file “`Conversion_Table.csv`” is in the same directory as the script -- In the console, run `./Texture_Converter.py -h` to learn the available options -- Convert the textures -- Put the new texture directory in the Minetest texture pack directory, just like - any other Minetest texture pack +Use the converter upstream in MineClone2. ## Luacheck Globals Generators This is a Python script which list every single global tables in mineclone2 source code. diff --git a/tools/Texture_Converter.py b/tools/Texture_Converter.py deleted file mode 100755 index bdf249113..000000000 --- a/tools/Texture_Converter.py +++ /dev/null @@ -1,473 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Texture Converter. -# Converts Minecraft resource packs to Minetest texture packs. -# See README.md. - -__author__ = "Wuzzy" -__license__ = "MIT License" -__status__ = "Development" - -import shutil, csv, os, tempfile, sys, getopt - -# Helper vars -home = os.environ["HOME"] -mineclone2_path = home + "/.minetest/games/mineclone2" -working_dir = os.getcwd() -appname = "Texture_Converter.py" - -### SETTINGS ### -output_dir = working_dir - -base_dir = None - -# If True, will only make console output but not convert anything. -dry_run = False - -# If True, textures will be put into a texture pack directory structure. -# If False, textures will be put into MineClone 2 directories. -make_texture_pack = True - -# If True, prints all copying actions -verbose = False - -PXSIZE = 16 - -syntax_help = appname+""" -i [-o ] [-d] [-v|-q] [-h] -Mandatory argument: --i - Directory of Minecraft resource pack to convert - -Optional arguments: --p - Specify the size (in pixels) of the original textures (default: 16) --o - Directory in which to put the resulting Minetest texture pack - (default: working directory) --d - Just pretend to convert textures and just print output, but do not actually - change any files. --v - Print out all copying actions --h - Show this help and exit""" -try: - opts, args = getopt.getopt(sys.argv[1:],"hi:o:p:dv") -except getopt.GetoptError: - print( -"""ERROR! The options you gave me make no sense! - -Here's the syntax reference:""") - print(syntax_help) - sys.exit(2) -for opt, arg in opts: - if opt == "-h": - print( -"""This is the official MineClone 2 Texture Converter. -This will convert textures from Minecraft resource packs to -a Minetest texture pack. - -Supported Minecraft version: 1.12 (Java Edition) - -Syntax:""") - print(syntax_help) - sys.exit() - elif opt == "-d": - dry_run = True - elif opt == "-v": - verbose = True - elif opt == "-i": - base_dir = arg - elif opt == "-o": - output_dir = arg - elif opt == "-p": - PXSIZE = int(arg) - -if base_dir == None: - print( -"""ERROR: You didn't tell me the path to the Minecraft resource pack. -Mind-reading has not been implemented yet. - -Try this: - """+appname+""" -i -p - -For the full help, use: - """+appname+""" -h""") - sys.exit(2); - -### END OF SETTINGS ### - -tex_dir = base_dir + "/assets/minecraft/textures" - -# Get texture pack name (from directory name) -bdir_split = base_dir.split("/") -output_dir_name = bdir_split[-1] -if len(output_dir_name) == 0: - if len(bdir_split) >= 2: - output_dir_name = base_dir.split("/")[-2] - else: - # Fallback - output_dir_name = "New_MineClone_2_Texture_Pack" - -# FUNCTION DEFINITIONS -def colorize(colormap, source, colormap_pixel, texture_size, destination): - os.system("convert "+colormap+" -crop 1x1+"+colormap_pixel+" -depth 8 -resize "+texture_size+"x"+texture_size+" "+tempfile1.name) - os.system("composite -compose Multiply "+tempfile1.name+" "+source+" "+destination) - -def colorize_alpha(colormap, source, colormap_pixel, texture_size, destination): - colorize(colormap, source, colormap_pixel, texture_size, tempfile2.name) - os.system("composite -compose Dst_In "+source+" "+tempfile2.name+" -alpha Set "+destination) - -def target_dir(directory): - if make_texture_pack: - return output_dir + "/" + output_dir_name - else: - return mineclone2_path + directory - -# Copy texture files -def convert_textures(): - failed_conversions = 0 - print("Texture conversion BEGINS NOW!") - with open("Conversion_Table.csv", newline="") as csvfile: - reader = csv.reader(csvfile, delimiter=",", quotechar='"') - first_row = True - for row in reader: - # Skip first row - if first_row: - first_row = False - continue - - src_dir = row[0] - src_filename = row[1] - dst_dir = row[2] - dst_filename = row[3] - if row[4] != "": - xs = int(row[4]) - ys = int(row[5]) - xl = int(row[6]) - yl = int(row[7]) - xt = int(row[8]) - yt = int(row[9]) - else: - xs = None - blacklisted = row[10] - - if blacklisted == "y": - # Skip blacklisted files - continue - - if make_texture_pack == False and dst_dir == "": - # If destination dir is empty, this texture is not supposed to be used in MCL2 - # (but maybe an external mod). It should only be used in texture packs. - # Otherwise, it must be ignored. - # Example: textures for mcl_supplemental - continue - - src_file = base_dir + src_dir + "/" + src_filename # source file - src_file_exists = os.path.isfile(src_file) - dst_file = target_dir(dst_dir) + "/" + dst_filename # destination file - - if src_file_exists == False: - print("WARNING: Source file does not exist: "+src_file) - failed_conversions = failed_conversions + 1 - continue - - if xs != None: - # Crop and copy images - if not dry_run: - os.system("convert "+src_file+" -crop "+xl+"x"+yl+"+"+xs+"+"+ys+" "+dst_file) - if verbose: - print(src_file + " → " + dst_file) - else: - # Copy image verbatim - if not dry_run: - shutil.copy2(src_file, dst_file) - if verbose: - print(src_file + " → " + dst_file) - - # Convert map background - map_background_file = tex_dir + "/map/map_background.png" - if os.path.isfile(map_background_file): - os.system("convert " + map_background_file + " -interpolate Integer -filter point -resize \"140x140\" " + target_dir("/mods/ITEMS/mcl_maps/textures") + "/mcl_maps_map_background.png") - - # Convert armor textures (requires ImageMagick) - armor_files = [ - [ tex_dir + "/models/armor/leather_layer_1.png", tex_dir + "/models/armor/leather_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_leather.png", "mcl_armor_chestplate_leather.png", "mcl_armor_leggings_leather.png", "mcl_armor_boots_leather.png" ], - [ tex_dir + "/models/armor/chainmail_layer_1.png", tex_dir + "/models/armor/chainmail_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_chain.png", "mcl_armor_chestplate_chain.png", "mcl_armor_leggings_chain.png", "mcl_armor_boots_chain.png" ], - [ tex_dir + "/models/armor/gold_layer_1.png", tex_dir + "/models/armor/gold_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_gold.png", "mcl_armor_chestplate_gold.png", "mcl_armor_leggings_gold.png", "mcl_armor_boots_gold.png" ], - [ tex_dir + "/models/armor/iron_layer_1.png", tex_dir + "/models/armor/iron_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_iron.png", "mcl_armor_chestplate_iron.png", "mcl_armor_leggings_iron.png", "mcl_armor_boots_iron.png" ], - [ tex_dir + "/models/armor/diamond_layer_1.png", tex_dir + "/models/armor/diamond_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_diamond.png", "mcl_armor_chestplate_diamond.png", "mcl_armor_leggings_diamond.png", "mcl_armor_boots_diamond.png" ] - ] - for a in armor_files: - APXSIZE = 16 # for some reason MineClone2 requires this - layer_1 = a[0] - layer_2 = a[1] - adir = a[2] - if os.path.isfile(layer_1): - helmet = adir + "/" + a[3] - chestplate = adir + "/" + a[4] - boots = adir + "/" + a[6] - os.system("convert -size "+str(APXSIZE * 4)+"x"+str(APXSIZE * 2)+" xc:none \\( "+layer_1+" -scale "+str(APXSIZE * 4)+"x"+str(APXSIZE * 2)+" -geometry +"+str(APXSIZE * 2)+"+0 -crop "+str(APXSIZE * 2)+"x"+str(APXSIZE)+"+0+0 \) -composite -channel A -fx \"(a > 0.0) ? 1.0 : 0.0\" "+helmet) - os.system("convert -size "+str(APXSIZE * 4)+"x"+str(APXSIZE * 2)+" xc:none \\( "+layer_1+" -scale "+str(APXSIZE * 4)+"x"+str(APXSIZE * 2)+" -geometry +"+str(APXSIZE)+"+"+str(APXSIZE)+" -crop "+str(APXSIZE * 2.5)+"x"+str(APXSIZE)+"+"+str(APXSIZE)+"+"+str(APXSIZE)+" \) -composite -channel A -fx \"(a > 0.0) ? 1.0 : 0.0\" "+chestplate) - os.system("convert -size "+str(APXSIZE * 4)+"x"+str(APXSIZE * 2)+" xc:none \\( "+layer_1+" -scale "+str(APXSIZE * 4)+"x"+str(APXSIZE * 2)+" -geometry +0+"+str(APXSIZE)+" -crop "+str(APXSIZE)+"x"+str(APXSIZE)+"+0+"+str(APXSIZE)+" \) -composite -channel A -fx \"(a > 0.0) ? 1.0 : 0.0\" "+boots) - if os.path.isfile(layer_2): - leggings = adir + "/" + a[5] - os.system("convert -size "+str(APXSIZE * 4)+"x"+str(APXSIZE * 2)+" xc:none \\( "+layer_2+" -scale "+str(APXSIZE * 4)+"x"+str(APXSIZE * 2)+" -geometry +0+"+str(APXSIZE)+" -crop "+str(APXSIZE * 2.5)+"x"+str(APXSIZE)+"+0+"+str(APXSIZE)+" \) -composite -channel A -fx \"(a > 0.0) ? 1.0 : 0.0\" "+leggings) - - # Convert chest textures (requires ImageMagick) - chest_files = [ - [ tex_dir + "/entity/chest/normal.png", target_dir("/mods/ITEMS/mcl_chests/textures"), "default_chest_top.png", "mcl_chests_chest_bottom.png", "default_chest_front.png", "mcl_chests_chest_left.png", "mcl_chests_chest_right.png", "mcl_chests_chest_back.png" ], - [ tex_dir + "/entity/chest/trapped.png", target_dir("/mods/ITEMS/mcl_chests/textures"), "mcl_chests_chest_trapped_top.png", "mcl_chests_chest_trapped_bottom.png", "mcl_chests_chest_trapped_front.png", "mcl_chests_chest_trapped_left.png", "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_back.png" ], - [ tex_dir + "/entity/chest/ender.png", target_dir("/mods/ITEMS/mcl_chests/textures"), "mcl_chests_ender_chest_top.png", "mcl_chests_ender_chest_bottom.png", "mcl_chests_ender_chest_front.png", "mcl_chests_ender_chest_left.png", "mcl_chests_ender_chest_right.png", "mcl_chests_ender_chest_back.png" ] - ] - - for c in chest_files: - chest_file = c[0] - if os.path.isfile(chest_file): - PPX = (PXSIZE/16) - CHPX = (PPX * 14) # Chest width - LIDPX = (PPX * 5) # Lid height - LIDLOW = (PPX * 10) # Lower lid section height - LOCKW = (PPX * 6) # Lock width - LOCKH = (PPX * 5) # Lock height - - cdir = c[1] - top = cdir + "/" + c[2] - bottom = cdir + "/" + c[3] - front = cdir + "/" + c[4] - left = cdir + "/" + c[5] - right = cdir + "/" + c[6] - back = cdir + "/" + c[7] - # Top - os.system("convert " + chest_file + " \ -\( -clone 0 -crop "+str(CHPX)+"x"+str(CHPX)+"+"+str(CHPX)+"+0 \) -geometry +0+0 -composite -extent "+str(CHPX)+"x"+str(CHPX)+" "+top) - # Bottom - os.system("convert " + chest_file + " \ -\( -clone 0 -crop "+str(CHPX)+"x"+str(CHPX)+"+"+str(CHPX*2)+"+"+str(CHPX+LIDPX)+" \) -geometry +0+0 -composite -extent "+str(CHPX)+"x"+str(CHPX)+" "+bottom) - # Front - os.system("convert " + chest_file + " \ -\( -clone 0 -crop "+str(CHPX)+"x"+str(LIDPX)+"+"+str(CHPX)+"+"+str(CHPX)+" \) -geometry +0+0 -composite \ -\( -clone 0 -crop "+str(CHPX)+"x"+str(LIDLOW)+"+"+str(CHPX)+"+"+str(CHPX*2+LIDPX)+" \) -geometry +0+"+str(LIDPX-PPX)+" -composite \ --extent "+str(CHPX)+"x"+str(CHPX)+" "+front) - # TODO: Add lock - - # Left, right back (use same texture, we're lazy - files = [ left, right, back ] - for f in files: - os.system("convert " + chest_file + " \ -\( -clone 0 -crop "+str(CHPX)+"x"+str(LIDPX)+"+"+str(0)+"+"+str(CHPX)+" \) -geometry +0+0 -composite \ -\( -clone 0 -crop "+str(CHPX)+"x"+str(LIDLOW)+"+"+str(0)+"+"+str(CHPX*2+LIDPX)+" \) -geometry +0+"+str(LIDPX-PPX)+" -composite \ --extent "+str(CHPX)+"x"+str(CHPX)+" "+f) - - # Double chests - - chest_files = [ - [ tex_dir + "/entity/chest/normal_double.png", target_dir("/mods/ITEMS/mcl_chests/textures"), "default_chest_front_big.png", "default_chest_top_big.png", "default_chest_side_big.png" ], - [ tex_dir + "/entity/chest/trapped_double.png", target_dir("/mods/ITEMS/mcl_chests/textures"), "mcl_chests_chest_trapped_front_big.png", "mcl_chests_chest_trapped_top_big.png", "mcl_chests_chest_trapped_side_big.png" ] - ] - for c in chest_files: - chest_file = c[0] - if os.path.isfile(chest_file): - PPX = (PXSIZE/16) - CHPX = (PPX * 14) # Chest width (short side) - CHPX2 = (PPX * 15) # Chest width (long side) - LIDPX = (PPX * 5) # Lid height - LIDLOW = (PPX * 10) # Lower lid section height - LOCKW = (PPX * 6) # Lock width - LOCKH = (PPX * 5) # Lock height - - cdir = c[1] - front = cdir + "/" + c[2] - top = cdir + "/" + c[3] - side = cdir + "/" + c[4] - # Top - os.system("convert " + chest_file + " \ -\( -clone 0 -crop "+str(CHPX2)+"x"+str(CHPX)+"+"+str(CHPX)+"+0 \) -geometry +0+0 -composite -extent "+str(CHPX2)+"x"+str(CHPX)+" "+top) - # Front - # TODO: Add lock - os.system("convert " + chest_file + " \ -\( -clone 0 -crop "+str(CHPX2)+"x"+str(LIDPX)+"+"+str(CHPX)+"+"+str(CHPX)+" \) -geometry +0+0 -composite \ -\( -clone 0 -crop "+str(CHPX2)+"x"+str(LIDLOW)+"+"+str(CHPX)+"+"+str(CHPX*2+LIDPX)+" \) -geometry +0+"+str(LIDPX-PPX)+" -composite \ --extent "+str(CHPX2)+"x"+str(CHPX)+" "+front) - # Side - os.system("convert " + chest_file + " \ -\( -clone 0 -crop "+str(CHPX)+"x"+str(LIDPX)+"+"+str(0)+"+"+str(CHPX)+" \) -geometry +0+0 -composite \ -\( -clone 0 -crop "+str(CHPX)+"x"+str(LIDLOW)+"+"+str(0)+"+"+str(CHPX*2+LIDPX)+" \) -geometry +0+"+str(LIDPX-PPX)+" -composite \ --extent "+str(CHPX)+"x"+str(CHPX)+" "+side) - - - # Generate railway crossings and t-junctions. Note: They may look strange. - # Note: these may be only a temporary solution, as crossings and t-junctions do not occour in MC. - # TODO: Curves - rails = [ - # (Straigt src, curved src, t-junction dest, crossing dest) - ("rail_normal.png", "rail_normal_turned.png", "default_rail_t_junction.png", "default_rail_crossing.png"), - ("rail_golden.png", "rail_normal_turned.png", "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"), - ("rail_golden_powered.png", "rail_normal_turned.png", "mcl_minecarts_rail_golden_t_junction_powered.png", "mcl_minecarts_rail_golden_crossing_powered.png"), - ("rail_detector.png", "rail_normal_turned.png", "mcl_minecarts_rail_detector_t_junction.png", "mcl_minecarts_rail_detector_crossing.png"), - ("rail_detector_powered.png", "rail_normal_turned.png", "mcl_minecarts_rail_detector_t_junction_powered.png", "mcl_minecarts_rail_detector_crossing_powered.png"), - ("rail_activator.png", "rail_normal_turned.png", "mcl_minecarts_rail_activator_t_junction.png", "mcl_minecarts_rail_activator_crossing.png"), - ("rail_activator_powered.png", "rail_normal_turned.png", "mcl_minecarts_rail_activator_d_t_junction.png", "mcl_minecarts_rail_activator_powered_crossing.png"), - ] - for r in rails: - os.system("composite -compose Dst_Over "+tex_dir+"/blocks/"+r[0]+" "+tex_dir+"/blocks/"+r[1]+" "+target_dir("/mods/ENTITIES/mcl_minecarts/textures")+"/"+r[2]) - os.system("convert "+tex_dir+"/blocks/"+r[0]+" -rotate 90 "+tempfile1.name) - os.system("composite -compose Dst_Over "+tempfile1.name+" "+tex_dir+"/blocks/"+r[0]+" "+target_dir("/mods/ENTITIES/mcl_minecarts/textures")+"/"+r[3]) - - # Convert banner overlays - overlays = [ - "base", - "border", - "bricks", - "circle", - "creeper", - "cross", - "curly_border", - "diagonal_left", - "diagonal_right", - "diagonal_up_left", - "diagonal_up_right", - "flower", - "gradient", - "gradient_up", - "half_horizontal_bottom", - "half_horizontal", - "half_vertical", - "half_vertical_right", - "rhombus", - "mojang", - "skull", - "small_stripes", - "straight_cross", - "stripe_bottom", - "stripe_center", - "stripe_downleft", - "stripe_downright", - "stripe_left", - "stripe_middle", - "stripe_right", - "stripe_top", - "square_bottom_left", - "square_bottom_right", - "square_top_left", - "square_top_right", - "triangle_bottom", - "triangles_bottom", - "triangle_top", - "triangles_top", - ] - for o in overlays: - orig = tex_dir + "/entity/banner/" + o + ".png" - if os.path.isfile(orig): - if o == "mojang": - o = "thing" - dest = target_dir("/mods/ITEMS/mcl_banners/textures")+"/"+"mcl_banners_"+o+".png" - os.system("convert "+orig+" -transparent-color white -background black -alpha remove -alpha copy -channel RGB -white-threshold 0 "+dest) - - # Convert grass - grass_file = tex_dir + "/blocks/grass_top.png" - if os.path.isfile(grass_file): - FOLIAG = tex_dir+"/colormap/foliage.png" - GRASS = tex_dir+"/colormap/grass.png" - - - # Leaves - colorize_alpha(FOLIAG, tex_dir+"/blocks/leaves_oak.png", "116+143", str(PXSIZE), target_dir("/mods/ITEMS/mcl_core/textures")+"/default_leaves.png") - colorize_alpha(FOLIAG, tex_dir+"/blocks/leaves_big_oak.png", "158+177", str(PXSIZE), target_dir("/mods/ITEMS/mcl_core/textures")+"/mcl_core_leaves_big_oak.png") - colorize_alpha(FOLIAG, tex_dir+"/blocks/leaves_acacia.png", "40+255", str(PXSIZE), target_dir("/mods/ITEMS/mcl_core/textures")+"/default_acacia_leaves.png") - colorize_alpha(FOLIAG, tex_dir+"/blocks/leaves_spruce.png", "226+230", str(PXSIZE), target_dir("/mods/ITEMS/mcl_core/textures")+"/mcl_core_leaves_spruce.png") - colorize_alpha(FOLIAG, tex_dir+"/blocks/leaves_birch.png", "141+186", str(PXSIZE), target_dir("/mods/ITEMS/mcl_core/textures")+"/mcl_core_leaves_birch.png") - colorize_alpha(FOLIAG, tex_dir+"/blocks/leaves_jungle.png", "16+39", str(PXSIZE), target_dir("/mods/ITEMS/mcl_core/textures")+"/default_jungleleaves.png") - - # Waterlily - colorize_alpha(FOLIAG, tex_dir+"/blocks/waterlily.png", "16+39", str(PXSIZE), target_dir("/mods/ITEMS/mcl_flowers/textures")+"/flowers_waterlily.png") - - # Vines - colorize_alpha(FOLIAG, tex_dir+"/blocks/vine.png", "16+39", str(PXSIZE), target_dir("/mods/ITEMS/mcl_core/textures")+"/mcl_core_vine.png") - - # Tall grass, fern (inventory images) - pcol = "50+173" # Plains grass color - colorize_alpha(GRASS, tex_dir+"/blocks/tallgrass.png", pcol, str(PXSIZE), target_dir("/mods/ITEMS/mcl_flowers/textures")+"/mcl_flowers_tallgrass_inv.png") - colorize_alpha(GRASS, tex_dir+"/blocks/fern.png", pcol, str(PXSIZE), target_dir("/mods/ITEMS/mcl_flowers/textures")+"/mcl_flowers_fern_inv.png") - colorize_alpha(GRASS, tex_dir+"/blocks/double_plant_fern_top.png", pcol, str(PXSIZE), target_dir("/mods/ITEMS/mcl_flowers/textures")+"/mcl_flowers_double_plant_fern_inv.png") - colorize_alpha(GRASS, tex_dir+"/blocks/double_plant_grass_top.png", pcol, str(PXSIZE), target_dir("/mods/ITEMS/mcl_flowers/textures")+"/mcl_flowers_double_plant_grass_inv.png") - - # Convert grass palette: https://minecraft.fandom.com/wiki/Tint - grass_colors = [ - # [Coords or #Color, AdditionalTint], # Index - Minecraft biome name (MineClone2 biome names) - ["50+173"], # 0 - Plains (flat, Plains, Plains_beach, Plains_ocean, End) - ["0+255"], # 1 - Savanna (Savanna, Savanna_beach, Savanna_ocean) - ["255+255"], # 2 - Ice Spikes (IcePlainsSpikes, IcePlainsSpikes_ocean) - ["255+255"], # 3 - Snowy Taiga (ColdTaiga, ColdTaiga_beach, ColdTaiga_beach_water, ColdTaiga_ocean) - ["178+193"], # 4 - Giant Tree Taiga (MegaTaiga, MegaTaiga_ocean) - ["178+193"], # 5 - Giant Tree Taiga (MegaSpruceTaiga, MegaSpruceTaiga_ocean) - ["203+239"], # 6 - Montains (ExtremeHills, ExtremeHills_beach, ExtremeHills_ocean) - ["203+239"], # 7 - Montains (ExtremeHillsM, ExtremeHillsM_ocean) - ["203+239"], # 8 - Montains (ExtremeHills+, ExtremeHills+_snowtop, ExtremeHills+_ocean) - ["50+173"], # 9 - Beach (StoneBeach, StoneBeach_ocean) - ["255+255"], # 10 - Snowy Tundra (IcePlains, IcePlains_ocean) - ["50+173"], # 11 - Sunflower Plains (SunflowerPlains, SunflowerPlains_ocean) - ["191+203"], # 12 - Taiga (Taiga, Taiga_beach, Taiga_ocean) - ["76+112"], # 13 - Forest (Forest, Forest_beach, Forest_ocean) - ["76+112"], # 14 - Flower Forest (FlowerForest, FlowerForest_beach, FlowerForest_ocean) - ["101+163"], # 15 - Birch Forest (BirchForest, BirchForest_ocean) - ["101+163"], # 16 - Birch Forest Hills (BirchForestM, BirchForestM_ocean) - ["0+255"], # 17 - Desert and Nether (Desert, Desert_ocean, Nether) - ["76+112", "#28340A"], # 18 - Dark Forest (RoofedForest, RoofedForest_ocean) - ["#90814d"], # 19 - Mesa (Mesa, Mesa_sandlevel, Mesa_ocean, ) - ["#90814d"], # 20 - Mesa (MesaBryce, MesaBryce_sandlevel, MesaBryce_ocean) - ["#90814d"], # 21 - Mesa (MesaPlateauF, MesaPlateauF_grasstop, MesaPlateauF_sandlevel, MesaPlateauF_ocean) - ["#90814d"], # 22 - Mesa (MesaPlateauFM, MesaPlateauFM_grasstop, MesaPlateauFM_sandlevel, MesaPlateauFM_ocean) - ["0+255"], # 23 - Shattered Savanna (or Savanna Plateau ?) (SavannaM, SavannaM_ocean) - ["12+36"], # 24 - Jungle (Jungle, Jungle_shore, Jungle_ocean) - ["12+36"], # 25 - Modified Jungle (JungleM, JungleM_shore, JungleM_ocean) - ["12+61"], # 26 - Jungle Edge (JungleEdge, JungleEdge_ocean) - ["12+61"], # 27 - Modified Jungle Edge (JungleEdgeM, JungleEdgeM_ocean) - ["#6A7039"], # 28 - Swamp (Swampland, Swampland_shore, Swampland_ocean) - ["25+25"], # 29 - Mushroom Fields and Mushroom Field Shore (MushroomIsland, MushroomIslandShore, MushroomIsland_ocean) - ] - - grass_palette_file = target_dir("/mods/ITEMS/mcl_core/textures") + "/mcl_core_palette_grass.png" - os.system("convert -size 16x16 canvas:transparent " + grass_palette_file) - - for i, color in enumerate(grass_colors): - if color[0][0] == "#": - os.system("convert -size 1x1 xc:\"" + color[0] + "\" " + tempfile1.name + ".png") - else: - os.system("convert " + GRASS + " -crop 1x1+" + color[0] + " " + tempfile1.name + ".png") - - if len(color) > 1: - os.system("convert " + tempfile1.name + ".png \\( -size 1x1 xc:\"" + color[1] + "\" \\) -compose blend -define compose:args=50,50 -composite " + tempfile1.name + ".png") - - os.system("convert " + grass_palette_file + " \\( " + tempfile1.name + ".png -geometry +" + str(i % 16) + "+" + str(int(i / 16)) + " \\) -composite " + grass_palette_file) - - # Metadata - if make_texture_pack: - # Create description file - description = "Texture pack for MineClone 2. Automatically converted from a Minecraft resource pack by the MineClone 2 Texture Converter. Size: "+str(PXSIZE)+"×"+str(PXSIZE) - description_file = open(target_dir("/") + "/description.txt", "w") - description_file.write(description) - description_file.close() - - # Create preview image (screenshot.png) - os.system("convert -size 300x200 canvas:transparent "+target_dir("/") + "/screenshot.png") - os.system("composite "+base_dir+"/pack.png "+target_dir("/") + "/screenshot.png -gravity center "+target_dir("/") + "/screenshot.png") - - print("Textures conversion COMPLETE!") - if failed_conversions > 0: - print("WARNING: Number of missing files in original resource pack: "+str(failed_conversions)) - print("NOTE: Please keep in mind this script does not reliably convert all the textures yet.") - if make_texture_pack: - print("You can now retrieve the texture pack in "+output_dir+"/"+output_dir_name+"/") - -# ENTRY POINT -if make_texture_pack and not os.path.isdir(output_dir+"/"+output_dir_name): - os.mkdir(output_dir+"/"+output_dir_name) - -tempfile1 = tempfile.NamedTemporaryFile() -tempfile2 = tempfile.NamedTemporaryFile() - -convert_textures() - -tempfile1.close() -tempfile2.close()