{"id":16540590,"url":"https://github.com/itzg/mc-image-helper","last_synced_at":"2026-05-11T03:00:58.562Z","repository":{"id":39627191,"uuid":"404894256","full_name":"itzg/mc-image-helper","owner":"itzg","description":"This tool does the complicated bits for the itzg/minecraft-server image","archived":false,"fork":false,"pushed_at":"2026-05-06T16:22:46.000Z","size":2794,"stargazers_count":88,"open_issues_count":68,"forks_count":56,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-06T18:31:25.483Z","etag":null,"topics":["cli","docker","minecraft-server"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/itzg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://www.buymeacoffee.com/itzg","https://paypal.me/itzg"]}},"created_at":"2021-09-09T23:09:45.000Z","updated_at":"2026-05-06T16:22:49.000Z","dependencies_parsed_at":"2023-11-17T16:57:21.221Z","dependency_job_id":"a1dc6ec9-8426-4345-9df7-9083b121fe50","html_url":"https://github.com/itzg/mc-image-helper","commit_stats":{"total_commits":565,"total_committers":16,"mean_commits":35.3125,"dds":"0.22654867256637168","last_synced_commit":"38c1d72e7f3898f4df5cff2d1cbc31407ce7ef07"},"previous_names":[],"tags_count":363,"template":false,"template_full_name":null,"purl":"pkg:github/itzg/mc-image-helper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fmc-image-helper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fmc-image-helper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fmc-image-helper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fmc-image-helper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itzg","download_url":"https://codeload.github.com/itzg/mc-image-helper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzg%2Fmc-image-helper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32879551,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-10T13:40:02.631Z","status":"online","status_checked_at":"2026-05-11T02:00:05.975Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","docker","minecraft-server"],"created_at":"2024-10-11T18:52:51.104Z","updated_at":"2026-05-11T03:00:58.550Z","avatar_url":"https://github.com/itzg.png","language":"Java","funding_links":["https://www.buymeacoffee.com/itzg","https://paypal.me/itzg"],"categories":[],"sub_categories":[],"readme":"[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/itzg/mc-image-helper?sort=semver)](https://github.com/itzg/mc-image-helper/releases/latest)\n[![test](https://github.com/itzg/mc-image-helper/actions/workflows/test.yml/badge.svg)](https://github.com/itzg/mc-image-helper/actions/workflows/test.yml)\n![LOC](https://img.shields.io/endpoint?url=https%3A%2F%2Fshields-codetab-code-loc-bridge.vercel.app%2Fapi%2Fcodeloc%3Fgithub%3Ditzg%2Fmc-image-helper%26language%3Djava)\n\nThis tool does the complicated bits for the [itzg/minecraft-server](https://github.com/itzg/docker-minecraft-server) and [itzg/docker-mc-proxy](https://github.com/itzg/docker-mc-proxy) Docker images.\n\n## Usage\n\n\u003e **NOTE** The following documentation may not always be up-to-date. Please be sure to use `-h` or `--help` after any subcommand to view the current usage.\n\n```\nUsage: mc-image-helper [-hsV] [--debug | --logging=\u003cloggingLevel\u003e] [COMMAND]\n      --debug     Enable debug output. Can also set environment variables\n                    DEBUG_HELPER or DEBUG\n  -h, --help      Show this usage and exit\n      --logging=\u003cloggingLevel\u003e\n                  Set logging to specific level.\n                  Valid values:\n  -s, --silent    Don't output logs even if there's an error\n  -V, --version\nCommands:\n  asciify                         Converts UTF-8 on stdin to ASCII by escaping\n                                    Unicode characters\n  assert                          Provides assertion operators for verifying\n                                    container setup\n  compare-versions                Used for shell scripting, exits with success\n                                    (0) when comparison is satisfied or 1 when\n                                    not\n  curseforge-files                Download and manage individual mod/plugin\n                                    files from CurseForge\n  find                            Specialized replacement for GNU's find\n  get                             Download a file\n  github\n  hash                            Outputs an MD5 hash of the standard input\n  ini-path                        Extracts a field from an INI file\n  install-curseforge              Downloads, installs, and upgrades CurseForge\n                                    modpacks\n  install-fabric-loader           Provides a few ways to obtain a Fabric loader\n                                    with simple cleanup of previous loader\n                                    instances\n  install-forge                   Downloads and installs a requested version of\n                                    Forge\n  install-modrinth-modpack        Supports installation of Modrinth modpacks\n                                    along with the associated mod loader\n  install-neoforge                Downloads and installs a requested version of\n                                    NeoForge\n  install-paper                   Installs selected PaperMC\n  install-purpur                  Downloads latest or selected version of Purpur\n  install-quilt                   Installs Quilt mod loader\n  interpolate                     Interpolates existing files in one or more\n                                    directories\n  java-release                    Outputs the Java release number, such as 8,\n                                    11, 17\n  manage-users\n  maven-download                  Downloads a maven artifact from a Maven\n                                    repository\n  modrinth                        Automates downloading of modrinth resources\n  mcopy                           Multi-source file copy operation with with\n                                    managed cleanup. Supports auto-detected\n                                    sourcing from file list, directories, and\n                                    URLs\n  network-interfaces              Provides simple operations to list network\n                                    interface names and check existence\n  patch                           Patches one or more existing files using JSON\n                                    path based operations\n                                  Supports the file formats:\n                                  - JSON\n                                  - JSON5\n                                  - Yaml\n                                  - TOML, but processed output is not pretty\n  resolve-minecraft-version       Resolves and validate latest, snapshot, and\n                                    specific versions\n  set-properties                  Maps environment variables to a properties\n                                    file\n  show-all-subcommand-usage       Renders all of the subcommand usage as\n                                    markdown sections for README\n  sync                            Synchronizes the contents of one directory to\n                                    another.\n  sync-and-interpolate            Synchronizes the contents of one directory to\n                                    another with conditional variable\n                                    interpolation.\n  test-logging-levels\n  toml-path                       Extracts a path from a TOML file using\n                                    json-path syntax\n  vanillatweaks                   Downloads Vanilla Tweaks resource packs, data\n                                    packs, or crafting tweaks given a share\n                                    code or pack file\n  version-from-modrinth-projects  Finds a compatible Minecraft version across\n                                    given Modrinth projects\n  yaml-path                       Extracts a path from a YAML file using\n                                    json-path syntax\n```\n\nFor [patch](#patch) command [see below](#patch-schemas) for a description of [PatchSet](#patchset) and [PatchDefinition](#patchdefinition) JSON schemas.\n\nFor [install-curseforge](#install-curseforge) and [install-modrinth-modpack](#install-modrinth-modpack) commands, refer to [the exclude/include file schema](#excludeinclude-file-schema).\n\n\u003c!-- START of documentation generated using `mc-image-helper show-all-subcommand-usage` --\u003e\n\n### asciify\n\n```\nUsage: mc-image-helper asciify\nConverts UTF-8 on stdin to ASCII by escaping Unicode characters\n```\n\n### assert\n\n```\nUsage: mc-image-helper assert [COMMAND]\nProvides assertion operators for verifying container setup\nCommands:\n  fileExists\n  fileNotExists\n  jsonPathEquals\n  propertyEquals\n```\n\n### compare-versions\n\n```\nUsage: mc-image-helper compare-versions \u003cleftVersion\u003e \u003ccomparison\u003e\n                                        \u003crightVersion\u003e\nUsed for shell scripting, exits with success(0) when comparison is satisfied or\n1 when not\n      \u003cleftVersion\u003e\n      \u003ccomparison\u003e\n      \u003crightVersion\u003e\n```\n\n### curseforge-files\n\n```\nUsage: mc-image-helper curseforge-files [-h] [--disable-api-caching]\n                                        [--api-base-url=\u003capiBaseUrl\u003e]\n                                        [--api-key=\u003capiKey\u003e]\n                                        [--default-category=\u003cslugCategory\u003e]\n                                        [--game-version=\u003cgameVersion\u003e]\n                                        [--mod-loader=\u003cmodLoaderType\u003e] [-o=DIR]\n                                        [[--api-cache-ttl=OPERATION=DURATION]...\n                                         [--api-cache-default-ttl=DURATION]]\n                                        [[--connection-pool-pending-acquire-time\n                                        out=DURATION]\n                                        [--http-response-timeout=DURATION]\n                                        [--tls-handshake-timeout=DURATION]\n                                        [--use-http2] [--wiretap]\n                                        [--connection-pool-max-idle-timeout=DURA\n                                        TION]] [REF[,|\u003cnl\u003eREF...]...]\nDownload and manage individual mod/plugin files from CurseForge\n      [REF[,|\u003cnl\u003eREF...]...]\n                           Can be \u003cproject ID\u003e|\u003cslug\u003e':'\u003cfile ID\u003e, \u003cproject\n                             ID\u003e|\u003cslug\u003e'@'\u003cfilename matcher\u003e, \u003cproject\n                             ID\u003e|\u003cslug\u003e, project page URL, file page URL,\n                             '@'\u003cfilename with ref per line\u003e%nIf not specified,\n                             any previous mod/plugin files are removed.%\n                             Embedded comments are allowed\n      --api-base-url=\u003capiBaseUrl\u003e\n                           Allows for overriding the CurseForge Eternal API used\n                           Can also be passed via CF_API_BASE_URL\n      --api-cache-default-ttl=DURATION\n                           Set default/fallback TTL in ISO-8601 duration format.\n                           Default: P2D\n      --api-cache-ttl=OPERATION=DURATION\n                           Set individual operation TTLs\n      --api-key=\u003capiKey\u003e   An API key allocated from the Eternal developer\n                             console at https://console.curseforge.com/\n                           Can also be passed via CF_API_KEY\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --default-category=\u003cslugCategory\u003e\n                           When providing slugs, a category is required to\n                             qualify those\n      --disable-api-caching\n\n      --game-version=\u003cgameVersion\u003e\n                           The Minecraft version\n                           Can also be passed via VERSION\n  -h, --help\n      --http-response-timeout=DURATION\n                           The response timeout to apply to HTTP operations.\n                             Parsed from ISO-8601 format. Default: PT30S\n      --mod-loader=\u003cmodLoaderType\u003e\n                           One of Any, Forge, Cauldron, LiteLoader, Fabric,\n                             Quilt, NeoForge\n  -o, --output-directory=DIR\n\n      --tls-handshake-timeout=DURATION\n                           Default: PT30S\n      --use-http2          Whether to use HTTP/2. Default: false\n      --wiretap            Whether to enable Reactor Netty wiretap logging.\n                             Default: false\n```\n\n### find\n\n```\nUsage: mc-image-helper find [-hq] [--delete] [--delete-empty-directories]\n                            [--fail-no-matches] [--only-shallowest]\n                            [--output-count-only] [--stop-on-first]\n                            [--format=\u003cformat\u003e] [--max-depth=N] [--min-depth=N]\n                            [--exclude-name=glob[\\s*,\\s*glob...]]...\n                            [--name=glob[\\s*,\\s*glob...]]... [-t=\u003ctype\u003e[\\s*,\n                            \\s*\u003ctype\u003e...]]... startDir...\nSpecialized replacement for GNU's find\n      startDir...           One or more starting directories\n      --delete              Deletes the matched entries. When searching for\n                              directories, each directory and its contents will\n                              be recursively deleted.\n      --delete-empty-directories\n                            Deletes a traversed directory if it becomes empty\n                              after matching files/directories within it were\n                              deleted\n      --exclude-name=glob[\\s*,\\s*glob...]\n                            One or more glob patterns to exclude by looking at\n                              name part of the path. If a pattern matches a\n                              directory's name, then its entire subtree is\n                              excluded.\n      --fail-no-matches\n      --format=\u003cformat\u003e     Applies a format when printing each matched entry.\n                              Supports the following directives\n                            %% a literal %\n                            %h leading directory of the entry\n                            %P path of the entry relative to the starting point\n  -h, --help\n      --max-depth=N         Unlimited depth if negative\n      --min-depth=N         Minimum match depth where 0 is a starting point\n      --name=glob[\\s*,\\s*glob...]\n                            One or more glob patterns to match name part of the\n                              path\n      --only-shallowest\n      --output-count-only\n  -q, --quiet\n      --stop-on-first\n  -t, --type=\u003ctype\u003e[\\s*,\\s*\u003ctype\u003e...]\n                            Valid values: file, directory\n```\n\n### get\n\n```\nUsage: mc-image-helper get [-hz] [--exists] [--log-progress-each]\n                           [--output-filename] [--skip-existing]\n                           [--apikey=\u003capikeyHeader\u003e] [--json-path=\u003cjsonPath\u003e]\n                           [--json-value-when-missing=\u003cjsonValueWhenMissing\u003e]\n                           [-o=FILE|DIR] [--prune-depth=\u003cpruneDepth\u003e]\n                           [--retry-count=\u003cretryCount\u003e]\n                           [--retry-delay=\u003cretryDelay\u003e]\n                           [--uris-file=\u003curisFile\u003e]\n                           [--accept=\u003cacceptContentTypes\u003e[\\s*,\n                           \\s*\u003cacceptContentTypes\u003e...]]... [--prune-others=GLOB\n                           [\\s*,\\s*GLOB...]]... [URI[\\s*,\\s*URI...]...]\nDownload a file\n      [URI[\\s*,\\s*URI...]...]\n                            The URI of the resource to retrieve. When the\n                              output is a directory, more than one URI can be\n                              requested.\n      --accept=\u003cacceptContentTypes\u003e[\\s*,\\s*\u003cacceptContentTypes\u003e...]\n                            Specifies the accepted content type(s) to use with\n                              the request\n      --apikey=\u003capikeyHeader\u003e\n                            Specifies the accept header to use with the request\n      --exists              Test if the given URIs are retrievable\n  -h, --help                Show this usage and exit\n      --json-path=\u003cjsonPath\u003e\n                            Extract and output a JsonPath from the response\n      --json-value-when-missing=\u003cjsonValueWhenMissing\u003e\n                            Defines the value that is output when the requested\n                              JSON path does not exist. An empty value results\n                              in a non-zero exit code.\n      --log-progress-each   Output a log as each URI is being retrieved\n  -o, --output=FILE|DIR     Specifies the name of a file or directory to write\n                              the downloaded content. If a directory is\n                              provided, the filename will be derived from the\n                              content disposition or the URI's path. If not\n                              provided, then content will be output to standard\n                              out.\n      --output-filename     Output the resulting filename\n      --prune-depth=\u003cpruneDepth\u003e\n                            When using prune-others, this specifies how deep to\n                              search for files to prune\n      --prune-others=GLOB[\\s*,\\s*GLOB...]\n                            When set and using an output directory, files that\n                              match the given glob patterns will be pruned if\n                              not part of the download set. For example *.jar\n      --retry-count=\u003cretryCount\u003e\n\n      --retry-delay=\u003cretryDelay\u003e\n                            in seconds\n      --skip-existing       Do not retrieve if the output file already exists\n      --uris-file=\u003curisFile\u003e\n                            A file that contains a URL per line\n  -z, --skip-up-to-date     Skips re-downloading a file that is up to date\n```\n\n### github\n\n```\nUsage: mc-image-helper github [--api-base-url=\u003capiBaseUrl\u003e] [--token=\u003ctoken\u003e]\n                              [COMMAND]\n      --api-base-url=\u003capiBaseUrl\u003e\n\n      --token=\u003ctoken\u003e   An access token for GitHub to elevate rate limit vs\n                          anonymous access\nCommands:\n  download-latest-asset  From the latest release, downloads the first matching\n                           asset, and outputs the downloaded filename\n```\n\n### hash\n\n```\nUsage: mc-image-helper hash\nOutputs an MD5 hash of the standard input\n```\n\n### ini-path\n\n```\nUsage: mc-image-helper ini-path [--file=FILE] ref\nExtracts a field from an INI file\n      ref           section/option, section/option[index], /option, /option\n                      [index]\n      --file=FILE   An INI file to query. If not set, reads stdin\n```\n\n### install-curseforge\n\n```\nUsage: mc-image-helper install-curseforge [-h] [--disable-api-caching]\n       [--force-reinstall-modloader] [--force-synchronize]\n       [--overrides-skip-existing] [--api-base-url=\u003capiBaseUrl\u003e]\n       [--api-key=\u003capiKey\u003e] [--downloads-repo=DIR]\n       [--file-download-retries=COUNT]\n       [--file-download-retry-min-delay=DURATION] [--file-id=\u003cfileId\u003e]\n       [--filename-matcher=STR]\n       [--max-concurrent-downloads=\u003cmaxConcurrentDownloads\u003e]\n       [--missing-mods-filename=\u003cmissingModsFilename\u003e]\n       [--mod-loader-version=VERSION] [--modpack-manifest=PATH]\n       [--modpack-page-url=URL] [--modpack-zip=PATH] [-o=DIR]\n       [--results-file=FILE] [--set-level-from=\u003clevelFrom\u003e] [--slug=\u003cslug\u003e]\n       [--ignore-missing-files=\u003cignoreMissingFiles\u003e[,\n       |\u003cnl\u003e\u003cignoreMissingFiles\u003e...]]...\n       [--overrides-exclusions=\u003coverridesExclusions\u003e[NL or ,\n       \u003coverridesExclusions\u003e...]]... [[--exclude-include-file=FILE|URI]\n       [--exclude-all-mods] [[--excludes=PROJECT_ID|SLUG[,\n       |\u003cnl\u003ePROJECT_ID|SLUG...]]... [--force-includes=PROJECT_ID|SLUG[,\n       |\u003cnl\u003ePROJECT_ID|SLUG...]]...]]\n       [[--connection-pool-pending-acquire-timeout=DURATION]\n       [--http-response-timeout=DURATION] [--tls-handshake-timeout=DURATION]\n       [--use-http2] [--wiretap] [--connection-pool-max-idle-timeout=DURATION]]\n       [[--api-cache-ttl=OPERATION=DURATION]...\n       [--api-cache-default-ttl=DURATION]] [[--forge-promotions-url=URL]\n       [--forge-maven-repo-url=URL]] [COMMAND]\nDownloads, installs, and upgrades CurseForge modpacks\n      --api-base-url=\u003capiBaseUrl\u003e\n                             Allows for overriding the CurseForge Eternal API\n                               used\n      --api-cache-default-ttl=DURATION\n                             Set default/fallback TTL in ISO-8601 duration\n                               format.\n                             Default: P2D\n      --api-cache-ttl=OPERATION=DURATION\n                             Set individual operation TTLs\n      --api-key=\u003capiKey\u003e     An API key allocated from the Eternal developer\n                               console at https://console.curseforge.com/\n                             Can also be passed via CF_API_KEY\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --disable-api-caching\n      --downloads-repo=DIR   A local directory that will supply pre-downloaded\n                               mod and modpack files that are marked disallowed\n                               for automated download. The subdirectories mods,\n                               modpacks, and worlds will also be consulted\n                               accordingly.\n      --exclude-all-mods     Exclude all mods regardless of manifest contents\n      --exclude-include-file=FILE|URI\n                             A JSON file that contains global and per modpack\n                               exclude/include declarations. See README for\n                               schema.\n      --excludes, --exclude-mods=PROJECT_ID|SLUG[,|\u003cnl\u003ePROJECT_ID|SLUG...]\n                             For mods that need to be excluded from server\n                               deployments, such as those that don't label as\n                               client\n      --file-download-retries=COUNT\n                             Default is 5\n      --file-download-retry-min-delay=DURATION\n                             Default is PT5S\n      --file-id=\u003cfileId\u003e\n      --filename-matcher=STR Substring to select specific modpack filename\n      --force-includes, --force-include-mods=PROJECT_ID|SLUG[,\n        |\u003cnl\u003ePROJECT_ID|SLUG...]\n                             Some mods incorrectly declare client-only support,\n                               but still need to be included in a server deploy.\n                             This can also be used to selectively override\n                               exclusions.\n      --force-reinstall-modloader\n\n      --force-synchronize\n      --forge-maven-repo-url=URL\n                             URL for Forge Maven repository where installer is\n                               downloaded.\n                             Can also be set via env var FORGE_MAVEN_REPO_URL\n                             Default is https://maven.minecraftforge.net\n      --forge-promotions-url=URL\n                             URL for Forge promotions JSON.\n                             Can also be set via env var FORGE_PROMOTIONS_URL\n                             Default is https://files.minecraftforge.\n                               net/net/minecraftforge/forge/promotions_slim.json\n  -h, --help\n      --http-response-timeout=DURATION\n                             The response timeout to apply to HTTP operations.\n                               Parsed from ISO-8601 format. Default: PT30S\n      --ignore-missing-files=\u003cignoreMissingFiles\u003e[,|\u003cnl\u003e\u003cignoreMissingFiles\u003e...]\n                             These files will be ignored when evaluating if the\n                               modpack is up to date\n      --max-concurrent-downloads=\u003cmaxConcurrentDownloads\u003e\n                             Default is 10\n      --missing-mods-filename=\u003cmissingModsFilename\u003e\n\n      --mod-loader-version=VERSION\n                             Override the mod loader version specified in the\n                               modpack\n      --modpack-manifest=PATH\n                             Similar to --modpack-zip but provide the manifest.\n                               json from the modpack.\n                             Can be a local file path or a URL to a manifest.\n      --modpack-page-url=URL URL of a modpack page such as\n                             https://www.curseforge.\n                               com/minecraft/modpacks/all-the-mods-8or a file's\n                               page\n                             https://www.curseforge.\n                               com/minecraft/modpacks/all-the-mods-8/files/42483\n                               90\n      --modpack-zip=PATH     Path to a pre-downloaded modpack client zip file\n                               that can be used when modpack author disallows\n                               automation.\n                             Can also be passed via CF_MODPACK_ZIP\n  -o, --output-directory=DIR\n      --overrides-exclusions=\u003coverridesExclusions\u003e[NL or ,\n        \u003coverridesExclusions\u003e...]\n                             Excludes files from the overrides that match these\n                               ant-style patterns\n                             *  : matches any non-slash characters\n                             ** : matches any characters\n                             ?  : matches one character\n      --overrides-skip-existing\n                             When enabled, existing files will not be replaced\n                               by overrides content from the modpack\n      --results-file=FILE    A key=value file suitable for scripted environment\n                               variables. Currently includes\n                               SERVER: the entry point jar or script\n      --set-level-from=\u003clevelFrom\u003e\n                             When WORLD_FILE, a world file included the modpack\n                               will be unzipped into a folder under 'saves' and\n                               referenced as 'LEVEL' in the results file.\n                             When OVERRIDES and the overrides contains a world\n                               save directory (contains level.dat), then that\n                               directory will be referenced as 'LEVEL' in the\n                               results file.\n                             In either case, existing world data will be\n                               preserved and skipped if it already exists.\n                             Valid values: WORLD_FILE, OVERRIDES\n      --slug=\u003cslug\u003e          The short-URL identifier\n      --tls-handshake-timeout=DURATION\n                             Default: PT30S\n      --use-http2            Whether to use HTTP/2. Default: false\n      --wiretap              Whether to enable Reactor Netty wiretap logging.\n                               Default: false\nCommands:\n  schemas  Output relevant JSON schemas\n```\n\n### install-fabric-loader\n\n```\nUsage: mc-image-helper install-fabric-loader [-h] [--force-reinstall]\n       [--output-directory=DIR] [--results-file=FILE] [--from-local-file=FILE |\n       --from-url=URL | [[--minecraft-version=VERSION]\n       [--installer-version=VERSION] [--loader-version=VERSION]]]\n       [[--connection-pool-pending-acquire-timeout=DURATION]\n       [--http-response-timeout=DURATION] [--tls-handshake-timeout=DURATION]\n       [--use-http2] [--wiretap] [--connection-pool-max-idle-timeout=DURATION]]\nProvides a few ways to obtain a Fabric loader with simple cleanup of previous\nloader instances\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --force-reinstall     Force reinstall of the loader even if it already\n                              exists\n      --from-local-file=FILE\n\n      --from-url=URL\n  -h, --help\n      --http-response-timeout=DURATION\n                            The response timeout to apply to HTTP operations.\n                              Parsed from ISO-8601 format. Default: PT30S\n      --installer-version=VERSION\n                            By default the latest installer version is used\n      --loader-version=VERSION\n                            By default the latest launcher version is used\n      --minecraft-version=VERSION\n\n      --output-directory=DIR\n\n      --results-file=FILE   A key=value file suitable for scripted environment\n                              variables. Currently includes\n                              SERVER: the entry point jar or script\n      --tls-handshake-timeout=DURATION\n                            Default: PT30S\n      --use-http2           Whether to use HTTP/2. Default: false\n      --wiretap             Whether to enable Reactor Netty wiretap logging.\n                              Default: false\n```\n\n### install-forge\n\n```\nUsage: mc-image-helper install-forge [-h] [--force-reinstall]\n                                     [--minecraft-version=VERSION]\n                                     [--output-directory=DIR]\n                                     [--results-file=FILE]\n                                     [--forge-installer=FILE |\n                                     [--forge-version=\u003cversion\u003e]]\n                                     [[--connection-pool-pending-acquire-timeout\n                                     =DURATION]\n                                     [--http-response-timeout=DURATION]\n                                     [--tls-handshake-timeout=DURATION]\n                                     [--use-http2] [--wiretap]\n                                     [--connection-pool-max-idle-timeout=DURATIO\n                                     N]] [[--forge-promotions-url=URL]\n                                     [--forge-maven-repo-url=URL]]\nDownloads and installs a requested version of Forge\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n[picocli WARN] Could not format 'Can be \u003cproject ID\u003e|\u003cslug\u003e':'\u003cfile ID\u003e, \u003cproject ID\u003e|\u003cslug\u003e'@'\u003cfilename matcher\u003e, \u003cproject ID\u003e|\u003cslug\u003e, project page URL, file page URL, '@'\u003cfilename with ref per line\u003e%nIf not specified, any previous mod/plugin files are removed.%Embedded comments are allowed' (Underlying error: Format specifier '%E'). Using raw String: '%n' format strings have not been replaced with newlines. Please ensure to escape '%' characters with another '%'.\n\n      --force-reinstall\n      --forge-installer=FILE\n                            Use a local forge installer\n      --forge-maven-repo-url=URL\n                            URL for Forge Maven repository where installer is\n                              downloaded.\n                            Can also be set via env var FORGE_MAVEN_REPO_URL\n                            Default is https://maven.minecraftforge.net\n      --forge-promotions-url=URL\n                            URL for Forge promotions JSON.\n                            Can also be set via env var FORGE_PROMOTIONS_URL\n                            Default is https://files.minecraftforge.\n                              net/net/minecraftforge/forge/promotions_slim.json\n      --forge-version=\u003cversion\u003e\n                            A specific Forge version or to auto-resolve the\n                              version provide 'latest' or 'recommended'.\n                              Default value is recommended\n  -h, --help\n      --http-response-timeout=DURATION\n                            The response timeout to apply to HTTP operations.\n                              Parsed from ISO-8601 format. Default: PT30S\n      --minecraft-version=VERSION\n                            'latest', which is the default, or a specific\n                              version\n      --output-directory=DIR\n\n      --results-file=FILE   A key=value file suitable for scripted environment\n                              variables. Currently includes\n                              SERVER: the entry point jar or script\n      --tls-handshake-timeout=DURATION\n                            Default: PT30S\n      --use-http2           Whether to use HTTP/2. Default: false\n      --wiretap             Whether to enable Reactor Netty wiretap logging.\n                              Default: false\n```\n\n### install-modrinth-modpack\n\n```\nUsage: mc-image-helper install-modrinth-modpack [--force-modloader-reinstall]\n       [--force-synchronize] [--api-base-url=\u003cbaseUrl\u003e]\n       [--default-exclude-includes=FILE|URI] [--default-version-type=TYPE]\n       [--game-version=\u003cgameVersion\u003e] [--loader=\u003cloader\u003e]\n       [--max-concurrent-downloads=\u003cmaxConcurrentDownloads\u003e]\n       [--output-directory=DIR] --project=\u003cmodpackProject\u003e\n       [--results-file=FILE] [--version=\u003cversion\u003e]\n       [--exclude-files=\u003cexcludeFiles\u003e[,|\u003cnl\u003e\u003cexcludeFiles\u003e...]]...\n       [--force-include-files=\u003cforceIncludeFiles\u003e[,\n       |\u003cnl\u003e\u003cforceIncludeFiles\u003e...]]...\n       [--ignore-missing-files=\u003cignoreMissingFiles\u003e[,\n       |\u003cnl\u003e\u003cignoreMissingFiles\u003e...]]...\n       [--overrides-exclusions=\u003coverridesExclusions\u003e[NL or ,\n       \u003coverridesExclusions\u003e...]]...\n       [[--connection-pool-pending-acquire-timeout=DURATION]\n       [--http-response-timeout=DURATION] [--tls-handshake-timeout=DURATION]\n       [--use-http2] [--wiretap] [--connection-pool-max-idle-timeout=DURATION]]\n       [[--forge-promotions-url=URL] [--forge-maven-repo-url=URL]]\nSupports installation of Modrinth modpacks along with the associated mod loader\n      --api-base-url=\u003cbaseUrl\u003e\n                            Default: https://api.modrinth.com\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --default-exclude-includes=FILE|URI\n                            A JSON file that contains global and per modpack\n                              exclude/include declarations. See README for\n                              schema.\n      --default-version-type=TYPE\n                            Valid values: release, beta, alpha\n                            Default: release\n      --exclude-files=\u003cexcludeFiles\u003e[,|\u003cnl\u003e\u003cexcludeFiles\u003e...]\n                            Files to exclude, such as improperly declared\n                              client mods. It will match any part of the file's\n                              name/path.\n                            Embedded comments are allowed.\n      --force-include-files=\u003cforceIncludeFiles\u003e[,|\u003cnl\u003e\u003cforceIncludeFiles\u003e...]\n                            Files to force include that were marked as\n                              non-server mods. It will match any part of the\n                              file's name/path.\n                            Embedded comments are allowed.\n      --force-modloader-reinstall\n\n      --force-synchronize\n      --forge-maven-repo-url=URL\n                            URL for Forge Maven repository where installer is\n                              downloaded.\n                            Can also be set via env var FORGE_MAVEN_REPO_URL\n                            Default is https://maven.minecraftforge.net\n      --forge-promotions-url=URL\n                            URL for Forge promotions JSON.\n                            Can also be set via env var FORGE_PROMOTIONS_URL\n                            Default is https://files.minecraftforge.\n                              net/net/minecraftforge/forge/promotions_slim.json\n      --game-version=\u003cgameVersion\u003e\n                            Applicable Minecraft version\n                            Default: (any)\n      --http-response-timeout=DURATION\n                            The response timeout to apply to HTTP operations.\n                              Parsed from ISO-8601 format. Default: PT30S\n      --ignore-missing-files=\u003cignoreMissingFiles\u003e[,|\u003cnl\u003e\u003cignoreMissingFiles\u003e...]\n                            These files will be ignored when evaluating if the\n                              modpack is up to date\n      --loader=\u003cloader\u003e     Valid values: fabric, forge, quilt, neoforge\n                            Default: (any)\n      --max-concurrent-downloads=\u003cmaxConcurrentDownloads\u003e\n                            Can also set env var\n                              MODRINTH_MAX_CONCURRENT_DOWNLOADS\n                            Default is 10\n      --output-directory=DIR\n\n      --overrides-exclusions=\u003coverridesExclusions\u003e[NL or ,\n        \u003coverridesExclusions\u003e...]\n                            Excludes files from the overrides that match these\n                              ant-style patterns\n                            *  : matches any non-slash characters\n                            ** : matches any characters\n                            ?  : matches one character\n                            Embedded comments are allowed.\n      --project=\u003cmodpackProject\u003e\n                            One of\n                            - Project ID or slug\n                            - Project page URL\n                            - Project file URL\n                            - Custom URL of a hosted modpack file\n                            - Local path to a modpack file\n      --results-file=FILE   A key=value file suitable for scripted environment\n                              variables. Currently includes\n                              SERVER: the entry point jar or script\n      --tls-handshake-timeout=DURATION\n                            Default: PT30S\n      --use-http2           Whether to use HTTP/2. Default: false\n      --version, --version-id=\u003cversion\u003e\n                            Version ID, name, or number from the file's metadata\n                            Default chooses newest file based on game version,\n                              loader, and/or default version type\n      --wiretap             Whether to enable Reactor Netty wiretap logging.\n                              Default: false\n```\n\n### install-neoforge\n\n```\nUsage: mc-image-helper install-neoforge [-h] [--force-reinstall]\n                                        [--minecraft-version=VERSION]\n                                        [--neoforge-version=\u003cversion\u003e]\n                                        [--output-directory=DIR]\n                                        [--results-file=FILE]\n                                        [[--connection-pool-pending-acquire-time\n                                        out=DURATION]\n                                        [--http-response-timeout=DURATION]\n                                        [--tls-handshake-timeout=DURATION]\n                                        [--use-http2] [--wiretap]\n                                        [--connection-pool-max-idle-timeout=DURA\n                                        TION]]\nDownloads and installs a requested version of NeoForge\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --force-reinstall\n  -h, --help\n      --http-response-timeout=DURATION\n                            The response timeout to apply to HTTP operations.\n                              Parsed from ISO-8601 format. Default: PT30S\n      --minecraft-version=VERSION\n                            'latest', which is the default, or a specific\n                              version to narrow NeoForge version selection\n      --neoforge-version=\u003cversion\u003e\n                            A specific NeoForge version, 'latest', or 'beta'.\n                              Default value is latest\n      --output-directory=DIR\n\n      --results-file=FILE   A key=value file suitable for scripted environment\n                              variables. Currently includes\n                              SERVER: the entry point jar or script\n      --tls-handshake-timeout=DURATION\n                            Default: PT30S\n      --use-http2           Whether to use HTTP/2. Default: false\n      --wiretap             Whether to enable Reactor Netty wiretap logging.\n                              Default: false\n```\n\n### install-paper\n\n```\nUsage: mc-image-helper install-paper [--check-updates] [--base-url=\u003cbaseUrl\u003e]\n                                     [-o=\u003coutputDirectory\u003e]\n                                     [--results-file=FILE] [--url=\u003cdownloadUrl\u003e\n                                     | [[--project=\u003cproject\u003e] [--build=\u003cbuild\u003e]\n                                     [--channel=\u003cchannel\u003e]\n                                     [--version=\u003cversion\u003e]]]\n                                     [--connection-pool-pending-acquire-timeout=\n                                     DURATION |\n                                     [--http-response-timeout=DURATION] |\n                                     [--tls-handshake-timeout=DURATION] |\n                                     [--use-http2] | [--wiretap] |\n                                     [--connection-pool-max-idle-timeout=DURATIO\n                                     N]]\nInstalls selected PaperMC\n      --base-url=\u003cbaseUrl\u003e\n      --build=\u003cbuild\u003e\n      --channel=\u003cchannel\u003e    This is ignored for now\n      --check-updates        Check for updates and exit with status code 0 when\n                               available\n      --clean-libraries      Remove currently installed and not required\n                               libraries\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --http-response-timeout=DURATION\n                             The response timeout to apply to HTTP operations.\n                               Parsed from ISO-8601 format. Default: PT30S\n  -o, --output-directory=\u003coutputDirectory\u003e\n\n      --project=\u003cproject\u003e\n      --results-file=FILE    A key=value file suitable for scripted environment\n                               variables. Currently includes\n                               SERVER: the entry point jar or script\n      --tls-handshake-timeout=DURATION\n                             Default: PT30S\n      --url=\u003cdownloadUrl\u003e    Use a custom URL location\n      --use-http2            Whether to use HTTP/2. Default: false\n      --version=\u003cversion\u003e    May be 'latest' or specific version\n      --wiretap              Whether to enable Reactor Netty wiretap logging.\n                               Default: false\n```\n\n### install-purpur\n\n```\nUsage: mc-image-helper install-purpur [--base-url=\u003cbaseUrl\u003e]\n                                      [-o=\u003coutputDirectory\u003e]\n                                      [--results-file=FILE]\n                                      [--url=\u003cdownloadUrl\u003e | [[--build=\u003cbuild\u003e]\n                                      [--version=\u003cversion\u003e]]]\n                                      [--connection-pool-pending-acquire-timeout\n                                      =DURATION |\n                                      [--http-response-timeout=DURATION] |\n                                      [--tls-handshake-timeout=DURATION] |\n                                      [--use-http2] | [--wiretap] |\n                                      [--connection-pool-max-idle-timeout=DURATI\n                                      ON]]\nDownloads latest or selected version of Purpur\n      --base-url=\u003cbaseUrl\u003e\n      --build=\u003cbuild\u003e\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --http-response-timeout=DURATION\n                             The response timeout to apply to HTTP operations.\n                               Parsed from ISO-8601 format. Default: PT30S\n  -o, --output-directory=\u003coutputDirectory\u003e\n\n      --results-file=FILE    A key=value file suitable for scripted environment\n                               variables. Currently includes\n                               SERVER: the entry point jar or script\n      --tls-handshake-timeout=DURATION\n                             Default: PT30S\n      --url=\u003cdownloadUrl\u003e    Use a custom URL location\n      --use-http2            Whether to use HTTP/2. Default: false\n      --version=\u003cversion\u003e    May be 'latest' or specific version\n      --wiretap              Whether to enable Reactor Netty wiretap logging.\n                               Default: false\n```\n\n### install-quilt\n\n```\nUsage: mc-image-helper install-quilt [-h] [--force-reinstall]\n                                     [--loader-version=VERSION]\n                                     [--minecraft-version=VERSION]\n                                     [--output-directory=DIR]\n                                     [--repo-url=\u003crepoUrl\u003e]\n                                     [--results-file=FILE] [--installer-url=URL\n                                     | --installer-version=VERSION]\n                                     [[--connection-pool-pending-acquire-timeout\n                                     =DURATION]\n                                     [--http-response-timeout=DURATION]\n                                     [--tls-handshake-timeout=DURATION]\n                                     [--use-http2] [--wiretap]\n                                     [--connection-pool-max-idle-timeout=DURATIO\n                                     N]]\nInstalls Quilt mod loader\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --force-reinstall\n  -h, --help\n      --http-response-timeout=DURATION\n                             The response timeout to apply to HTTP operations.\n                               Parsed from ISO-8601 format. Default: PT30S\n      --installer-url=URL\n      --installer-version=VERSION\n                             Default uses latest\n      --loader-version=VERSION\n                             Default uses latest\n      --minecraft-version=VERSION\n                             'latest', 'snapshot', or specific version\n      --output-directory=DIR\n      --repo-url=\u003crepoUrl\u003e   Default: https://maven.quiltmc.\n                               org/repository/release\n      --results-file=FILE    A key=value file suitable for scripted environment\n                               variables. Currently includes\n                               SERVER: the entry point jar or script\n      --tls-handshake-timeout=DURATION\n                             Default: PT30S\n      --use-http2            Whether to use HTTP/2. Default: false\n      --wiretap              Whether to enable Reactor Netty wiretap logging.\n                               Default: false\n```\n\n### interpolate\n\n```\nUsage: mc-image-helper interpolate [-h] ([--replace-env-prefix=\u003cprefix\u003e]\n                                   [--replace-env-excludes=FILENAME[,\n                                   FILENAME...]]...\n                                   [--replace-env-exclude-paths=PATH[,\n                                   PATH...]]... --replace-env-file-suffixes=PATH\n                                   [,PATH...] [--replace-env-file-suffixes=PATH\n                                   [,PATH...]]...) [DIRECTORY...]\nInterpolates existing files in one or more directories\n      [DIRECTORY...]\n  -h, --help           Show this usage and exit\n      --replace-env-exclude-paths=PATH[,PATH...]\n                       Destination paths that will be excluded from processing\n      --replace-env-excludes=FILENAME[,FILENAME...]\n                       Filenames (without path) that should be excluded from\n                         processing.\n      --replace-env-file-suffixes=PATH[,PATH...]\n                       Filename suffixes (without dot) that should be\n                         processed. For example: txt,json,yaml\n      --replace-env-prefix=\u003cprefix\u003e\n                       Only placeholder variables with this prefix will be\n                         processed.\n                         Default: CFG_\n```\n\n### java-release\n\n```\nUsage: mc-image-helper java-release\nOutputs the Java release number, such as 8, 11, 17\n```\n\n### manage-users\n\n```\nUsage: mc-image-helper manage-users [-fh] [--existing=\u003cexistingFileBehavior\u003e]\n                                    [--mojang-api-base-url=\u003cmojangApiBaseUrl\u003e]\n                                    [--output-directory=\u003coutputDirectory\u003e]\n                                    [--playerdb-api-base-url=\u003cplayerdbApiBaseUrl\n                                    \u003e] -t=\u003ctype\u003e\n                                    [--user-api-provider=\u003cuserApiProvider\u003e]\n                                    [--version=\u003cversion\u003e]\n                                    [[--connection-pool-pending-acquire-timeout=\n                                    DURATION]\n                                    [--http-response-timeout=DURATION]\n                                    [--tls-handshake-timeout=DURATION]\n                                    [--use-http2] [--wiretap]\n                                    [--connection-pool-max-idle-timeout=DURATION\n                                    ]] [INPUT[,INPUT...]...]\n      [INPUT[,INPUT...]...] One or more Mojang usernames, UUID, or ID (UUID\n                              without dashes); however, when offline, only\n                              UUID/IDs can be provided.\n                            When input is a file, only one local file path or\n                              URL can be provided\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --existing=\u003cexistingFileBehavior\u003e\n                            Select the behavior when the resulting file already\n                              exists\n                            Allowed: SYNCHRONIZE, MERGE, SKIP\n  -f, --input-is-file\n  -h, --help\n      --http-response-timeout=DURATION\n                            The response timeout to apply to HTTP operations.\n                              Parsed from ISO-8601 format. Default: PT30S\n      --mojang-api-base-url=\u003cmojangApiBaseUrl\u003e\n\n      --output-directory=\u003coutputDirectory\u003e\n\n      --playerdb-api-base-url=\u003cplayerdbApiBaseUrl\u003e\n\n  -t, --type=\u003ctype\u003e         Allowed: JAVA_WHITELIST, JAVA_OPS\n      --tls-handshake-timeout=DURATION\n                            Default: PT30S\n      --use-http2           Whether to use HTTP/2. Default: false\n      --user-api-provider=\u003cuserApiProvider\u003e\n                            Allowed: mojang, playerdb\n      --version=\u003cversion\u003e   Minecraft game version. If not provided, assumes\n                              JSON format\n      --wiretap             Whether to enable Reactor Netty wiretap logging.\n                              Default: false\n```\n\n### maven-download\n\n```\nUsage: mc-image-helper maven-download [-h] [--print-filename] [--skip-existing]\n                                      [--skip-up-to-date] -a=\u003cartifact\u003e\n                                      [--classifier=\u003cclassifier\u003e] -g=\u003cgroup\u003e\n                                      [--output-directory=\u003coutputDirectory\u003e]\n                                      [--packaging=\u003cpackaging\u003e]\n                                      [-r=\u003cmavenRepo\u003e] [-v=\u003cversion\u003e]\n                                      [[--connection-pool-pending-acquire-timeou\n                                      t=DURATION]\n                                      [--http-response-timeout=DURATION]\n                                      [--tls-handshake-timeout=DURATION]\n                                      [--use-http2] [--wiretap]\n                                      [--connection-pool-max-idle-timeout=DURATI\n                                      ON]]\nDownloads a maven artifact from a Maven repository\n  -a, -m, --module, --artifact=\u003cartifact\u003e\n\n      --classifier=\u003cclassifier\u003e\n\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n  -g, --group=\u003cgroup\u003e\n  -h, --help\n      --http-response-timeout=DURATION\n                            The response timeout to apply to HTTP operations.\n                              Parsed from ISO-8601 format. Default: PT30S\n      --output-directory=\u003coutputDirectory\u003e\n\n      --packaging=\u003cpackaging\u003e\n\n      --print-filename\n  -r, --maven-repo=\u003cmavenRepo\u003e\n\n      --skip-existing\n      --skip-up-to-date\n      --tls-handshake-timeout=DURATION\n                            Default: PT30S\n      --use-http2           Whether to use HTTP/2. Default: false\n  -v, --version=\u003cversion\u003e   A specific version, 'release', or 'latest'\n                            Default: release\n      --wiretap             Whether to enable Reactor Netty wiretap logging.\n                              Default: false\n```\n\n### mcopy\n\n```\nUsage: mc-image-helper mcopy [-hz] [--file-is-listing]\n                             [--ignore-missing-sources] [--quiet-when-skipped]\n                             [--skip-existing] [--glob=GLOB]\n                             [--scope=\u003cmanifestId\u003e] --to=\u003cdest\u003e\n                             [[--connection-pool-pending-acquire-timeout=DURATIO\n                             N] [--http-response-timeout=DURATION]\n                             [--tls-handshake-timeout=DURATION] [--use-http2]\n                             [--wiretap]\n                             [--connection-pool-max-idle-timeout=DURATION]] [SRC\n                             [,|\u003cnl\u003eSRC...]...]\nMulti-source file copy operation with with managed cleanup. Supports\nauto-detected sourcing from file list, directories, and URLs\n      [SRC[,|\u003cnl\u003eSRC...]...] Any mix of source file, directory, or URLs\n                               delimited by commas or newlines\n                             Per-file destinations can be assigned by\n                               destination\u003csource\n                             Embedded comments are allowed.\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --file-is-listing      Source files or URLs are processed as a line\n                               delimited list of sources.\n                             For remote listing files, the contents must all be\n                               file URLs.\n      --glob=GLOB            When a source is a directory, this filename glob\n                               will be applied to select files.\n  -h, --help\n      --http-response-timeout=DURATION\n                             The response timeout to apply to HTTP operations.\n                               Parsed from ISO-8601 format. Default: PT30S\n      --ignore-missing-sources\n                             Don't log or fail exit code when any or all\n                               sources are missing\n      --quiet-when-skipped   Don't log when file exists or is up to date\n      --scope, --manifest-id=\u003cmanifestId\u003e\n                             If managed cleanup is required, this is the\n                               identifier used for qualifying manifest filename\n                               in destination\n      --skip-existing\n      --tls-handshake-timeout=DURATION\n                             Default: PT30S\n      --to, --output-directory=\u003cdest\u003e\n\n      --use-http2            Whether to use HTTP/2. Default: false\n      --wiretap              Whether to enable Reactor Netty wiretap logging.\n                               Default: false\n  -z, --skip-up-to-date\n```\n\n### modrinth\n\n```\nUsage: mc-image-helper modrinth [--skip-existing] [--skip-up-to-date]\n                                [--allowed-version-type=\u003cdefaultVersionType\u003e]\n                                [--api-base-url=\u003cbaseUrl\u003e]\n                                [--download-dependencies=\u003cdownloadDependencies\u003e]\n                                 --game-version=\u003cgameVersion\u003e --loader=\u003cloader\u003e\n                                [--output-directory=DIR]\n                                [--world-directory=\u003cworldDirectory\u003e]\n                                [--projects=[loader:]id|slug[:version][,|\u003cnl\u003e\n                                [loader:]id|slug[:version]...]]...\n                                [[--connection-pool-pending-acquire-timeout=DURA\n                                TION] [--http-response-timeout=DURATION]\n                                [--tls-handshake-timeout=DURATION]\n                                [--use-http2] [--wiretap]\n                                [--connection-pool-max-idle-timeout=DURATION]]\nAutomates downloading of modrinth resources\n      --allowed-version-type=\u003cdefaultVersionType\u003e\n                          Valid values: release, beta, alpha\n      --api-base-url=\u003cbaseUrl\u003e\n                          Default: https://api.modrinth.com\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --download-dependencies=\u003cdownloadDependencies\u003e\n                          Default is NONE\n                          Valid values: NONE, REQUIRED, OPTIONAL\n      --game-version=\u003cgameVersion\u003e\n                          Applicable Minecraft version\n      --http-response-timeout=DURATION\n                          The response timeout to apply to HTTP operations.\n                            Parsed from ISO-8601 format. Default: PT30S\n      --loader=\u003cloader\u003e   Valid values: fabric, quilt, forge, neoforge, bukkit,\n                            spigot, paper, folia, pufferfish, leaf, purpur,\n                            bungeecord, velocity, datapack\n      --output-directory=DIR\n\n      --projects=[loader:]id|slug[:version][,|\u003cnl\u003e[loader:]id|slug[:version]...]\n                          Project ID or Slug. Can be \u003cproject ID\u003e|\u003cslug\u003e,\n                            \u003cloader\u003e:\u003cproject ID\u003e|\u003cslug\u003e, \u003cloader\u003e:\u003cproject\n                            ID\u003e|\u003cslug\u003e:\u003cversion ID|version number|release\n                            type\u003e, '@'\u003cfilename with ref per line (supports #\n                            comments)\u003e\n                          Examples: fabric-api, fabric:fabric-api, fabric:\n                            fabric-api:0.76.1+1.19.2, datapack:terralith,\n                            @/path/to/modrinth-mods.txt\n                          Valid release types: release, beta, alpha\n                          Valid loaders: fabric, forge, paper, datapack, etc.\n                          Embedded comments are allowed.\n      --skip-existing\n      --skip-up-to-date\n      --tls-handshake-timeout=DURATION\n                          Default: PT30S\n      --use-http2         Whether to use HTTP/2. Default: false\n      --wiretap           Whether to enable Reactor Netty wiretap logging.\n                            Default: false\n      --world-directory=\u003cworldDirectory\u003e\n                          Used for datapacks, a path relative to the output\n                            directory or an absolute path\n                          Default: world\n```\n\n### network-interfaces\n\n```\nUsage: mc-image-helper network-interfaces [--include-loopback]\n       [--check=\u003cifNameToCheck\u003e]\nProvides simple operations to list network interface names and check existence\n      --check=\u003cifNameToCheck\u003e\n\n      --include-loopback\n```\n\n### patch\n\n```\nUsage: mc-image-helper patch [-h] [--json-allow-comments]\n                             [--patch-env-prefix=\u003cenvPrefix\u003e] FILE_OR_DIR\nPatches one or more existing files using JSON path based operations\nSupports the file formats:\n- JSON\n- JSON5\n- Yaml\n- TOML, but processed output is not pretty\n      FILE_OR_DIR   Path to a PatchSet json file or directory containing\n                      PatchDefinition json files\n  -h, --help        Show this usage and exit\n      --json-allow-comments\n                    Whether to allow comments in JSON files. Env:\n                      PATCH_JSON_ALLOW_COMMENTS\n                      Default: true\n      --patch-env-prefix=\u003cenvPrefix\u003e\n                    Only placeholder variables with this prefix will be\n                      processed\n                      Default: CFG_\n```\n\n### resolve-minecraft-version\n\n```\nUsage: mc-image-helper resolve-minecraft-version\n       [[--connection-pool-pending-acquire-timeout=DURATION]\n       [--http-response-timeout=DURATION] [--tls-handshake-timeout=DURATION]\n       [--use-http2] [--wiretap] [--connection-pool-max-idle-timeout=DURATION]]\n       \u003cinputVersion\u003e\nResolves and validate latest, snapshot, and specific versions\n      \u003cinputVersion\u003e\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --http-response-timeout=DURATION\n                       The response timeout to apply to HTTP operations. Parsed\n                         from ISO-8601 format. Default: PT30S\n      --tls-handshake-timeout=DURATION\n                       Default: PT30S\n      --use-http2      Whether to use HTTP/2. Default: false\n      --wiretap        Whether to enable Reactor Netty wiretap logging.\n                         Default: false\n```\n\n### set-properties\n\n```\nUsage: mc-image-helper set-properties [--escape-unicode]\n                                      [--definitions=\u003cpropertyDefinitionsFile\u003e]\n                                      [-p=\u003cString=String\u003e]... \u003cpropertiesFile\u003e\nMaps environment variables to a properties file\n      \u003cpropertiesFile\u003e\n      --definitions=\u003cpropertyDefinitionsFile\u003e\n                         JSON file of property names to PropertyDefinition\n                           mappings\n      --escape-unicode\n  -p, --custom-property, --custom-properties=\u003cString=String\u003e\n                         Key=value pairs of custom properties to set\n```\n\n### show-all-subcommand-usage\n\n```\nUsage: mc-image-helper show-all-subcommand-usage\nRenders all of the subcommand usage as markdown sections for README\n```\n\n### sync\n\n```\nUsage: mc-image-helper sync [-h] [--skip-newer-in-destination] \u003csrcDest\u003e[,\n                            |\u003cnl\u003e\u003csrcDest\u003e...] \u003csrcDest\u003e[,|\u003cnl\u003e\u003csrcDest\u003e...]...\nSynchronizes the contents of one directory to another.\n      \u003csrcDest\u003e[,|\u003cnl\u003e\u003csrcDest\u003e...] \u003csrcDest\u003e[,|\u003cnl\u003e\u003csrcDest\u003e...]...\n               src... dest directories\n  -h, --help   Show this usage and exit\n      --skip-newer-in-destination\n               Skip any files that exist in the destination and have a newer\n                 modification time than the source.\n```\n\n### sync-and-interpolate\n\n```\nUsage: mc-image-helper sync-and-interpolate [-h] [--skip-newer-in-destination]\n       ([--replace-env-prefix=\u003cprefix\u003e] [--replace-env-excludes=FILENAME[,\n       FILENAME...]]... [--replace-env-exclude-paths=PATH[,PATH...]]...\n       --replace-env-file-suffixes=PATH[,PATH...]\n       [--replace-env-file-suffixes=PATH[,PATH...]]...) \u003csrcDest\u003e[,\n       |\u003cnl\u003e\u003csrcDest\u003e...] \u003csrcDest\u003e[,|\u003cnl\u003e\u003csrcDest\u003e...]...\nSynchronizes the contents of one directory to another with conditional variable\ninterpolation.\n      \u003csrcDest\u003e[,|\u003cnl\u003e\u003csrcDest\u003e...] \u003csrcDest\u003e[,|\u003cnl\u003e\u003csrcDest\u003e...]...\n               src... dest directories\n  -h, --help   Show this usage and exit\n      --replace-env-exclude-paths=PATH[,PATH...]\n               Destination paths that will be excluded from processing\n      --replace-env-excludes=FILENAME[,FILENAME...]\n               Filenames (without path) that should be excluded from processing.\n      --replace-env-file-suffixes=PATH[,PATH...]\n               Filename suffixes (without dot) that should be processed. For\n                 example: txt,json,yaml\n      --replace-env-prefix=\u003cprefix\u003e\n               Only placeholder variables with this prefix will be processed.\n                 Default: CFG_\n      --skip-newer-in-destination\n               Skip any files that exist in the destination and have a newer\n                 modification time than the source.\n```\n\n### test-logging-levels\n\n```\nUsage: mc-image-helper test-logging-levels\n```\n\n### toml-path\n\n```\nUsage: mc-image-helper toml-path [--file=FILE] query\nExtracts a path from a TOML file using json-path syntax\n      query         JSON path expression where root element $ can be omitted\n      --file=FILE   A TOML file to query. If not set, reads stdin\n```\n\n### vanillatweaks\n\n```\nUsage: mc-image-helper vanillatweaks [--force-synchronize]\n                                     [--base-url=\u003cbaseUrl\u003e]\n                                     [--output-directory=DIR]\n                                     [--world-subdir=\u003cworldSubdir\u003e]\n                                     [--pack-files=FILE[,|\u003cnl\u003eFILE...]]...\n                                     [--share-codes=CODE[,|\u003cnl\u003eCODE...]]...\n                                     [[--connection-pool-pending-acquire-timeout\n                                     =DURATION]\n                                     [--http-response-timeout=DURATION]\n                                     [--tls-handshake-timeout=DURATION]\n                                     [--use-http2] [--wiretap]\n                                     [--connection-pool-max-idle-timeout=DURATIO\n                                     N]]\nDownloads Vanilla Tweaks resource packs, data packs, or crafting tweaks given a\nshare code or pack file\n      --base-url=\u003cbaseUrl\u003e\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --force-synchronize\n      --http-response-timeout=DURATION\n                             The response timeout to apply to HTTP operations.\n                               Parsed from ISO-8601 format. Default: PT30S\n      --output-directory=DIR\n      --pack-files=FILE[,|\u003cnl\u003eFILE...]\n\n      --share-codes=CODE[,|\u003cnl\u003eCODE...]\n\n      --tls-handshake-timeout=DURATION\n                             Default: PT30S\n      --use-http2            Whether to use HTTP/2. Default: false\n      --wiretap              Whether to enable Reactor Netty wiretap logging.\n                               Default: false\n      --world-subdir=\u003cworldSubdir\u003e\n\n```\n\n### version-from-modrinth-projects\n\n```\nUsage: mc-image-helper version-from-modrinth-projects\n       [--api-base-url=\u003cbaseUrl\u003e] [--projects=[loader:]id|slug[:version][,|\u003cnl\u003e\n       [loader:]id|slug[:version]...]...]...\n       [[--connection-pool-pending-acquire-timeout=DURATION]\n       [--http-response-timeout=DURATION] [--tls-handshake-timeout=DURATION]\n       [--use-http2] [--wiretap] [--connection-pool-max-idle-timeout=DURATION]]\nFinds a compatible Minecraft version across given Modrinth projects\n      --api-base-url=\u003cbaseUrl\u003e\n                    Default: https://api.modrinth.com\n      --connection-pool-max-idle-timeout=DURATION\n\n      --connection-pool-pending-acquire-timeout=DURATION\n\n      --http-response-timeout=DURATION\n                    The response timeout to apply to HTTP operations. Parsed\n                      from ISO-8601 format. Default: PT30S\n      --projects=[loader:]id|slug[:version][,|\u003cnl\u003e[loader:]id|slug[:\n        version]...]...\n                    Project ID or Slug. Can be \u003cproject ID\u003e|\u003cslug\u003e, \u003cloader\u003e:\n                      \u003cproject ID\u003e|\u003cslug\u003e, \u003cloader\u003e:\u003cproject ID\u003e|\u003cslug\u003e:\n                      \u003cversion ID|version number|release type\u003e, '@'\u003cfilename\n                      with ref per line (supports # comments)\u003e\n                    Examples: fabric-api, fabric:fabric-api, fabric:fabric-api:\n                      0.76.1+1.19.2, datapack:terralith,\n                      @/path/to/modrinth-mods.txt\n                    Valid release types: release, beta, alpha\n                    Valid loaders: fabric, forge, paper, datapack, etc.\n      --tls-handshake-timeout=DURATION\n                    Default: PT30S\n      --use-http2   Whether to use HTTP/2. Default: false\n      --wiretap     Whether to enable Reactor Netty wiretap logging. Default:\n                      false\n```\n\n### yaml-path\n\n```\nUsage: mc-image-helper yaml-path [--file=\u003cyamlFile\u003e] \u003cyamlPath\u003e\nExtracts a path from a YAML file using json-path syntax\n      \u003cyamlPath\u003e          A YAML/JSON path in to query. Leading root anchor, $,\n                            will be added if not present\n      --file=\u003cyamlFile\u003e   A YAML file to query\n```\n\n\u003c!-- END of documentation generated using `mc-image-helper show-all-subcommand-usage` --\u003e\n\n\n## Patch Schemas\n\n### PatchSet\n\n- `patches` : array of [PatchDefinition](#patchdefinition)\n\nExample\n\n```json\n{\n  \"patches\": [\n    {\n      \"file\": \"/data/paper.yml\",\n      \"ops\": [\n        {\n          \"$set\": {\n            \"path\": \"$.verbose\",\n            \"value\": true\n          }\n        },\n        {\n          \"$set\": {\n            \"path\": \"$.settings['velocity-support'].enabled\",\n            \"value\": \"${CFG_VELOCITY_ENABLED}\",\n            \"value-type\": \"bool\"\n          }\n        },\n        {\n          \"$put\": {\n            \"path\": \"$.settings\",\n            \"key\": \"my-test-setting\",\n            \"value\": \"testing\"\n          }\n        }\n      ]\n    }\n  ]\n}\n```\n\n### PatchDefinition\n\n- `file` : Path to the file to patch\n- `file-format` : **optional** If non-null, declares a specifically supported format name: json, yaml. Otherwise, the file format is detected by the file's suffix.\n- `ops` : array of [PatchOperation](#patchoperation)\n\nExample:\n\n```json\n{\n  \"file\": \"/data/paper.yml\",\n  \"ops\": [\n    {\n      \"$set\": {\n        \"path\": \"$.verbose\",\n        \"value\": true\n      }\n    },\n    {\n      \"$set\": {\n        \"path\": \"$.settings['velocity-support'].enabled\",\n        \"value\": \"${CFG_VELOCITY_ENABLED}\",\n        \"value-type\": \"bool\"\n      }\n    },\n    {\n      \"$put\": {\n        \"path\": \"$.settings\",\n        \"key\": \"my-test-setting\",\n        \"value\": \"testing\"\n      }\n    }\n  ]\n}\n```\n\n### PatchOperation\n\nEach patch operation object contains a single key that one is one of the following sections and then an object within each. For example `{ \"$set\" : { ... } }`.\n\n#### `$set`\n\nThe `$set` operation can set an existing field to a new value. If a new field needs to be added, use the [$put](#put) operation.\n\n- `$set`\n  - `path` : The [JSON path](https://github.com/json-path/JsonPath#readme) to the field to set\n  - `value` : The value to set. If the given value is a string, variable placeholders of the form `${...}` will be replaced from the environment variables and the resulting string can be converted by setting value-type.\n  - `value-type` : **optional** [see below](#valuetype)\n\nExample:\n\n```json\n{\n  \"$set\": {\n    \"path\": \"$.verbose\",\n    \"value\": true\n  }\n}\n```\n\n#### `$put`\n\nThe `$put` operation can add or update a field with the given key within an object.\n\n- `$put`\n    - `path` : The [JSON path](https://github.com/json-path/JsonPath#readme) to the object containing key to set\n    - `key` : The key to set\n    - `value` : The value to set. If the given value is a string, variable placeholders of the form `${...}` will be replaced from the environment variables and the resulting string can be converted by setting value-type.\n    - `value-type` : **optional** [see below](#valuetype)\n\nExample:\n\n```json\n{\n  \"$put\": {\n    \"path\": \"$.settings\",\n    \"key\": \"my-test-setting\",\n    \"value\": \"testing\"\n  }\n}\n```\n\n#### `$add`\n\nThe `$add` operation allows for adding a value to an array.\n\n- `$add`\n    - `path` : The [JSON path](https://github.com/json-path/JsonPath#readme) to the array\n    - `value` : The value to add. If the given value is a string, variable placeholders of the form `${...}` will be replaced from the environment variables and the resulting string can be converted by setting value-type.\n    - `value-type` : **optional** [see below](#valuetype)\n\n### ValueType\n\nOne of the following identifiers or can be prefixed with `list of ` to indicate a list of the identified type:\n- int : integer/whole value\n- float : numerical value with an optional decimal part\n- bool : boolean value of `true` or `false`\n- auto : where the text value is attempted to be converted into one of the above\n\n## Exclude/Include File Schema\n\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n  \"title\": \"Mods Exclude/Include File Content\",\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"globalExcludes\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Mods by slug|id to exclude for all modpacks\"\n    },\n    \"globalForceIncludes\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Mods by slug|id to force include for all modpacks\"\n    },\n    \"modpacks\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/definitions/ExcludeIncludes\"\n      },\n      \"description\": \"Specific exclude/includes by modpack slug\"\n    }\n  },\n  \"definitions\": {\n    \"ExcludeIncludes\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"excludes\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Mods by slug|id to exclude for this modpack\"\n        },\n        \"forceIncludes\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Mods by slug|id to force include for this modpack\"\n        }\n      }\n    }\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitzg%2Fmc-image-helper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitzg%2Fmc-image-helper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitzg%2Fmc-image-helper/lists"}