I'll help you create content for an — a utility that converts Minecraft Bedrock Edition addons/behavior packs ( .mcpack files) into other formats or extracts/repacks them.
python mcpack_converter.py my_pack_folder/ --pack mcpack converter
# Extract a pack python mcpack_converter.py my_skin.mcpack --extract python mcpack_converter.py my_skin_extracted/ --pack Just rename to zip python mcpack_converter.py addon.mcpack --tozip Bulk extract all .mcpack in Downloads folder python mcpack_converter.py ~/Downloads --extract-all 6. Bonus: GUI version (Tkinter) Save as mcpack_gui.py : I'll help you create content for an —
import tkinter as tk from tkinter import filedialog, messagebox, scrolledtext import subprocess import sys import os class MCPackConverterGUI: def (self, root): self.root = root root.title("MCPack Converter") root.geometry("600x400") help="Pack folder to .mcpack") parser.add_argument("--tozip"
for mcpack in mcpack_files: print(f"\n📦 Processing: {mcpack.name}") extract_mcpack(mcpack, directory / mcpack.stem) def main(): parser = argparse.ArgumentParser(description="MCPack Converter for Minecraft Bedrock") parser.add_argument("path", help="Path to .mcpack file or folder") parser.add_argument("--extract", "-e", action="store_true", help="Extract .mcpack to folder") parser.add_argument("--pack", "-p", action="store_true", help="Pack folder to .mcpack") parser.add_argument("--tozip", "-z", action="store_true", help="Convert .mcpack to .zip (rename only)") parser.add_argument("--tomcpack", "-m", action="store_true", help="Convert .zip to .mcpack (rename only)") parser.add_argument("--extract-all", "-ea", action="store_true", help="Extract all .mcpack files in directory")
output_dir = Path(output_dir) output_dir.mkdir(exist_ok=True)
tk.Label(root, text="MCPack Converter for Minecraft Bedrock", font=("Arial", 14)).pack(pady=10) # Input frame = tk.Frame(root) frame.pack(pady=5) tk.Label(frame, text="File/Folder:").pack(side=tk.LEFT) self.path_var = tk.StringVar() tk.Entry(frame, textvariable=self.path_var, width=50).pack(side=tk.LEFT, padx=5) tk.Button(frame, text="Browse", command=self.browse).pack(side=tk.LEFT) # Buttons btn_frame = tk.Frame(root) btn_frame.pack(pady=10) tk.Button(btn_frame, text="Extract .mcpack", command=lambda: self.run("--extract")).pack(side=tk.LEFT, padx=5) tk.Button(btn_frame, text="Pack to .mcpack", command=lambda: self.run("--pack")).pack(side=tk.LEFT, padx=5) tk.Button(btn_frame, text="→ .zip", command=lambda: self.run("--tozip")).pack(side=tk.LEFT, padx=5) tk.Button(btn_frame, text="← .mcpack", command=lambda: self.run("--tomcpack")).pack(side=tk.LEFT, padx=5) tk.Button(btn_frame, text="Extract All", command=lambda: self.run("--extract-all")).pack(side=tk.LEFT, padx=5) # Output log self.log = scrolledtext.ScrolledText(root, height=15) self.log.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)