NeoForge Server. NeoForge is a modding API (Application Programming Interface), which makes it easier to create mods, and also make sure mods are compatible with each other. NeoForge is a fork of Minecraft Forge.
NeoForge is a fork of Minecraft Forge for versions 1.20.1 or newer. The install script is based on the official Forge install script.
The egg supports downloading NeoForge for the latest or a specified Minecraft version, as well as downloading a specific NeoForge version.
The Minecraft server requires a single port for access (default 25565), but plugins may require extra ports to enabled for the server.
Port | Default |
---|---|
Minecraft | 25565 |
Name | Tag |
---|---|
Java 17 | ghcr.io/ptero-eggs/yolks:java_17 |
java 21 | ghcr.io/ptero-eggs/yolks:java_21 |
java 22 | ghcr.io/ptero-eggs/yolks:java_22 |
Name | Description | Environment Variable | Default Value | User Viewable | User Editable |
---|---|---|---|---|---|
Minecraft Version | The version of Minecraft you want to install for. Leaving latest will install the latest version. | MC_VERSION | latest | Yes | Yes |
NeoForge Version | The full exact version. Ex. 20.4.194 https://projects.neoforged.net/neoforged/neoforge If it fails to download the server files it will fail to install. | NEOFORGE_VERSION | Yes | Yes |
#!/bin/bash
# NeoForge Installation Script
#
# Server Files: /mnt/server
apt-get update
apt-get install -y curl xq openjdk-17-jdk
if [[ ! -d /mnt/server ]]; then
mkdir /mnt/server
fi
cd /mnt/server
# Remove spaces from the version number to avoid issues with curl
NEOFORGE_VERSION="$(echo "$NEOFORGE_VERSION" | tr -d ' ')"
MC_VERSION="$(echo "$MC_VERSION" | tr -d ' ')"
# If we have a specific NeoForge version set, use that
if [[ ! -z ${NEOFORGE_VERSION} ]]; then
if [[ "${NEOFORGE_VERSION}" =~ "1.20.1-" ]]; then
ARTIFACT_NAME="forge"
else
ARTIFACT_NAME="neoforge"
fi
BASE_URL="https://maven.neoforged.net/releases/net/neoforged/${ARTIFACT_NAME}/${NEOFORGE_VERSION}/"
echo "Fetching file list from: ${BASE_URL}"
FILE_LIST=$(curl -s "${BASE_URL}" | grep -oP 'href="[^"]+"' | cut -d'"' -f2)
INSTALLER_JAR=$(echo "$FILE_LIST" | grep -E "${ARTIFACT_NAME}-${NEOFORGE_VERSION}.*installer.*\.jar$" | head -n1)
if [[ -z "$INSTALLER_JAR" ]]; then
INSTALLER_JAR=$(echo "$FILE_LIST" | grep -E "${ARTIFACT_NAME}-${NEOFORGE_VERSION}.*universal.*\.jar$" | head -n1)
fi
if [[ -z "$INSTALLER_JAR" ]]; then
echo "Could not find a valid JAR file for NeoForge version ${NEOFORGE_VERSION}."
exit 1
fi
echo "Downloading ${INSTALLER_JAR}..."
curl -o "${INSTALLER_JAR}" "${BASE_URL}${INSTALLER_JAR}"
else
if [[ "${MC_VERSION}" == "1.20.1" ]]; then
XML_DATA=$(curl -sSL https://maven.neoforged.net/releases/net/neoforged/forge/maven-metadata.xml)
ARTIFACT_NAME="forge"
NEOFORGE_OLD=1
else
XML_DATA=$(curl -sSL https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml)
ARTIFACT_NAME="neoforge"
fi
REPO_URL="https://maven.neoforged.net/releases/net/neoforged/${ARTIFACT_NAME}/"
if [[ "${MC_VERSION}" == "latest" ]] || [[ "${MC_VERSION}" == "" ]]; then
echo "Getting latest version of NeoForge."
MC_VERSION="1.$(echo -e ${XML_DATA} | xq -x '/metadata/versioning/release' | cut -d'.' -f1-2)"
fi
echo "Minecraft version: ${MC_VERSION}"
if [[ -z "${NEOFORGE_OLD}" ]]; then
VERSION_KEY=$(echo -n ${MC_VERSION} | cut -d'.' -f2-)
else
VERSION_KEY="${MC_VERSION}-"
fi
NEOFORGE_VERSION=$(echo -e ${XML_DATA} | xq -x "(/metadata/versioning/versions/*[starts-with(text(), '${VERSION_KEY}')])" | tail -n1)
if [[ -z "${NEOFORGE_VERSION}" ]]; then
echo "The install failed, because there is no valid version of NeoForge for Minecraft version ${MC_VERSION}."
exit 1
fi
BASE_URL="${REPO_URL}${NEOFORGE_VERSION}/"
echo "Resolved NeoForge version: ${NEOFORGE_VERSION}"
FILE_LIST=$(curl -s "${BASE_URL}" | grep -oP 'href="[^"]+"' | cut -d'"' -f2)
INSTALLER_JAR=$(echo "$FILE_LIST" | grep -E "${ARTIFACT_NAME}-${NEOFORGE_VERSION}.*installer.*\.jar$" | head -n1)
if [[ -z "$INSTALLER_JAR" ]]; then
INSTALLER_JAR=$(echo "$FILE_LIST" | grep -E "${ARTIFACT_NAME}-${NEOFORGE_VERSION}.*universal.*\.jar$" | head -n1)
fi
if [[ -z "$INSTALLER_JAR" ]]; then
echo "Could not find a valid JAR file for NeoForge version ${NEOFORGE_VERSION}."
exit 1
fi
echo "Downloading ${INSTALLER_JAR}..."
curl -o "${INSTALLER_JAR}" "${BASE_URL}${INSTALLER_JAR}"
fi
# Clean previous install (for downgrade/upgrade support)
rm -rf libraries/net/neoforged/${ARTIFACT_NAME}
# Run the installer to generate startup arguments
echo "Running installer..."
java -jar "${INSTALLER_JAR}" --installServer
# Symlink unix_args.txt if it exists
if [[ -f "libraries/net/neoforged/${ARTIFACT_NAME}/${NEOFORGE_VERSION}/unix_args.txt" ]]; then
ln -sf "libraries/net/neoforged/${ARTIFACT_NAME}/${NEOFORGE_VERSION}/unix_args.txt" unix_args.txt
fi
if [[ ! -f unix_args.txt ]]; then
echo "Installer did not generate unix_args.txt. Installation failed."
exit 1
fi
# Removal of unnecessary files
rm run.bat
rm run.sh
echo "Installation complete."