MineClone2/tools/Texture_Converter.py

105 lines
3.8 KiB
Python
Raw Normal View History

2017-07-19 22:44:43 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
2018-06-05 01:44:57 +02:00
# Texture Converter.
# Converts Minecraft resource packs to Minetest texture packs.
# See README.md.
2017-07-19 22:44:43 +02:00
__author__ = "Wuzzy"
2017-11-18 01:25:55 +01:00
__license__ = "MIT License"
2017-07-19 22:44:43 +02:00
__status__ = "Development"
import shutil, csv, os, tempfile, sys, argparse, glob
from PIL import Image
from collections import Counter
2017-11-18 02:33:43 +01:00
2024-01-10 05:08:30 +01:00
from libtextureconverter.utils import detect_pixel_size, target_dir, colorize, colorize_alpha, handle_default_minecraft_texture, find_all_minecraft_resourcepacks
from libtextureconverter.convert import convert_textures
2024-01-10 04:31:45 +01:00
from libtextureconverter.config import SUPPORTED_MINECRAFT_VERSION, working_dir, mineclone2_path, appname, home
# Argument parsing
description_text = f"""This is the official MineClone 2 Texture Converter.
This will convert textures from Minecraft resource packs to
a Minetest texture pack.
Supported Minecraft version: {SUPPORTED_MINECRAFT_VERSION} (Java Edition)
"""
parser = argparse.ArgumentParser(description=description_text)
2024-01-10 04:31:45 +01:00
parser.add_argument("-i", "--input", help="Directory of Minecraft resource pack to convert")
parser.add_argument("-o", "--output", default=working_dir, help="Directory in which to put the resulting Minetest texture pack")
parser.add_argument("-p", "--pixelsize", type=int, help="Size (in pixels) of the original textures")
parser.add_argument("-d", "--dry_run", action="store_true", help="Pretend to convert textures without changing any files")
parser.add_argument("-v", "--verbose", action="store_true", help="Print out all copying actions")
2024-01-10 04:31:45 +01:00
parser.add_argument("-def", "--default", action="store_true", help="Use the default Minecraft texture pack")
2024-01-10 05:08:30 +01:00
parser.add_argument("-a", "--all", action="store_true", help="Convert all known Minecraft texturepacks")
args = parser.parse_args()
### SETTINGS ###
base_dir = args.input
output_dir = args.output
PXSIZE = args.pixelsize
# If True, will only make console output but not convert anything.
dry_run = args.dry_run
# If True, prints all copying actions
verbose = args.verbose
# 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 # Adjust as needed
2017-11-18 02:33:43 +01:00
2024-01-10 04:31:45 +01:00
if args.default:
base_dir = handle_default_minecraft_texture(home, output_dir)
2024-01-10 05:08:30 +01:00
if base_dir == None and not args.all:
2017-11-18 02:33:43 +01:00
print(
2018-06-05 02:03:07 +02:00
"""ERROR: You didn't tell me the path to the Minecraft resource pack.
2017-11-18 02:33:43 +01:00
Mind-reading has not been implemented yet.
Try this:
2024-01-10 04:31:45 +01:00
"""+appname+""" -i <path to resource pack>
2017-11-18 02:33:43 +01:00
For the full help, use:
2017-11-18 03:42:44 +01:00
"""+appname+""" -h""")
2017-11-18 02:33:43 +01:00
sys.exit(2);
2017-07-19 22:44:43 +02:00
2017-11-18 02:33:43 +01:00
### END OF SETTINGS ###
2017-07-19 22:44:43 +02:00
2024-01-10 04:31:45 +01:00
2024-01-10 05:08:30 +01:00
resource_packs = []
2017-07-19 22:44:43 +02:00
2024-01-10 05:08:30 +01:00
if args.all:
for resource_path in find_all_minecraft_resourcepacks():
resource_packs.append(resource_path)
2024-01-10 05:08:30 +01:00
if make_texture_pack and args.input:
resource_packs.append(args.input)
2024-01-10 05:08:30 +01:00
for base_dir in resource_packs:
tex_dir = base_dir + "/assets/minecraft/textures"
2024-01-10 05:08:30 +01:00
# 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"
2024-01-10 05:08:30 +01:00
# ENTRY POINT
if make_texture_pack and not os.path.isdir(output_dir+"/"+output_dir_name):
os.mkdir(output_dir+"/"+output_dir_name)
# If, set to convert all resourcepacks, then autodetect pixel size
if args.all:
PXSIZE = None
if PXSIZE is None:
PXSIZE = detect_pixel_size(base_dir)
tempfile1 = tempfile.NamedTemporaryFile()
tempfile2 = tempfile.NamedTemporaryFile()
convert_textures(make_texture_pack, dry_run, verbose, base_dir, tex_dir, tempfile1, tempfile2, output_dir, output_dir_name, mineclone2_path, PXSIZE)
tempfile1.close()
tempfile2.close()