itzg / itzg/docker-minecraft-server
Unable to install Forge versions on MC <1.6.1
Nobody has claimed this yet.
- Dominant language
- Shell
- Stars
- 14.3k
- Forks
- 1.9k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 31
Description
### Describe the problem
`mc-image-helper` is unable to install Forge for Minecraft versions 1.5.1 and below due to a dedicated "installer" file not being published, and unable to run version 1.5.2 due to different java invocation requirements
### Container definition
```bash
docker run --rm -it -e EULA=true -e TYPE=FORGE -e VERSION=1.5.1 -e DEBUG=true itzg/minecraft-server:java8
```
```
docker run --rm -it -e EULA=true -e TYPE=FORGE -e VERSION=1.5.2 -e DEBUG=true itzg/minecraft-server:java8
```
### Container logs
#### `1.5.1` container
```
++ mc-image-helper java-release
+ (( 8 >= 17 ))
+ export HOME=/data
+ HOME=/data
++ id -u
++ id -g
++ ls -lnd /data
+ log 'Running as uid=1000 gid=1000 with /data as '\''drwxr-xr-x 2 1000 1000 4096 Jan 13 02:57 /data'\'''
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:50:36+00:00 Running as uid=1000 gid=1000 with /data as 'drwxr-xr-x 2 1000 1000 4096 Jan 13 02:57 /data'
++ paste -d, -s /etc/image.properties
+ log 'Image info: buildtime=2026-01-13T02:57:04.620Z,version=java8,revision=0a98bee40ea9b86500ea7b6611784902a553803f'
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:50:36+00:00 Image info: buildtime=2026-01-13T02:57:04.620Z,version=java8,revision=0a98bee40ea9b86500ea7b6611784902a553803f
+ '[' '!' -e /data/eula.txt ']'
+ isTrue true
+ case "${1,,}" in
+ return 0
+ writeEula
++ date
+ echo '# Generated via Docker
# Tue 13 Jan 2026 11:50:36 AM UTC
eula=true
'
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue true
+ case "${1,,}" in
+ return 0
+ set +x
+ isTrue false
+ case "${1,,}" in
+ return 1
+ proxyArgs=()
+ [[ -n '' ]]
+ proxyArgs=()
+ addToProxyArgs http.proxyHost ''
+ [[ -n '' ]]
+ addToProxyArgs http.proxyPort ''
+ [[ -n '' ]]
+ addToProxyArgs http.nonProxyHosts ''
+ [[ -n '' ]]
+ export 'MC_IMAGE_HELPER_OPTS+= '
+ MC_IMAGE_HELPER_OPTS+=' '
+ fixJavaPath
+ which java
+ cd /data
+ export DECLARED_TYPE=FORGE
+ DECLARED_TYPE=FORGE
+ export DECLARED_VERSION=1.5.1
+ DECLARED_VERSION=1.5.1
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ : ''
+ [[ -n '' ]]
+ case "${TYPE^^}" in
+ [[ -n '' ]]
+ log 'Resolving type given FORGE'
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:50:36+00:00 Resolving type given FORGE
+ case "${TYPE^^}" in
++ dirname /image/scripts/start-configuration
+ exec /image/scripts/start-deployForge
+ resultsFile=/data/.run-forge.env
+ [[ -n '' ]]
+ [[ -n '' ]]
+ mc-image-helper-forge --forge-version=RECOMMENDED
+ mc-image-helper install-forge --output-directory=/data --results-file=/data/.run-forge.env --minecraft-version=1.5.1 --force-reinstall=false --forge-version=RECOMMENDED
[mc-image-helper] 11:50:37.147 DEBUG : Using HTTP/1.1
[mc-image-helper] 11:50:37.797 DEBUG : JSON FETCH: uri=https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json headers=[user-agent: itzg/mc-image-helper/1.51.1 (cmd=install-forge), x-fetch-session: bb484412-7144-48ba-87c5-c04a64725a70, accept: application/json, host: files.minecraftforge.net]
[mc-image-helper] 11:50:38.077 DEBUG : Narrowed forge versions to {latest=7.7.2.682} and looking for recommended
[mc-image-helper] 11:50:38.077 DEBUG : Resolved installer version=VersionPair(minecraft=1.5.1, forge=7.7.2.682, variantOverride=null)
[mc-image-helper] 11:50:38.078 INFO : Downloading Forge installer 7.7.2.682 for Minecraft 1.5.1
[mc-image-helper] 11:50:38.131 DEBUG : FILE FETCH: uri=https://maven.minecraftforge.net/net/minecraftforge/forge/1.5.1-7.7.2.682/forge-1.5.1-7.7.2.682-installer.jar headers=[user-agent: itzg/mc-image-helper/1.51.1 (cmd=install-forge), x-fetch-session: bb484412-7144-48ba-87c5-c04a64725a70, accept: application/java-archive, host: maven.minecraftforge.net]
[mc-image-helper] 11:50:39.166 DEBUG : FILE FETCH: uri=https://maven.minecraftforge.net/net/minecraftforge/forge/1.5.1-7.7.2.682-1.5.1/forge-1.5.1-7.7.2.682-1.5.1-installer.jar headers=[user-agent: itzg/mc-image-helper/1.51.1 (cmd=install-forge), x-fetch-session: bb484412-7144-48ba-87c5-c04a64725a70, accept: application/java-archive, host: maven.minecraftforge.net]
[mc-image-helper] 11:50:40.193 DEBUG : FILE FETCH: uri=https://maven.minecraftforge.net/net/minecraftforge/forge/1.5.1-7.7.2.682-mc172/forge-1.5.1-7.7.2.682-mc172-installer.jar headers=[user-agent: itzg/mc-image-helper/1.51.1 (cmd=install-forge), x-fetch-session: bb484412-7144-48ba-87c5-c04a64725a70, accept: application/java-archive, host: maven.minecraftforge.net]
[mc-image-helper] 11:50:41.208 ERROR : 'install-forge' command failed. Version is 1.51.1
me.itzg.helpers.errors.GenericException: Failed to locate forge installer for Minecraft 1.5.1 Forge 7.7.2.682
at me.itzg.helpers.forge.ForgeInstallerResolver.download(ForgeInstallerResolver.java:106)
at me.itzg.helpers.forge.ForgeLikeInstaller.install(ForgeLikeInstaller.java:93)
at me.itzg.helpers.forge.InstallForgeCommand.call(InstallForgeCommand.java:110)
at me.itzg.helpers.forge.InstallForgeCommand.call(InstallForgeCommand.java:19)
at picocli.CommandLine.executeUserObject(CommandLine.java:2031)
at picocli.CommandLine.access$1500(CommandLine.java:148)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2469)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2461)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2423)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
at picocli.CommandLine$RunLast.execute(CommandLine.java:2425)
at picocli.CommandLine.execute(CommandLine.java:2174)
at me.itzg.helpers.McImageHelper.main(McImageHelper.java:176)
+ logError 'Failed to install Forge'
+ isDebugging
+ isTrue true
+ case "${1,,}" in
+ return 0
+ set +x
[init] 2026-01-13 11:50:41+00:00 [ERROR] Failed to install Forge
+ exit 1
```
#### `1.5.2` container
```
++ mc-image-helper java-release
+ (( 8 >= 17 ))
+ export HOME=/data
+ HOME=/data
++ id -u
++ id -g
++ ls -lnd /data
+ log 'Running as uid=1000 gid=1000 with /data as '\''drwxr-xr-x 2 1000 1000 4096 Jan 13 02:57 /data'\'''
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:47:43+00:00 Running as uid=1000 gid=1000 with /data as 'drwxr-xr-x 2 1000 1000 4096 Jan 13 02:57 /data'
++ paste -d, -s /etc/image.properties
+ log 'Image info: buildtime=2026-01-13T02:57:04.620Z,version=java8,revision=0a98bee40ea9b86500ea7b6611784902a553803f'
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:47:43+00:00 Image info: buildtime=2026-01-13T02:57:04.620Z,version=java8,revision=0a98bee40ea9b86500ea7b6611784902a553803f
+ '[' '!' -e /data/eula.txt ']'
+ isTrue true
+ case "${1,,}" in
+ return 0
+ writeEula
++ date
+ echo '# Generated via Docker
# Tue 13 Jan 2026 11:47:43 AM UTC
eula=true
'
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue true
+ case "${1,,}" in
+ return 0
+ set +x
+ isTrue false
+ case "${1,,}" in
+ return 1
+ proxyArgs=()
+ [[ -n '' ]]
+ proxyArgs=()
+ addToProxyArgs http.proxyHost ''
+ [[ -n '' ]]
+ addToProxyArgs http.proxyPort ''
+ [[ -n '' ]]
+ addToProxyArgs http.nonProxyHosts ''
+ [[ -n '' ]]
+ export 'MC_IMAGE_HELPER_OPTS+= '
+ MC_IMAGE_HELPER_OPTS+=' '
+ fixJavaPath
+ which java
+ cd /data
+ export DECLARED_TYPE=FORGE
+ DECLARED_TYPE=FORGE
+ export DECLARED_VERSION=1.5.2
+ DECLARED_VERSION=1.5.2
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ : ''
+ [[ -n '' ]]
+ case "${TYPE^^}" in
+ [[ -n '' ]]
+ log 'Resolving type given FORGE'
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:47:43+00:00 Resolving type given FORGE
+ case "${TYPE^^}" in
++ dirname /image/scripts/start-configuration
+ exec /image/scripts/start-deployForge
+ resultsFile=/data/.run-forge.env
+ [[ -n '' ]]
+ [[ -n '' ]]
+ mc-image-helper-forge --forge-version=RECOMMENDED
+ mc-image-helper install-forge --output-directory=/data --results-file=/data/.run-forge.env --minecraft-version=1.5.2 --force-reinstall=false --forge-version=RECOMMENDED
[mc-image-helper] 11:47:43.729 DEBUG : Using HTTP/1.1
[mc-image-helper] 11:47:44.407 DEBUG : JSON FETCH: uri=https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json headers=[user-agent: itzg/mc-image-helper/1.51.1 (cmd=install-forge), x-fetch-session: 6054b35b-ff8e-402b-b732-1c451447ef44, accept: application/json, host: files.minecraftforge.net]
[mc-image-helper] 11:47:44.697 DEBUG : Narrowed forge versions to {recommended=7.8.1.738, latest=7.8.1.738} and looking for recommended
[mc-image-helper] 11:47:44.697 DEBUG : Resolved installer version=VersionPair(minecraft=1.5.2, forge=7.8.1.738, variantOverride=null)
[mc-image-helper] 11:47:44.697 INFO : Downloading Forge installer 7.8.1.738 for Minecraft 1.5.2
[mc-image-helper] 11:47:44.764 DEBUG : FILE FETCH: uri=https://maven.minecraftforge.net/net/minecraftforge/forge/1.5.2-7.8.1.738/forge-1.5.2-7.8.1.738-installer.jar headers=[user-agent: itzg/mc-image-helper/1.51.1 (cmd=install-forge), x-fetch-session: 6054b35b-ff8e-402b-b732-1c451447ef44, accept: application/java-archive, host: maven.minecraftforge.net]
[mc-image-helper] 11:47:45.160 DEBUG : Download of https://maven.minecraftforge.net/net/minecraftforge/forge/1.5.2-7.8.1.738/forge-1.5.2-7.8.1.738-installer.jar took 455ms at 5820 KB/s
[mc-image-helper] 11:47:45.162 DEBUG : Moving /data/forge-installer-1.5.2-7.8.1.738.jar.download to /data/forge-installer-1.5.2-7.8.1.738.jar
[mc-image-helper] 11:47:45.164 INFO : Running Forge 7.8.1.738 installer for Minecraft 1.5.2. This might take a while...
[mc-image-helper] 11:47:51.562 DEBUG : Observed entry file from universal jar log line: /data/minecraftforge-universal-1.5.2-7.8.1.738.jar
[mc-image-helper] 11:47:51.574 DEBUG : Deleting Forge installer log at /data/forge-installer-1.5.2-7.8.1.738.jar.log
[mc-image-helper] 11:47:51.598 DEBUG : Populating results file /data/.run-forge.env
[mc-image-helper] 11:47:51.599 DEBUG : Writing SERVER="minecraftforge-universal-1.5.2-7.8.1.738.jar" to results file
[mc-image-helper] 11:47:51.599 DEBUG : Writing FAMILY="FORGE" to results file
[mc-image-helper] 11:47:51.599 DEBUG : Writing VERSION="1.5.2" to results file
[mc-image-helper] 11:47:51.599 DEBUG : Writing TYPE="FORGE" to results file
+ applyResultsFile /data/.run-forge.env
+ set -a
+ source /data/.run-forge.env
++ SERVER=minecraftforge-universal-1.5.2-7.8.1.738.jar
++ FAMILY=FORGE
++ VERSION=1.5.2
++ TYPE=FORGE
+ set +a
+ export FAMILY=FORGE
+ FAMILY=FORGE
++ dirname /image/scripts/start-deployForge
+ exec /image/scripts/start-setupWorld
+ worldDownload=/data/tmp/world.zip
+ tmpWorldData=/data/tmp/world-data
+ [[ world =~ ^/.*$ ]]
+ '[' FORGE = CURSEFORGE ']'
+ worldDest=/data/world
+ [[ -n '' ]]
+ [[ -f /data/tmp/world.zip ]]
+ [[ -d /data/tmp/world-data ]]
++ dirname /image/scripts/start-setupWorld
+ exec /image/scripts/start-setupDatapack
+ out_dir=/data/world/datapacks
+ isTrue false
+ case "${1,,}" in
+ return 1
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
++ dirname /image/scripts/start-setupDatapack
+ exec /image/scripts/start-setupModpack
+ CURSE_URL_BASE=https://minecraft.curseforge.com/projects
+ isTrue false
+ case "${1,,}" in
+ return 1
+ handlePackwiz
+ [[ -n '' ]]
+ handleModpackZip
+ [[ -n '' ]]
+ handleListings
+ usesMods
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 0
+ usesPlugins
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 1
+ usesPlugins
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 1
+ usesMods
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 0
+ outDir=/data/mods
+ usesPlugins
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 1
+ [[ -v MODS ]]
+ [[ -v PLUGINS ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ handleGenericPacks
+ : ''
+ : ''
+ : ''
+ : ''
+ [[ -n '' ]]
+ handleModrinthProjects
+ : release
+ : none
+ [[ -v MODRINTH_DOWNLOAD_OPTIONAL_DEPENDENCIES ]]
+ [[ -v MODRINTH_PROJECTS ]]
+ usesMods
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 0
+ handleCurseForgeFiles
+ args=()
+ usesMods
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 0
+ usesPlugins
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 1
+ args+=(--default-category mc-mods)
+ case "${TYPE,,}" in
+ args+=(--mod-loader "$TYPE")
+ mc-image-helper curseforge-files --default-category mc-mods --mod-loader FORGE ''
+ [[ -n '' ]]
++ dirname /image/scripts/start-setupModpack
+ exec /image/scripts/start-setupMounts
+ isTrue true
+ case "${1,,}" in
+ return 0
+ updateArg=--skip-newer-in-destination
+ isTrue true
+ case "${1,,}" in
+ return 0
+ subcommand=sync-and-interpolate
+ : /plugins
+ : /data/plugins
+ usesPlugins
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 1
+ : /mods
+ : /data/mods
+ usesMods
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ case "$FAMILY" in
+ return 0
+ log 'Copying any mods from /mods to /data/mods'
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:47:52+00:00 Copying any mods from /mods to /data/mods
+ mc-image-helper-mounts /mods /data/mods
+ mc-image-helper sync-and-interpolate --skip-newer-in-destination --replace-env-file-suffixes=yml,yaml,txt,cfg,conf,properties,hjson,json,tml,toml --replace-env-excludes= --replace-env-exclude-paths= --replace-env-prefix=CFG_ /mods /data/mods
[mc-image-helper] 11:47:53.158 DEBUG : Configured with SyncAndInterpolate(skipNewerInDestination=true, replaceEnv=ReplaceEnvOptions(prefix=CFG_, excludes=[], excludePaths=[], suffixes=[yml, yaml, txt, cfg, conf, properties, hjson, json, tml, toml]), srcDest=[/mods, /data/mods])
[mc-image-helper] 11:47:53.162 DEBUG : Skipping missing source directory /mods
+ : /config
+ : /data/config
+ log 'Copying any configs from /config to /data/config'
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:47:53+00:00 Copying any configs from /config to /data/config
+ mc-image-helper-mounts /config /data/config
+ mc-image-helper sync-and-interpolate --skip-newer-in-destination --replace-env-file-suffixes=yml,yaml,txt,cfg,conf,properties,hjson,json,tml,toml --replace-env-excludes= --replace-env-exclude-paths= --replace-env-prefix=CFG_ /config /data/config
[mc-image-helper] 11:47:53.724 DEBUG : Configured with SyncAndInterpolate(skipNewerInDestination=true, replaceEnv=ReplaceEnvOptions(prefix=CFG_, excludes=[], excludePaths=[], suffixes=[yml, yaml, txt, cfg, conf, properties, hjson, json, tml, toml]), srcDest=[/config, /data/config])
[mc-image-helper] 11:47:53.730 DEBUG : Skipping missing source directory /config
++ dirname /image/scripts/start-setupMounts
+ exec /image/scripts/start-setupServerProperties
[init] 2026-01-13 11:47:53+00:00 Creating server properties in /data/server.properties
[init] 2026-01-13 11:47:53+00:00 Disabling whitelist functionality
+ mc-image-helper set-properties --definitions /image/property-definitions.json --escape-unicode /data/server.properties
[mc-image-helper] 11:47:54.330 DEBUG : Setting property enable-rcon to new value 'true'
[mc-image-helper] 11:47:54.332 DEBUG : Setting property rcon.password to new value '***'
[mc-image-helper] 11:47:54.332 DEBUG : Setting property rcon.port to new value '25575'
[mc-image-helper] 11:47:54.332 DEBUG : Setting property white-list to new value 'false'
[mc-image-helper] 11:47:54.332 INFO : Created/updated 4 properties in /data/server.properties
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
++ dirname /image/scripts/start-setupServerProperties
+ exec /image/scripts/start-setupEnvVariables
+ : false
+ : /data
+ : yml,yaml,txt,cfg,conf,properties,hjson,json,tml,toml
+ : CFG_
+ : ''
+ : ''
+ : ''
+ : true
+ : ''
+ : ''
+ : false
+ : ''
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isFalse false
+ case "${1,,}" in
+ return 0
+ commonArgs=(--skip-existing --skip-up-to-date=false --quiet-when-skipped --ignore-missing-sources)
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
++ dirname /image/scripts/start-setupEnvVariables
+ exec /image/scripts/start-setupRbac
+ [[ -v APPEND_OPS ]]
+ [[ -v OVERRIDE_OPS ]]
+ [[ -v APPEND_WHITELIST ]]
+ [[ -v OVERRIDE_WHITELIST ]]
+ sharedArgs=(--version="$VERSION")
+ [[ -n '' ]]
+ sharedArgs+=(--output-directory=/data)
+ [[ -v OPS_FILE ]]
+ [[ -v OPS ]]
+ [[ -v WHITELIST_FILE ]]
+ [[ -v WHITELIST ]]
++ dirname /image/scripts/start-setupRbac
+ exec /image/scripts/start-finalExec
+ baseDataDir=/data
+ tmpServerIconPath=/tmp/icon.img
+ serverIconPath=/data/server-icon.png
+ mcHealthEnvPath=/data/.mc-health.env
+ bootstrapPath=/data/bootstrap.txt
+ '[' -n '' ']'
+ useGeneratedLogs=false
+ useFallbackJvmFlag=false
+ SERVER_DIR=/data
+ [[ -n '' ]]
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
+ false
+ versionLessThan 1.7
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
+ compare_version 1.5.2 lt 1.7
+ local left_version=1.5.2
+ local comparison=lt
+ local right_version=1.7
+ [[ -z 1.5.2 ]]
+ [[ -z 1.7 ]]
+ [[ 1.5.2 == a* ]]
+ [[ 1.5.2 == b* ]]
+ left_version_channel=3
+ [[ 1.7 == a* ]]
+ [[ 1.7 == b* ]]
+ right_version_channel=3
+ [[ lt == \l\t ]]
+ [[ 3 < 3 ]]
+ [[ lt == \l\t ]]
+ [[ 3 > 3 ]]
+ [[ lt == \g\t ]]
+ [[ lt == \g\t ]]
+ [[ lt == \l\e ]]
+ [[ lt == \l\e ]]
+ [[ lt == \g\e ]]
+ [[ lt == \g\e ]]
+ [[ lt == \e\q ]]
+ local result=1
+ case $comparison in
++ echo -e '1.5.2\n1.7'
++ sort -V
++ head -n1
+ [[ 1.5.2 == \1\.\5\.\2 ]]
+ [[ 1.5.2 != \1\.\7 ]]
+ result=0
+ return 0
+ :
+ LOGFILE=/data/log4j2.xml
+ false
+ rm -f /data/log4j2.xml
+ versionLessThan 1.14
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
+ compare_version 1.5.2 lt 1.14
+ local left_version=1.5.2
+ local comparison=lt
+ local right_version=1.14
+ [[ -z 1.5.2 ]]
+ [[ -z 1.14 ]]
+ [[ 1.5.2 == a* ]]
+ [[ 1.5.2 == b* ]]
+ left_version_channel=3
+ [[ 1.14 == a* ]]
+ [[ 1.14 == b* ]]
+ right_version_channel=3
+ [[ lt == \l\t ]]
+ [[ 3 < 3 ]]
+ [[ lt == \l\t ]]
+ [[ 3 > 3 ]]
+ [[ lt == \g\t ]]
+ [[ lt == \g\t ]]
+ [[ lt == \l\e ]]
+ [[ lt == \l\e ]]
+ [[ lt == \g\e ]]
+ [[ lt == \g\e ]]
+ [[ lt == \e\q ]]
+ local result=1
+ case $comparison in
++ echo -e '1.5.2\n1.14'
++ sort -V
++ head -n1
+ [[ 1.5.2 == \1\.\5\.\2 ]]
+ [[ 1.5.2 != \1\.\1\4 ]]
+ result=0
+ return 0
+ [[ '' = false ]]
+ [[ '' = false ]]
+ expandedDOpts=
+ '[' -n '' ']'
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ : false
+ : false
+ : false
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ isType GTNH
+ for t in "${@}"
+ [[ FORGE == \G\T\N\H ]]
+ return 1
+ [[ -n 1G ]]
+ log 'Setting initial memory to 1G and max to 1G'
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:47:54+00:00 Setting initial memory to 1G and max to 1G
+ isPercentage 1G
+ local value=1G
+ [[ 1G =~ ^[0-9]+(\.[0-9]+)?s*%$ ]]
+ [[ -n 1G ]]
+ JVM_OPTS='-Xms1G '
+ isPercentage 1G
+ local value=1G
+ [[ 1G =~ ^[0-9]+(\.[0-9]+)?s*%$ ]]
+ [[ -n 1G ]]
+ JVM_OPTS='-Xmx1G -Xms1G '
+ versionLessThan b1.8
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
+ compare_version 1.5.2 lt b1.8
+ local left_version=1.5.2
+ local comparison=lt
+ local right_version=b1.8
+ [[ -z 1.5.2 ]]
+ [[ -z b1.8 ]]
+ [[ 1.5.2 == a* ]]
+ [[ 1.5.2 == b* ]]
+ left_version_channel=3
+ [[ b1.8 == a* ]]
+ [[ b1.8 == b* ]]
+ right_version=1.8
+ right_version_channel=2
+ [[ lt == \l\t ]]
+ [[ 3 < 2 ]]
+ [[ lt == \l\t ]]
+ [[ 3 > 2 ]]
+ return 1
+ versionLessThan 1.3
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
+ compare_version 1.5.2 lt 1.3
+ local left_version=1.5.2
+ local comparison=lt
+ local right_version=1.3
+ [[ -z 1.5.2 ]]
+ [[ -z 1.3 ]]
+ [[ 1.5.2 == a* ]]
+ [[ 1.5.2 == b* ]]
+ left_version_channel=3
+ [[ 1.3 == a* ]]
+ [[ 1.3 == b* ]]
+ right_version_channel=3
+ [[ lt == \l\t ]]
+ [[ 3 < 3 ]]
+ [[ lt == \l\t ]]
+ [[ 3 > 3 ]]
+ [[ lt == \g\t ]]
+ [[ lt == \g\t ]]
+ [[ lt == \l\e ]]
+ [[ lt == \l\e ]]
+ [[ lt == \g\e ]]
+ [[ lt == \g\e ]]
+ [[ lt == \e\q ]]
+ local result=1
+ case $comparison in
++ echo -e '1.5.2\n1.3'
++ sort -V
++ head -n1
+ [[ 1.3 == \1\.\5\.\2 ]]
+ return 1
+ versionLessThan 1.7
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
+ compare_version 1.5.2 lt 1.7
+ local left_version=1.5.2
+ local comparison=lt
+ local right_version=1.7
+ [[ -z 1.5.2 ]]
+ [[ -z 1.7 ]]
+ [[ 1.5.2 == a* ]]
+ [[ 1.5.2 == b* ]]
+ left_version_channel=3
+ [[ 1.7 == a* ]]
+ [[ 1.7 == b* ]]
+ right_version_channel=3
+ [[ lt == \l\t ]]
+ [[ 3 < 3 ]]
+ [[ lt == \l\t ]]
+ [[ 3 > 3 ]]
+ [[ lt == \g\t ]]
+ [[ lt == \g\t ]]
+ [[ lt == \l\e ]]
+ [[ lt == \l\e ]]
+ [[ lt == \g\e ]]
+ [[ lt == \g\e ]]
+ [[ lt == \e\q ]]
+ local result=1
+ case $comparison in
++ echo -e '1.5.2\n1.7'
++ sort -V
++ head -n1
+ [[ 1.5.2 == \1\.\5\.\2 ]]
+ [[ 1.5.2 != \1\.\7 ]]
+ result=0
+ return 0
+ echo '
MC_HEALTH_EXTRA_ARGS=(
--use-server-list-ping
)
'
+ mcServerRunnerArgs=(--stop-duration "${STOP_DURATION:-60}s")
+ isTrue false
+ case "${1,,}" in
+ return 1
+ [[ -n '' ]]
+ isTrue ''
+ case "${1,,}" in
+ return 1
+ [[ FORGE == \C\U\R\S\E\F\O\R\G\E ]]
+ [[ FORGE == \C\U\R\S\E\F\O\R\G\E ]]
+ [[ minecraftforge-universal-1.5.2-7.8.1.738.jar =~ run.sh ]]
+ '[' -f /data/bootstrap.txt ']'
+ log 'Starting the Minecraft server...'
+ local oldState
++ shopt -po xtrace
+ oldState='set -o xtrace'
+ shopt -u -o xtrace
[init] 2026-01-13 11:47:54+00:00 Starting the Minecraft server...
+ finalArgs=($JVM_XX_OPTS $JVM_OPTS $expandedDOpts)
+ [[ -n '' ]]
+ finalArgs+=(-jar "$SERVER")
+ finalArgs+=("$@" $EXTRA_ARGS)
+ isTrue false
+ case "${1,,}" in
+ return 1
+ isTrue false
+ case "${1,,}" in
+ return 1
+ exec mc-server-runner --stop-duration 60s java -Xmx1G -Xms1G -jar minecraftforge-universal-1.5.2-7.8.1.738.jar
Error: Could not find or load main class net.minecraft.server.MinecraftServer
```
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the two container commands and start with ForgeInstallerResolver.java, ForgeLikeInstaller.java, and InstallForgeCommand.java from the stack trace. Compare the legacy Forge installer download and launch behavior for Minecraft 1.5.1 and 1.5.2; done means both versions install and start successfully through the shown Docker configuration.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, java, shell
- Domain
- devops, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100