logo_pack.mcpack
| Mode | Decision Logic | Output Location | |------|----------------|----------------| | | Always valid. No JSON mapping needed; just replace textures/painting/kz.png | Overwrites painting kz (the 1x2 "Aztec" painting slot). | | Block Mode | Replace a common block (e.g., dirt.png ). User selects from a dropdown: dirt, stone, brick, glass. | textures/blocks/dirt.png | | Item Mode | Replace an item icon (e.g., compass_item.png ). | textures/items/compass_item.png | png to mcpack converter
If resolution is not a power of two, the converter resizes using nearest-neighbor (pixel art) or Lanczos (photorealistic) interpolation. 3. Output Format: .mcpack Structure An .mcpack file is a .zip archive containing a specific folder tree. The converter generates: logo_pack
png_to_mcpack/ ├── converter.py # Main orchestration ├── manifest_builder.py ├── texture_processor.py ├── packager.py # Zips and renames to .mcpack └── cli.py def convert_png_to_mcpack(input_png, target_block="painting", output_name="output.mcpack"): # 1. Validate PNG img = Image.open(input_png) if not is_power_of_two(img.width) or not is_power_of_two(img.height): img = img.resize(next_power_of_two(img.width), next_power_of_two(img.height)) # 2. Create temp directory temp_dir = create_temp_dir("mcpack_build") textures_dir = os.path.join(temp_dir, "textures") if target_block == "painting": target_dir = os.path.join(textures_dir, "painting") os.makedirs(target_dir) img.save(os.path.join(target_dir, "kz.png")) # replace Aztec painting else: target_dir = os.path.join(textures_dir, "blocks") os.makedirs(target_dir) img.save(os.path.join(target_dir, f"target_block.png")) User selects from a dropdown: dirt, stone, brick, glass
# 5. Zip to .mcpack shutil.make_archive(output_name.replace(".mcpack", ""), 'zip', temp_dir) os.rename(output_name.replace(".mcpack", "") + ".zip", output_name) Input: logo.png (512x512, company logo with transparency)
custom_pack.mcpack └── custom_pack/ ├── manifest.json ├── pack_icon.png └── textures/ └── blocks/ └── custom_texture.png The converter dynamically writes this file. Example:
converter.py logo.png --mode item --target apple