Comparing sensitive data, confidential files or internal emails?

Most legal and privacy policies prohibit uploading sensitive data online. Diffchecker Desktop ensures your confidential information never leaves your computer. Work offline and compare documents securely.

Untitled Diff

Created Diff never expires
95 removals
117 lines
59 additions
122 lines
#!/bin/bash
#!/bin/bash
# Forge Installation Script
# Forge Installation Script
#
#
# Server Files: /mnt/server
# Server Files: /mnt/server
apt update
apt update
apt install -y curl jq
apt install -y curl jq


if [ ! -d /mnt/server ]; then
if [[ ! -d /mnt/server ]]; then
mkdir /mnt/server
mkdir /mnt/server
fi
fi


cd /mnt/server
cd /mnt/server


# Remove spaces from the version number to avoid issues with curl
# Remove spaces from the version number to avoid issues with curl
FORGE_VERSION="$(echo "$FORGE_VERSION" | tr -d ' ')"
FORGE_VERSION="$(echo "$FORGE_VERSION" | tr -d ' ')"
MC_VERSION="$(echo "$MC_VERSION" | tr -d ' ')"
MC_VERSION="$(echo "$MC_VERSION" | tr -d ' ')"


if [ ! -z ${FORGE_VERSION} ]; then
if [[ ! -z ${FORGE_VERSION} ]]; then
DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}
DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}
FORGE_JAR=forge-${FORGE_VERSION}*.jar
FORGE_JAR=forge-${FORGE_VERSION}*.jar
else
else
JSON_DATA=$(curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json)
JSON_DATA=$(curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json)


if [ "${MC_VERSION}" == "latest" ] || [ "${MC_VERSION}" == "" ] ; then
if [[ "${MC_VERSION}" == "latest" ]] || [[ "${MC_VERSION}" == "" ]]; then
echo -e "getting latest version of forge."
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("recommended")) | split("-")[0]' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -1)
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
BUILD_TYPE=latest
fi
fi


if [ "${BUILD_TYPE}" != "recommended" ] && [ "${BUILD_TYPE}" != "latest" ]; then
if [[ "${BUILD_TYPE}" != "recommended" ]] && [[ "${BUILD_TYPE}" != "latest" ]]; then
BUILD_TYPE=recommended
BUILD_TYPE=recommended
fi
fi


echo -e "minecraft version: ${MC_VERSION}"
echo -e "minecraft version: ${MC_VERSION}"
echo -e "build type: ${BUILD_TYPE}"
echo -e "build type: ${BUILD_TYPE}"


## some variables for getting versions and things
## some variables for getting versions and things
FILE_SITE=https://maven.minecraftforge.net/net/minecraftforge/forge/
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))')
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
## locating the forge version
if [ "${VERSION_KEY}" == "" ] && [ "${BUILD_TYPE}" == "recommended" ]; then
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."
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("recommended"))')
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
fi


## Error if the mc version set wasn't valid.
## Error if the mc version set wasn't valid.
if [ "${VERSION_KEY}" == "" ] || [ "${VERSION_KEY}" == "null" ]; then
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."
echo -e "The install failed because there is no valid version of forge for the version of minecraft selected."
exit 1
exit 1
fi
fi


FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY "$VERSION_KEY" '.promos | .[$VERSION_KEY]')
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
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}
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
FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar
if [ "${MC_VERSION}" == "1.7.10" ]; then
if [[ "${MC_VERSION}" == "1.7.10" ]]; then
FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar
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
else
DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}
FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}.jar
fi
fi
fi



#Adding .jar when not eding by SERVER_JARFILE
#Adding .jar when not eding by SERVER_JARFILE
if [[ ! $SERVER_JARFILE = *\.jar ]]; then
if [[ ! $SERVER_JARFILE = *\.jar ]]; then
SERVER_JARFILE="$SERVER_JARFILE.jar"
SERVER_JARFILE="$SERVER_JARFILE.jar"
fi
fi


#Downloading jars
#Downloading jars
echo -e "Downloading forge version ${FORGE_VERSION}"
echo -e "Downloading forge version ${FORGE_VERSION}"
echo -e "Download link is ${DOWNLOAD_LINK}"
echo -e "Download link is ${DOWNLOAD_LINK}"


if [ ! -z "${DOWNLOAD_LINK}" ]; then
if [[ ! -z "${DOWNLOAD_LINK}" ]]; then
if curl --output /dev/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then
if curl --output /dev/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then
echo -e "installer jar download link is valid."
echo -e "installer jar download link is valid."
else
else
echo -e "link is invalid. Exiting now"
echo -e "link is invalid. Exiting now"
exit 2
exit 2
fi
fi
else
else
echo -e "no download link provided. Exiting now"
echo -e "no download link provided. Exiting now"
exit 3
exit 3
fi
fi


curl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar
curl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar



#Checking if downloaded jars exist
#Checking if downloaded jars exist
if [ ! -f ./installer.jar ]; then
if [[ ! -f ./installer.jar ]]; then
echo "!!! Error by downloading forge version ${FORGE_VERSION} !!!"
echo "!!! Error downloading forge version ${FORGE_VERSION} !!!"
exit
exit
fi
fi


# Delete args file to support downgrading to versions below 1.17
function unix_args {
if [ -f unix_args.txt ]; then
echo -e "Detected Forge 1.17 or newer version. Setting up forge unix args."
rm unix_args.txt
ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt
exit
}
fi


# Delete args to support downgrading/upgrading
rm -rf libraries/net/minecraftforge/forge
rm unix_args.txt


#Installing server
#Installing server
echo -e "Installing forge server.\n"
echo -e "Installing forge server.\n"
java -jar installer.jar --installServer || { echo -e "install failed"; exit 4; }
java -jar installer.jar --installServer || { echo -e "install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}"; exit 4; }


if [[ $MC_VERSION == *"1.17."* || $MC_VERSION == *"1.18."* || $FORGE_VERSION == *"1.17."* || $FORGE_VERSION == *"1.18."* ]]; then
# Check if we need a symlink for 1.17+ Forge JPMS args
# Create a symlink for 1.17+ Forge args
if [[ $MC_VERSION =~ ^1\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\.(17|18|19|20|21|22|23) ]]; then
ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt
unix_args
else

# For versions below 1.17 that ship with jar delete installer.jar
# Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives
mv $FORGE_JAR $SERVER_JARFILE
elif [[ $MC_VERSION == "latest" && $FORGE_VERSION =~ ^1\.(17|18|19|20|21|22|23) ]]; then
echo -e "Deleting installer.jar file.\n"
unix_args
rm -rf installer.jar
else
# For versions below 1.17 that ship with jar
mv $FORGE_JAR $SERVER_JARFILE
fi
fi

echo -e "Deleting installer.jar file.\n"
rm -rf installer.jar