Туториал Windows Автоматический установщик Modpack

Nicolayka

Владелец
Команда форума
Регистрация
4 Апр 2025
Сообщения
24
Реакции
0
Баллы
1
Город
Санкт-Петербург
Веб-сайт
paxgame.ru
Discord
nicolayka
Простой генератор файлов .exe для автоматической установки модпака на клиент Minecraft.

Инструкция:
  1. Создайте папку и назовите ее именем, которое вы хотите видеть для вашего .exe-файла.
  2. Установите python и pyinstall.
  3. Создайте папку с именем «files_for_.minecraft_folder», файл с именем «main.py» и еще один с именем «make.bat».
  4. В файл main.py вставьте код:
    Python:
    import os
    import shutil
    import sys
    import tkinter as tk
    from tkinter import filedialog, messagebox
    import ctypes
     
    def is_admin():
        try:
            return ctypes.windll.shell32.IsUserAnAdmin()
        except:
            return False
     
    def run_as_admin():
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
     
    def get_minecraft_folder(default_path):
        root = tk.Tk()
        root.withdraw()
        
        if messagebox.askyesno("Folder verification", f"Is this .minecraft folder correct for mods installation?\n\n{default_path}"):
            return default_path
        
        folder_path = filedialog.askdirectory(initialdir=default_path, title="Select .minecraft folder")
        return folder_path if folder_path else default_path
     
    def install_files(minecraft_folder):
        if messagebox.askyesno("Confirmation", "Do you want to proceed with file installation?\n\nThis will delete the files in your mods folder to add new ones"):
            source_folder = resource_path('files_for_.minecraft_folder')
            
            for item in os.listdir(source_folder):
                s = os.path.join(source_folder, item)
                d = os.path.join(minecraft_folder, item)
                if os.path.isdir(s):
                    shutil.copytree(s, d, dirs_exist_ok=True)
                else:
                    shutil.copy2(s, d)
     
            activate_resource_packs(minecraft_folder)
            
            messagebox.showinfo("Success", "Files were installed successfully!\n\nYou can delete this file and launch Minecraft in the correct version.")
        else:
            messagebox.showinfo("Cancelled", "Installation was cancelled.")
     
    def activate_resource_packs(minecraft_folder):
        resourcepacks_folder = resource_path('files_for_.minecraft_folder/resourcepacks')
        resource_packs = sorted(os.listdir(resourcepacks_folder))
        cleaned_resource_packs = []
        for pack in resource_packs:
            cleaned_name = pack.replace('§', '_').replace(' ', '_')
            cleaned_resource_packs.append(cleaned_name)
        formatted_resource_packs = ','.join(f'"{pack}"' for pack in cleaned_resource_packs)
        options_file_path = os.path.join(minecraft_folder, 'options.txt')
        with open(options_file_path, 'r') as file:
            lines = file.readlines()
        for i in range(len(lines)):
            if lines[i].startswith('resourcePacks:'):
                lines[i] = f'resourcePacks:[{formatted_resource_packs}]\n'
                break
        with open(options_file_path, 'w') as file:
            file.writelines(lines)
     
    def resource_path(relative_path):
        if hasattr(sys, '_MEIPASS'):
            return os.path.join(sys._MEIPASS, relative_path)
        return os.path.join(os.path.abspath("."), relative_path)
     
    if __name__ == '__main__':
        if not is_admin():
            run_as_admin()
        else:
            default_path = os.path.expandvars(r'%APPDATA%\.minecraft')
            minecraft_folder = get_minecraft_folder(default_path)
            install_files(minecraft_folder)
  5. вставьте в make.bat код:
    Код:
    @echo off 
    :: Rename files replacing spaces with underscores
    for %%F in (files_for_.minecraft_folder\resourcepacks\*) do (
        set "filename=%%F"
        set "newname=!filename: =_!"
        ren "%%F" "!newname!"
    )
     
    :: Replace non-alphanumeric characters with underscores
    for %%F in (files_for_.minecraft_folder\resourcepacks\*) do (
        set "filename=%%~nxF"
        set "newname=!filename!"
        set "newname=!newname:~=_!"
        set "newname=!newname:@=_!"
        set "newname=!newname:#=_!"
        set "newname=!newname:$=_!"
        set "newname=!newname:%%=_!"
        set "newname=!newname:^=_!"
        set "newname=!newname:&=_!"
        set "newname=!newname:(=_!"
        set "newname=!newname:)=_!"
        set "newname=!newname:-=_!"
        ren "%%F" "!newname!"
    )
     
    :: Run PyInstaller
    pyinstaller --onefile --add-data "files_for_.minecraft_folder;files_for_.minecraft_folder" --icon=icon.ico --uac-admin main.py
     
    :: Move and clean up files
    move dist\main.exe .\
    rmdir /s /q build
    rmdir /s /q dist
    del main.spec
     
    :: Rename the executable
    for %%I in (.) do set "current_dir=%%~nxI"
    if exist "%current_dir%.exe" del "%current_dir%.exe"
    ren main.exe "%current_dir%.exe"
  6. Скопируйте нужный вам контент из папки .minecraft (например, папку mods, папку resourcepacks или options.txt, ...) в папку "files_for_.minecraft_folder"
  7. Выберите изображение значка, которое вы хотите использовать для значка вашего .exe-файла, и переименуйте его в icon.ico
  8. Поделитесь своим .exe-файлом с друзьями, чтобы предоставить им супер простой в установке modpack
    :)

Игрок, который запускает exe-файл, будет запрошен в своем каталоге .minecraft, если он не является каталогом по умолчанию, и modpack будет установлен.

Кроме того, если моды присутствовали до установки, они будут удалены.
 
Главная Регистрация
Назад
Сверху