From f88cb8eee958676f510af980623dcf861b7e1327 Mon Sep 17 00:00:00 2001 From: Geoff Bourne Date: Thu, 9 Oct 2025 18:54:56 -0500 Subject: [PATCH] neoforge: handle new version ordering (#3703) --- Dockerfile | 2 +- docs/img/modrinth-copy-project-id.png | Bin 0 -> 17566 bytes docs/mods-and-plugins/index.md | 8 ++++ docs/mods-and-plugins/modrinth.md | 62 ++++++++++++++++++-------- scripts/start-setupModpack | 10 ++--- 5 files changed, 57 insertions(+), 25 deletions(-) create mode 100644 docs/img/modrinth-copy-project-id.png diff --git a/Dockerfile b/Dockerfile index 09fa0e70..451697a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,7 +48,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \ --var version=${MC_SERVER_RUNNER_VERSION} --var app=mc-server-runner --file {{.app}} \ --from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz -ARG MC_HELPER_VERSION=1.49.1 +ARG MC_HELPER_VERSION=1.49.2 ARG MC_HELPER_BASE_URL=${GITHUB_BASEURL}/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION} # used for cache busting local copy of mc-image-helper ARG MC_HELPER_REV=1 diff --git a/docs/img/modrinth-copy-project-id.png b/docs/img/modrinth-copy-project-id.png new file mode 100644 index 0000000000000000000000000000000000000000..318f9145e784ab286649d3e9fbbcc0eb36ed8cff GIT binary patch literal 17566 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 Q(*OVf07*qoM6N<$f}5kC*8l(j literal 0 HcmV?d00001 diff --git a/docs/mods-and-plugins/index.md b/docs/mods-and-plugins/index.md index d4a005df..34fe011e 100644 --- a/docs/mods-and-plugins/index.md +++ b/docs/mods-and-plugins/index.md @@ -133,6 +133,14 @@ The newline delimiting allows for compose file usage like: https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot ``` +!!! note "Auto-removal" + + Entries that are removed from the `MODS` or `PLUGINS` list will be automatically removed from the `mods` or `plugins` directory. This is useful for removing mods/plugins that are no longer needed. An empty `MODS` or `PLUGINS` list will remove all mods/plugins. + +!!! note "Disable processing" + + To temporarily disable processing of the `MODS` or `PLUGINS` list, then comment out the `MODS` or `PLUGINS` environment variable. + ## Mod/Plugin URL Listing File As an alternative to `MODS`/`PLUGINS`, the variable `MODS_FILE` or `PLUGINS_FILE` can be set with the container path or URL of a text file listing a mod/plugin URLs on each line. For example, the following diff --git a/docs/mods-and-plugins/modrinth.md b/docs/mods-and-plugins/modrinth.md index 1e499ea2..e85981e4 100644 --- a/docs/mods-and-plugins/modrinth.md +++ b/docs/mods-and-plugins/modrinth.md @@ -2,28 +2,46 @@ [Modrinth](https://modrinth.com/) is an open source modding platform with a clean, easy to use website for finding [Fabric, Forge, etc mods](https://modrinth.com/mods) and [Paper, etc plugins](https://modrinth.com/plugins), and [datapacks](https://modrinth.com/datapacks). At startup, the container will automatically locate and download the newest versions of mod/plugin files that correspond to the `TYPE` and `VERSION` in use. Older file versions downloaded previously will automatically be cleaned up. -- **MODRINTH_PROJECTS** : comma or newline separated list of project slugs (short name) or IDs. The project ID is located in the "Technical information" section. The project slug is the part of the URL that follows `/mod/`, `/plugin/`, or `/datapack/`. For example: - ``` +## Usage + +To use this feature, set the environment variable `MODRINTH_PROJECTS` to a comma or newline separated list of project slugs (short name) or IDs. + +!!! tip "Project ID" + + The project ID can be copied to the clipboard from the project page menu: + + ![Modrinth copy project ID](../img/modrinth-copy-project-id.png) + +!!! tip "Project Slug" + + The project slug is the part of the URL that follows `/mod/`, `/plugin/`, or `/datapack/`. For example: + + ``` https://modrinth.com/mod/fabric-api ---------- | +-- project slug - ``` - Also, a specific version (or release type) can be declared adding a colon and then the version id, version number/name, or release type after the project slug. The version ID or number can be found in the 'Metadata' section. Valid release types are `release`, `beta`, `alpha`. - - To select a datapack from a Modrinth project, prefix the entry with "datapack:". When running a vanilla server, this is optional since only datapacks will be available for vanilla servers to select. - - You can also reference a file containing project entries by prefixing the **container path** path with `@`. - - | Description | Example projects entry | - |---------------------------------|-------------------------------------------------------| - | Select latest version | `fabric-api` | - | Select specific version | `fabric-api:bQZpGIz0`
`fabric-api:0.119.2+1.21.4` | - | Select latest beta version | `fabric-api:beta` | - | Latest version using project ID | `P7dR8mSH` | - | Latest version of datapack | `datapack:terralith` | - | Specific version of datapack | `datapack:terralith:2.5.5` | - | Projects Listing File | `@/path/to/modrinth-mods.txt` | + ``` + +Also, a specific version (or release type) can be declared by adding a colon and then the version id, version number/name, or release type after the project slug. The version ID or number can be found in the 'Metadata' section. Valid release types are `release`, `beta`, `alpha`. + +To select a datapack from a Modrinth project, prefix the entry with "datapack:". When running a vanilla server, this is optional since only datapacks will be available for vanilla servers to select. + +You can also reference a file containing project entries by prefixing the **container path** path with `@`. + +### Examples + +| Description | Example projects entry | +|---------------------------------|-------------------------------------------------------| +| Select latest version | `fabric-api` | +| Select specific version | `fabric-api:bQZpGIz0`
`fabric-api:0.119.2+1.21.4` | +| Select latest beta version | `fabric-api:beta` | +| Latest version using project ID | `P7dR8mSH` | +| Latest version of datapack | `datapack:terralith` | +| Specific version of datapack | `datapack:terralith:2.5.5` | +| Projects Listing File | `@/path/to/modrinth-mods.txt` | + +### Notes !!! info "More about listing files" @@ -42,6 +60,14 @@ datapack:terralith ``` +!!! note "Auto-removal" + + Entries that are removed from the `MODRINTH_PROJECTS` list will be automatically removed from the `mods` or `plugins` directory. This is useful for removing mods/plugins that are no longer needed. An empty `MODRINTH_PROJECTS` list will remove all mods/plugins. + +!!! note "Disable processing" + + To temporarily disable processing of the `MODRINTH_PROJECTS` list, then comment out the `MODRINTH_PROJECTS` environment variable. + ## Version from Projects When the environment variable `VERSION_FROM_MODRINTH_PROJECTS` is set to "true" the Minecraft [`VERSION`](../versions/minecraft.md) will be automatically determined by looking at the most recent version of Minecraft that is supported by all the projects provided in `MODRINTH_PROJECTS`. diff --git a/scripts/start-setupModpack b/scripts/start-setupModpack index d948583f..d2d53c9f 100755 --- a/scripts/start-setupModpack +++ b/scripts/start-setupModpack @@ -3,10 +3,8 @@ set -e -o pipefail : "${REMOVE_OLD_MODS:=false}" -: "${MODS:=}" : "${MODS_OUT_DIR:=/data/mods}" : "${MODS_FILE:=}" -: "${PLUGINS:=}" : "${PLUGINS_OUT_DIR:=/data/plugins}" : "${PLUGINS_FILE:=}" : "${REMOVE_OLD_MODS_DEPTH:=1} " @@ -94,7 +92,7 @@ fi function handleListings() { if usesMods && usesPlugins; then - if [[ "$MODS" ]]; then + if [[ -v MODS ]]; then ensureRemoveAllModsOff "MODS is set" @@ -105,7 +103,7 @@ function handleListings() { --to="$MODS_OUT_DIR" \ "$MODS" fi - if [[ "$PLUGINS" ]]; then + if [[ -v PLUGINS ]]; then ensureRemoveAllModsOff "PLUGINS is set" mkdir -p "$PLUGINS_OUT_DIR" mc-image-helper mcopy \ @@ -140,14 +138,14 @@ function handleListings() { outDir="$PLUGINS_OUT_DIR" fi - if [[ "$MODS" || "$PLUGINS" ]]; then + if [[ -v MODS || -v PLUGINS ]]; then ensureRemoveAllModsOff "MODS or PLUGINS is set" mkdir -p "$outDir" mc-image-helper mcopy \ --glob=*.jar \ --scope=var-list \ --to="$outDir" \ - "$MODS" "$PLUGINS" + "${MODS:-}" "${PLUGINS:-}" fi if [[ "$MODS_FILE" || "$PLUGINS_FILE" ]]; then