218 lines
8.5 KiB
YAML

_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
meta:
version: PLCN_v2
update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/minecraft/egg-forge-minecraft.yaml'
exported_at: '2025-07-25T13:32:25+00:00'
name: 'Forge Minecraft'
author: panel@example.com
uuid: ed072427-f209-4603-875c-f540c6dd5a65
description: |-
Minecraft Forge Server. Minecraft Forge is a modding API (Application Programming Interface), which
makes it easier to create mods, and also make sure mods are compatible with each other.
tags:
- minecraft
features:
- eula
- java_version
- pid_limit
docker_images:
'Java 21': 'ghcr.io/parkervcp/yolks:java_21'
'Java 17': 'ghcr.io/parkervcp/yolks:java_17'
'Java 16': 'ghcr.io/parkervcp/yolks:java_16'
'Java 11': 'ghcr.io/parkervcp/yolks:java_11'
'Java 8': 'ghcr.io/parkervcp/yolks:java_8'
file_denylist: { }
startup: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true $( [[ ! -f unix_args.txt ]] && printf %s "-jar {{SERVER_JARFILE}}" || printf %s "@unix_args.txt" )'
config:
files:
server.properties:
parser: properties
find:
server-ip: 0.0.0.0
server-port: '{{server.allocations.default.port}}'
query.port: '{{server.allocations.default.port}}'
startup:
done: ')! For help, type '
logs: { }
stop: stop
scripts:
installation:
script: |-
#!/bin/bash
# Forge Installation Script
#
# Server Files: /mnt/server
apt update
apt install -y curl jq
if [[ ! -d /mnt/server ]]; then
mkdir /mnt/server
fi
cd /mnt/server
# Remove spaces from the version number to avoid issues with curl
FORGE_VERSION="$(echo "$FORGE_VERSION" | tr -d ' ')"
MC_VERSION="$(echo "$MC_VERSION" | tr -d ' ')"
if [[ ! -z ${FORGE_VERSION} ]]; then
DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}
FORGE_JAR=forge-${FORGE_VERSION}*.jar
else
JSON_DATA=$(curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json)
if [[ "${MC_VERSION}" == "latest" ]] || [[ "${MC_VERSION}" == "" ]]; then
echo -e "getting latest version of forge."
MC_VERSION=$(echo -e ${JSON_DATA} | jq -r '.promos | del(."latest-1.7.10") | del(."1.7.10-latest-1.7.10") | to_entries[] | .key | select(contains("latest")) | split("-")[0]' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -1)
BUILD_TYPE=latest
fi
if [[ "${BUILD_TYPE}" != "recommended" ]] && [[ "${BUILD_TYPE}" != "latest" ]]; then
BUILD_TYPE=recommended
fi
echo -e "minecraft version: ${MC_VERSION}"
echo -e "build type: ${BUILD_TYPE}"
## some variables for getting versions and things
FILE_SITE=https://maven.minecraftforge.net/net/minecraftforge/forge/
VERSION_KEY=$(echo -e ${JSON_DATA} | jq -r --arg MC_VERSION "${MC_VERSION}" --arg BUILD_TYPE "${BUILD_TYPE}" '.promos | del(."latest-1.7.10") | del(."1.7.10-latest-1.7.10") | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains($BUILD_TYPE))')
## locating the forge version
if [[ "${VERSION_KEY}" == "" ]] && [[ "${BUILD_TYPE}" == "recommended" ]]; then
echo -e "dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested."
VERSION_KEY=$(echo -e ${JSON_DATA} | jq -r --arg MC_VERSION "${MC_VERSION}" '.promos | del(."latest-1.7.10") | del(."1.7.10-latest-1.7.10") | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains("latest"))')
fi
## Error if the mc version set wasn't valid.
if [ "${VERSION_KEY}" == "" ] || [ "${VERSION_KEY}" == "null" ]; then
echo -e "The install failed because there is no valid version of forge for the version of minecraft selected."
exit 1
fi
FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY "$VERSION_KEY" '.promos | .[$VERSION_KEY]')
if [[ "${MC_VERSION}" == "1.7.10" ]] || [[ "${MC_VERSION}" == "1.8.9" ]]; then
DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}
FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar
if [[ "${MC_VERSION}" == "1.7.10" ]]; then
FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar
fi
else
DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}
FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}.jar
fi
fi
#Adding .jar when not eding by SERVER_JARFILE
if [[ ! $SERVER_JARFILE = *\.jar ]]; then
SERVER_JARFILE="$SERVER_JARFILE.jar"
fi
#Downloading jars
echo -e "Downloading forge version ${FORGE_VERSION}"
echo -e "Download link is ${DOWNLOAD_LINK}"
if [[ ! -z "${DOWNLOAD_LINK}" ]]; then
if curl --output /dev/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then
echo -e "installer jar download link is valid."
else
echo -e "link is invalid. Exiting now"
exit 2
fi
else
echo -e "no download link provided. Exiting now"
exit 3
fi
curl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar
#Checking if downloaded jars exist
if [[ ! -f ./installer.jar ]]; then
echo "!!! Error downloading forge version ${FORGE_VERSION} !!!"
exit
fi
function unix_args {
echo -e "Detected Forge 1.17 or newer version. Setting up forge unix args."
ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt
}
# Delete args to support downgrading/upgrading
rm -rf libraries/net/minecraftforge/forge
rm unix_args.txt
#Installing server
echo -e "Installing forge server.
"
java -jar installer.jar --installServer || { echo -e "
Install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.
Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Daemon config or specify exact allocated memory in the server Build Configuration instead of 0!
Otherwise, the Forge installer will not have enough memory."; exit 4; }
# Check if we need a symlink for 1.17+ Forge JPMS args
if [[ $MC_VERSION =~ ^1\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\.(17|18|19|20|21|22|23) ]]; then
unix_args
# Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives
elif [[ $MC_VERSION == "latest" && $FORGE_VERSION =~ ^1\.(17|18|19|20|21|22|23) ]]; then
unix_args
else
# For versions below 1.17 that ship with jar
mv $FORGE_JAR $SERVER_JARFILE
fi
echo -e "Deleting installer.jar file.
"
rm -rf installer.jar
echo -e "Installation process is completed"
container: 'openjdk:8-jdk-slim'
entrypoint: bash
variables:
-
name: 'Build Type'
description: "The type of server jar to download from forge.\r\n\r\nValid types are \"recommended\" and \"latest\"."
env_variable: BUILD_TYPE
default_value: recommended
user_viewable: true
user_editable: true
rules:
- required
- string
- 'in:recommended,latest'
sort: 3
-
name: 'Forge Version'
description: "The full exact version.\r\n\r\nEx. 1.15.2-31.2.4\r\n\r\nOverrides MC_VERSION and BUILD_TYPE. If it fails to download the server files it will fail to\ninstall."
env_variable: FORGE_VERSION
default_value: ''
user_viewable: true
user_editable: true
rules:
- nullable
- 'regex:/^[0-9\.\-]+$/'
sort: 4
-
name: 'Minecraft Version'
description: "The version of minecraft you want to install for.\r\n\r\nLeaving latest will install the latest recommended version."
env_variable: MC_VERSION
default_value: latest
user_viewable: true
user_editable: true
rules:
- required
- string
- 'max:9'
sort: 2
-
name: 'Server Jar File'
description: 'The name of the Jarfile to use when running Forge version below 1.17.'
env_variable: SERVER_JARFILE
default_value: server.jar
user_viewable: true
user_editable: true
rules:
- required
- 'regex:/^([\w\d._-]+)(\.jar)$/'
sort: 1