Skip to main content

Export MMC modpack to other modpack formats

Project description

MultiMC advanced exporter

PyPI pyversions PyPI version PyPI downloads GitHub license

Since MultiMC export features are very limited, I created a script that solves this problem, with this script you can export MultiMC pack to any popular format (e.g. curseforge, modrinth, packwiz). MultiMC forks which didn't changed export format much also supported. PrismLauncher apparently already have builtin Modrinth and CurseForge export feature starting with versions 7.0 and 8.0 accordingly

⚠️ mmc-export development is currently in the maintenance-only mode. This is to show that any abnormal lack of activity isn't going to mean it is no longer maintained. mmc-export considered feature-complete, and only will be updated when bugs arrive.

Features

  • Support conversion to:
    • CurseForge
    • Modrinth
    • packwiz
  • Detects downloadable resourcepacks and shaders
  • Supports github parsing¹
  • Loose modrinth search
  • User friendly toml config
  • Multiple output formats at once

GitHub rate limits

GitHub has limited requests per hour (up to 60), this means that if you have more than 60 mods, the rest will be excluded from github search. If you authenticate with GitHub using mmc-export gh-login, the limit will be removed and requests will be faster. You can always log out with mmc-export gh-logout.

If you don't want to use github search by some reason, you can specify --exclude-providers GitHub as argument.

How to Install / Update

Since pypi doesn't allow us to use direct dependencies, we have to install it separately

pip install git+https://github.com/tanaydin/gql-query-builder.git@patch-2
pip install -U mmc-export

How to Use

mmc-export -i modpack.zip -c config.toml -f Modrinth packwiz -o converted_modpacks

It's recommended to fill config at least with basic info like name and version, some launchers can fail import if these values are empty.

Sub-commands

gh-login - to authrize GitHub
gh-logout - to get info how to deauthorize GitHub

purge-cache - to purge cache. Available arguments:

--web: to delete requests cache and downloaded mods
--files: to delete hashes cache
--all: equivalent to --web --files, deletes all cache (default)

Syntax

mmc-export [sub-command] [-h] [-c CONFIG] -i INPUT -f FORMAT [-o OUTPUT] [-v VERSION] [--modrinth-search SEARCH_TYPE] [--exclude-providers PROVIDERS]

Explanation

-h --help: prints help
-i --input: path to modpack, must be zip file exported from MultiMC.
-c --config: path to config, used to fill the gaps like description or lost mods.
-f --format: output formats, must be separated by spaces.
-o --output: directory where converted zip files will be stored.
-v --version: specify modpack version, will be overriden by config's value if exists
--modrinth-search: modrinth search accuracy
--exclude-providers: providers you wish to exclude from search
--provider-priority: providers priority used for packwiz
--skip-cache: don't use web cache in this run
--scheme: output filename formatting scheme, more info in #scheme-formatting

All paths can be relative to current working directory or absolute.

--format options (case-sensitive):

  • CurseForge
  • Modrinth
  • packwiz
  • Intermediate (only for debugging, may contain sensitive data like username)

--exclude-providers options (case-sensitive):

  • CurseForge
  • Modrinth
  • GitHub

--provider-priority options (case-sensitive):

  • CurseForge
  • Modrinth
  • Other or GitHub

--modrinth-search options:

  • exact - by hash (default)
  • accurate - by hash or slug
  • loose - by hash, slug or long name

The example for the optional --config file can be found here.

For example, if the script says

No config entry found for resource: ModName

Then you should add one of the following entries to the end of the config:

Specify source URL

[[Resource]]
name = "ModName"
filename = "the_name_of_the.jar" 
url = "https://cdn.modrinth.com/data/abcdefg/versions/1.0.0/the_name_of_the.jar"

Hide the warning

[[Resource]]
name = "ModName"
filename = "the_name_of_the.jar" 
action = "ignore"

Explicitly move to overrides

[[Resource]]
name = "ModName"
filename = "the_name_of_the.jar" 
action = "override"

Delete the file altogether

[[Resource]]
name = "ModName"
filename = "the_name_of_the.jar" 
action = "remove"

Make the mod optional

Append optional = true to any of above

Delete any file

This can be defined to delete any file that isn't downloadable from CurseForge/Modrinth, e.g. mod config or metadata file.

[[File]]
name = "Useless file.txt"
action = "remove"

Scheme Formatting

Must be used as --scheme "{keyword}_Literally any text" without file extension, follows python's format string syntax

Available keywords:

  • abbr - provider abbreviation, usually 2 capitals, e.g. MR, CF
  • format - full format name, e.g. CurseForge, Packwiz
  • name same as pack.name - modpack name
  • version same as pack.version - modpack version
  • pack - pointer to Intermediate structure

Default scheme is as simple as {abbr}_{name}

Caution: if you don't use any format specifc keywords, output files will overwrite the same file several times, can be ignored if you output to only one format. Also, be aware of your filesystem limitations, unsupported characters may lead to an error, or inaccesible file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mmc_export-2.8.8.tar.gz (18.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mmc_export-2.8.8-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file mmc_export-2.8.8.tar.gz.

File metadata

  • Download URL: mmc_export-2.8.8.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.13.7 Linux/6.16.7-arch1-1

File hashes

Hashes for mmc_export-2.8.8.tar.gz
Algorithm Hash digest
SHA256 c75ce53b89e076b1b56344f167aca07a05947e28ff79dea5f5649856d7829556
MD5 0e42e26c98a921063af6b548f3745c34
BLAKE2b-256 7810cbc9a9c58597bac0381bae7b2a9df05c06194aa4756d40a3fbd07b11aa7a

See more details on using hashes here.

File details

Details for the file mmc_export-2.8.8-py3-none-any.whl.

File metadata

  • Download URL: mmc_export-2.8.8-py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.13.7 Linux/6.16.7-arch1-1

File hashes

Hashes for mmc_export-2.8.8-py3-none-any.whl
Algorithm Hash digest
SHA256 322da1ac4cd7eb7529c5e6fa63d1f6913e7cc21f6786e646586e3c2a7e1df169
MD5 8071911afa324871aede5fc42b83871e
BLAKE2b-256 8fe40decb99b5bbd6f6e2ef8bda2cfe48aa38fdc50ab4d19d14b3b988c8a564f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page