From 77edb46b62a59b3fb2d956c7384466d53e872092 Mon Sep 17 00:00:00 2001 From: David Katz Date: Tue, 18 Apr 2023 22:46:44 -0700 Subject: [PATCH 1/5] Add support for Modrinth modpacks --- game_eggs/minecraft/java/modrinth/README.md | 18 ++++++ .../java/modrinth/egg-modrinth-generic.json | 59 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 game_eggs/minecraft/java/modrinth/README.md create mode 100644 game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json diff --git a/game_eggs/minecraft/java/modrinth/README.md b/game_eggs/minecraft/java/modrinth/README.md new file mode 100644 index 00000000..04580ecc --- /dev/null +++ b/game_eggs/minecraft/java/modrinth/README.md @@ -0,0 +1,18 @@ +# Modrinth Generic + +## This is a generic egg for Modrinth modpacks + +You will need to give it a modpack project ID. The project ID for [Extreme Optimization!](https://modrinth.com/modpack/extreme-optimization!) is `1oIpaoJo` for example. +This can be found on the modpack page in the `Technical information` section in the left sidebar. + +You can also optionally specify a version ID. If you do not specify a version ID, the latest version will be used. The version ID for [Extreme Optimization!](https://modrinth.com/modpack/extreme-optimization!) version 1.12.2For2.0 is `SyMW2FDv` for example. This can be found on the modpack page by clicking the version number in the `Versions` section. + +The script will automatically setup of Forge, Fabric, or Quilt depending on the modpack. + +## Server Ports + +The minecraft server requires a single port for access (default 25565) but plugins may require extra ports to enabled for the server. + +| Port | default | +|-------|---------| +| Game | 25565 | diff --git a/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json b/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json new file mode 100644 index 00000000..fc3f5bc7 --- /dev/null +++ b/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json @@ -0,0 +1,59 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2023-04-18T22:37:55-07:00", + "name": "Modrinth Generic", + "author": "contact@chromozone.dev", + "description": "A generic egg for a Modrinth modpack.", + "features": [ + "eula", + "java_version", + "pid_limit" + ], + "docker_images": { + "Java 8": "ghcr.io\/pterodactyl\/yolks:java_8", + "Java 11": "ghcr.io\/pterodactyl\/yolks:java_11", + "Java 16": "ghcr.io\/pterodactyl\/yolks:java_16", + "Java 17": "ghcr.io\/pterodactyl\/yolks:java_17" + }, + "file_denylist": [], + "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true $([[ ! -f unix_args.txt ]] && printf %s \"-jar `cat .serverjar`\" || printf %s \"@unix_args.txt\")", + "config": { + "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-ip\": \"0.0.0.0\",\r\n \"server-port\": \"{{server.build.default.port}}\",\r\n \"query.port\": \"{{server.build.default.port}}\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \")! For help, type \"\r\n}", + "logs": "{}", + "stop": "stop" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n# Modrinth Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n: ${SERVER_DIR:=\/mnt\/server}\r\n\r\nif [[ ! -d $SERVER_DIR ]]; then\r\n mkdir -p $SERVER_DIR\r\nfi\r\n\r\ncd $SERVER_DIR\r\n\r\nfunction install_required {\r\n echo -e \"Installing required packages...\"\r\n echo -e \"\\tRunning apt update\"\r\n apt update > \/dev\/null 2>&1 || { echo \"apt update failed!\"; exit 1; }\r\n echo -e \"\\tRunning apt install\"\r\n apt install -y wget jq unzip dos2unix > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nMODRINTH_API_URL=\"https:\/\/api.modrinth.com\/v2\"\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving Modrinth project information...\"\r\n PROJECT_DATA=$(wget -q \"${MODRINTH_API_URL}\/project\/${PROJECT_ID}\" -O -)\r\n PROJECT_TITLE=$(echo $PROJECT_DATA | jq -r '.title')\r\n PROJECT_SUPPORTED=$(echo $PROJECT_DATA | jq -r '.\"server_side\"')\r\n\r\n if [[ \"${PROJECT_SUPPORTED}\" == \"unsupported\" ]]; then\r\n echo -e \"\\tWARNING: The project '${PROJECT_TITLE}' is listed as unsupported for server use. Continuing anyway...\"\r\n fi\r\n\r\n if [[ -z ${VERSION_ID} || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo version ID specified, using latest version\"\r\n VERSION_ID=$(echo $PROJECT_DATA | jq -r '.versions[-1]')\r\n else\r\n echo -e \"\\tChecking if provided version id '${VERSION_ID}' exists\"\r\n if [[ $(echo $PROJECT_DATA | jq -r --arg VERSION_ID \"$VERSION_ID\" '.versions[] | select(. == $VERSION_ID)') != \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: Version id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n fi\r\n\r\n # get json data to work with\r\n echo -e \"\\tRetrieving version information for '${VERSION_ID}'\"\r\n JSON_DATA=$(wget -q \"${MODRINTH_API_URL}\/version\/${VERSION_ID}\" -O -)\r\n\r\n echo -e \"\\tParsing Modrinth pack download url\"\r\n\r\n DOWNLOAD_URL=$(echo -e $JSON_DATA | jq -r '.files[] | select(.primary == true) | .url')\r\n\r\n if [[ -z ${DOWNLOAD_URL} ]]; then\r\n echo -e \"\\tERROR: No download url found for version ${VERSION_ID}\"\r\n exit 1\r\n fi\r\n\r\n ## download modpack files\r\n echo -e \"\\tDownloading ${DOWNLOAD_URL}\"\r\n wget -q ${DOWNLOAD_URL} -O server.zip\r\n}\r\n\r\nfunction unpack_zip {\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction json_download_mods {\r\n echo \"Downloading mods...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n jq -c '.files[] | select(.env.server == \"required\") | {name: .path, url: .downloads[0]}' ${MANIFEST} | while read -r mod; do\r\n fileUrl=$(echo ${mod} | jq -r '.url')\r\n\r\n echo -e \"\\tDownloading ${fileUrl}\"\r\n wget -q \"${fileUrl}\" -P \"${SERVER_DIR}\/mods\"\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n done\r\n}\r\n\r\nfunction json_download_overrides {\r\n echo \"Copying overrides...\"\r\n if [[ -d \"${SERVER_DIR}\/overrides\" ]]; then\r\n echo -e \"\\tCopying overrides\"\r\n cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/overrides\"\r\n fi\r\n\r\n if [[ -d \"${SERVER_DIR}\/server-overrides\" ]]; then\r\n echo -e \"\\tCopying server overrides\"\r\n cp -r \"${SERVER_DIR}\/server-overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/server-overrides\"\r\n fi\r\n}\r\n\r\nFORGE_INSTALLER_URL=\"https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/\"\r\n\r\nfunction json_download_forge {\r\n echo \"Downloading Forge...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft' ${MANIFEST})\r\n FORGE_VERSION=$(jq -r '.dependencies.forge' ${MANIFEST})\r\n\r\n FORGE_VERSION=\"${MC_VERSION}-${FORGE_VERSION}\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" || \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n FORGE_VERSION=\"${FORGE_VERSION}-${MC_VERSION}\"\r\n fi\r\n\r\n FORGE_JAR=\"forge-${FORGE_VERSION}.jar\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=\"forge-${FORGE_VERSION}-universal.jar\"\r\n fi\r\n\r\n FORGE_URL=\"${FORGE_INSTALLER_URL}${FORGE_VERSION}\/forge-${FORGE_VERSION}\"\r\n\r\n echo -e \"\\tUsing Forge ${FORGE_VERSION} from ${FORGE_URL}\"\r\n\r\n FORGE_INSTALLER=\"${FORGE_URL}-installer.jar\"\r\n echo -e \"\\tDownloading Forge Installer ${FORGE_VERSION} from ${FORGE_INSTALLER}\"\r\n wget -q -O forge-installer.jar ${FORGE_INSTALLER}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n rm -rf libraries\/net\/minecraftforge\/forge\/\r\n rm -f unix_args.txt\r\n\r\n echo -e \"\\tInstalling Forge Server ${FORGE_VERSION}\"\r\n java -jar forge-installer.jar --installServer > \/dev\/null 2>&1 || { echo \"Forge installer failed!\"; exit 1; }\r\n\r\n if [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n echo -e \"\\tDetected Forge 1.17 or newer version. Setting up Forge Unix arguments\"\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n else\r\n mv $FORGE_JAR forge-server-launch.jar\r\n echo \"forge-server-launch.jar\" > \".serverjar\"\r\n fi\r\n\r\n rm -f forge-installer.jar\r\n}\r\n\r\nFABRIC_INSTALLER_URL=\"https:\/\/meta.fabricmc.net\/v2\/versions\/installer\"\r\n\r\nfunction json_download_fabric {\r\n echo \"Downloading Fabric...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft' ${MANIFEST})\r\n FABRIC_VERSION=$(jq -r '.dependencies.\"fabric-loader\"' ${MANIFEST})\r\n\r\n INSTALLER_JSON=$(wget -q -O - ${FABRIC_INSTALLER_URL} )\r\n INSTALLER_VERSION=$(echo $INSTALLER_JSON | jq -r '.[0].version')\r\n INSTALLER_URL=$(echo $INSTALLER_JSON | jq -r '.[0].url')\r\n\r\n echo -e \"\\tDownloading Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n wget -q -O fabric-installer.jar ${INSTALLER_URL}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n java -jar fabric-installer.jar server -mcversion ${MC_VERSION} -loader ${FABRIC_VERSION} -downloadMinecraft || { echo \"Fabric installer failed!\"; exit 4; }\r\n\r\n echo \"fabric-server-launch.jar\" > \".serverjar\"\r\n\r\n rm -f fabric-installer.jar\r\n}\r\n\r\nQUILT_INSTALLER_URL=\"https:\/\/meta.quiltmc.org\/v3\/versions\/installer\"\r\n\r\nfunction json_download_quilt {\r\n echo \"Downloading Quilt...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft' ${MANIFEST})\r\n QUILT_VERSION=$(jq -r '.dependencies.\"quilt-loader\"' ${MANIFEST})\r\n\r\n INSTALLER_JSON=$(wget -q -O - ${QUILT_INSTALLER_URL} )\r\n INSTALLER_VERSION=$(echo $INSTALLER_JSON | jq -r '.[0].version')\r\n INSTALLER_URL=$(echo $INSTALLER_JSON | jq -r '.[0].url')\r\n\r\n echo -e \"\\tDownloading Quilt Installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n wget -q -O quilt-installer.jar ${INSTALLER_URL}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n java -jar quilt-installer.jar install server ${MC_VERSION} ${QUILT_VERSION} --download-server --install-dir=.\/ || { echo \"Quilt installer failed!\"; exit 4; }\r\n\r\n echo \"quilt-server-launch.jar\" > \".serverjar\"\r\n\r\n rm quilt-installer.jar\r\n}\r\n\r\ninstall_required\r\n\r\nif [[ ! -z \"${VERSION_ID}\" && ! \"${VERSION_ID}\" = \"zip\" ]]; then\r\n\tget_download\r\n\tunpack_zip\r\nelse\r\n\tunpack_zip\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n echo \"Found modrinth.index.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n if [[ $(jq -r '.dependencies.forge' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"fabric-loader\"' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_fabric\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"quilt-loader\"' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_quilt\r\n fi\r\nfi\r\n\r\necho -e \"\\nInstall completed succesfully, enjoy!\"", + "container": "openjdk:8-jdk-slim", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Modpack Project ID", + "description": "This is the modpack project ID from the Modrinth site.\r\n\r\nFor example, the project ID of 'https:\/\/modrinth.com\/modpack\/fabulously-optimized\/' is 1KVo5zza", + "env_variable": "PROJECT_ID", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:8", + "field_type": "text" + }, + { + "name": "Modpack Version ID", + "description": "This is the modpack version ID from the Modrinth site.\r\n\r\nFor example, the version ID of 'https:\/\/modrinth.com\/modpack\/fabulously-optimized\/version\/4.7.4' is P9wA6exe", + "env_variable": "VERSION_ID", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:8", + "field_type": "text" + } + ] +} From 75a8eca32c071d1acb18663ad15a506b550ef13e Mon Sep 17 00:00:00 2001 From: David Katz Date: Tue, 18 Apr 2023 22:57:15 -0700 Subject: [PATCH 2/5] Update README files --- README.md | 1 + game_eggs/minecraft/README.md | 1 + game_eggs/minecraft/java/README.md | 7 +++++++ 3 files changed, 9 insertions(+) diff --git a/README.md b/README.md index 2b07e1aa..ded72f55 100644 --- a/README.md +++ b/README.md @@ -166,6 +166,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Glowstone](game_eggs/minecraft/java/glowstone) * [Limbo](game_eggs/minecraft/java/limbo) * [Magma](game_eggs/minecraft/java/magma) + * [Modrinth](game_eggs/minecraft/java/modrinth) * [Mohist](game_eggs/minecraft/java/mohist) * [NanoLimbo](game_eggs/minecraft/java/nanolimbo) * [Paper](game_eggs/minecraft/java/paper) diff --git a/game_eggs/minecraft/README.md b/game_eggs/minecraft/README.md index d4661d98..fb48bfc9 100644 --- a/game_eggs/minecraft/README.md +++ b/game_eggs/minecraft/README.md @@ -25,6 +25,7 @@ It’s set in infinitely-generated worlds of wide open terrain - icy mountains, * [Limbo](java/limbo) * [Krypton](java/krypton) * [Magma](java/magma) +* [Modrinth](java/modrinth) * [Mohist](java/mohist) * [NanoLimbo](java/nanolimbo) * [Paper](java/paper) diff --git a/game_eggs/minecraft/java/README.md b/game_eggs/minecraft/java/README.md index 2990a645..a5f6a504 100644 --- a/game_eggs/minecraft/java/README.md +++ b/game_eggs/minecraft/java/README.md @@ -46,6 +46,13 @@ Glowstone is an open-source replacement for CraftBukkit, Spigot, and Paper. [Magma Website](https://magmafoundation.org) Magma is most powerful Forge server providing you with Forge mods and Bukkit Plugins using Spigot and Paper for Performance Optimization and Stability. +### [Modrinth](modrinth) + +A generic service to pull modpacks from Modrinth. + +[Modrinth Website](https://modrinth.com) +Discover, play, and share Minecraft content through our open-source platform built for the community. + ### [Krypton](krypton) [Krypton GitHub](https://github.com/KryptonMC/Krypton) From 939527f286f39beb5250727d3cf6a85113f229d8 Mon Sep 17 00:00:00 2001 From: David Katz Date: Thu, 20 Apr 2023 19:36:30 -0700 Subject: [PATCH 3/5] Add more checks for Modrinth script --- .../java/modrinth/egg-modrinth-generic.json | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json b/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json index fc3f5bc7..f1192228 100644 --- a/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json +++ b/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2023-04-18T22:37:55-07:00", + "exported_at": "2023-04-20T19:34:09-07:00", "name": "Modrinth Generic", "author": "contact@chromozone.dev", "description": "A generic egg for a Modrinth modpack.", @@ -29,12 +29,22 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Modrinth Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n: ${SERVER_DIR:=\/mnt\/server}\r\n\r\nif [[ ! -d $SERVER_DIR ]]; then\r\n mkdir -p $SERVER_DIR\r\nfi\r\n\r\ncd $SERVER_DIR\r\n\r\nfunction install_required {\r\n echo -e \"Installing required packages...\"\r\n echo -e \"\\tRunning apt update\"\r\n apt update > \/dev\/null 2>&1 || { echo \"apt update failed!\"; exit 1; }\r\n echo -e \"\\tRunning apt install\"\r\n apt install -y wget jq unzip dos2unix > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nMODRINTH_API_URL=\"https:\/\/api.modrinth.com\/v2\"\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving Modrinth project information...\"\r\n PROJECT_DATA=$(wget -q \"${MODRINTH_API_URL}\/project\/${PROJECT_ID}\" -O -)\r\n PROJECT_TITLE=$(echo $PROJECT_DATA | jq -r '.title')\r\n PROJECT_SUPPORTED=$(echo $PROJECT_DATA | jq -r '.\"server_side\"')\r\n\r\n if [[ \"${PROJECT_SUPPORTED}\" == \"unsupported\" ]]; then\r\n echo -e \"\\tWARNING: The project '${PROJECT_TITLE}' is listed as unsupported for server use. Continuing anyway...\"\r\n fi\r\n\r\n if [[ -z ${VERSION_ID} || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo version ID specified, using latest version\"\r\n VERSION_ID=$(echo $PROJECT_DATA | jq -r '.versions[-1]')\r\n else\r\n echo -e \"\\tChecking if provided version id '${VERSION_ID}' exists\"\r\n if [[ $(echo $PROJECT_DATA | jq -r --arg VERSION_ID \"$VERSION_ID\" '.versions[] | select(. == $VERSION_ID)') != \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: Version id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n fi\r\n\r\n # get json data to work with\r\n echo -e \"\\tRetrieving version information for '${VERSION_ID}'\"\r\n JSON_DATA=$(wget -q \"${MODRINTH_API_URL}\/version\/${VERSION_ID}\" -O -)\r\n\r\n echo -e \"\\tParsing Modrinth pack download url\"\r\n\r\n DOWNLOAD_URL=$(echo -e $JSON_DATA | jq -r '.files[] | select(.primary == true) | .url')\r\n\r\n if [[ -z ${DOWNLOAD_URL} ]]; then\r\n echo -e \"\\tERROR: No download url found for version ${VERSION_ID}\"\r\n exit 1\r\n fi\r\n\r\n ## download modpack files\r\n echo -e \"\\tDownloading ${DOWNLOAD_URL}\"\r\n wget -q ${DOWNLOAD_URL} -O server.zip\r\n}\r\n\r\nfunction unpack_zip {\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction json_download_mods {\r\n echo \"Downloading mods...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n jq -c '.files[] | select(.env.server == \"required\") | {name: .path, url: .downloads[0]}' ${MANIFEST} | while read -r mod; do\r\n fileUrl=$(echo ${mod} | jq -r '.url')\r\n\r\n echo -e \"\\tDownloading ${fileUrl}\"\r\n wget -q \"${fileUrl}\" -P \"${SERVER_DIR}\/mods\"\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n done\r\n}\r\n\r\nfunction json_download_overrides {\r\n echo \"Copying overrides...\"\r\n if [[ -d \"${SERVER_DIR}\/overrides\" ]]; then\r\n echo -e \"\\tCopying overrides\"\r\n cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/overrides\"\r\n fi\r\n\r\n if [[ -d \"${SERVER_DIR}\/server-overrides\" ]]; then\r\n echo -e \"\\tCopying server overrides\"\r\n cp -r \"${SERVER_DIR}\/server-overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/server-overrides\"\r\n fi\r\n}\r\n\r\nFORGE_INSTALLER_URL=\"https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/\"\r\n\r\nfunction json_download_forge {\r\n echo \"Downloading Forge...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft' ${MANIFEST})\r\n FORGE_VERSION=$(jq -r '.dependencies.forge' ${MANIFEST})\r\n\r\n FORGE_VERSION=\"${MC_VERSION}-${FORGE_VERSION}\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" || \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n FORGE_VERSION=\"${FORGE_VERSION}-${MC_VERSION}\"\r\n fi\r\n\r\n FORGE_JAR=\"forge-${FORGE_VERSION}.jar\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=\"forge-${FORGE_VERSION}-universal.jar\"\r\n fi\r\n\r\n FORGE_URL=\"${FORGE_INSTALLER_URL}${FORGE_VERSION}\/forge-${FORGE_VERSION}\"\r\n\r\n echo -e \"\\tUsing Forge ${FORGE_VERSION} from ${FORGE_URL}\"\r\n\r\n FORGE_INSTALLER=\"${FORGE_URL}-installer.jar\"\r\n echo -e \"\\tDownloading Forge Installer ${FORGE_VERSION} from ${FORGE_INSTALLER}\"\r\n wget -q -O forge-installer.jar ${FORGE_INSTALLER}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n rm -rf libraries\/net\/minecraftforge\/forge\/\r\n rm -f unix_args.txt\r\n\r\n echo -e \"\\tInstalling Forge Server ${FORGE_VERSION}\"\r\n java -jar forge-installer.jar --installServer > \/dev\/null 2>&1 || { echo \"Forge installer failed!\"; exit 1; }\r\n\r\n if [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n echo -e \"\\tDetected Forge 1.17 or newer version. Setting up Forge Unix arguments\"\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n else\r\n mv $FORGE_JAR forge-server-launch.jar\r\n echo \"forge-server-launch.jar\" > \".serverjar\"\r\n fi\r\n\r\n rm -f forge-installer.jar\r\n}\r\n\r\nFABRIC_INSTALLER_URL=\"https:\/\/meta.fabricmc.net\/v2\/versions\/installer\"\r\n\r\nfunction json_download_fabric {\r\n echo \"Downloading Fabric...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft' ${MANIFEST})\r\n FABRIC_VERSION=$(jq -r '.dependencies.\"fabric-loader\"' ${MANIFEST})\r\n\r\n INSTALLER_JSON=$(wget -q -O - ${FABRIC_INSTALLER_URL} )\r\n INSTALLER_VERSION=$(echo $INSTALLER_JSON | jq -r '.[0].version')\r\n INSTALLER_URL=$(echo $INSTALLER_JSON | jq -r '.[0].url')\r\n\r\n echo -e \"\\tDownloading Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n wget -q -O fabric-installer.jar ${INSTALLER_URL}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n java -jar fabric-installer.jar server -mcversion ${MC_VERSION} -loader ${FABRIC_VERSION} -downloadMinecraft || { echo \"Fabric installer failed!\"; exit 4; }\r\n\r\n echo \"fabric-server-launch.jar\" > \".serverjar\"\r\n\r\n rm -f fabric-installer.jar\r\n}\r\n\r\nQUILT_INSTALLER_URL=\"https:\/\/meta.quiltmc.org\/v3\/versions\/installer\"\r\n\r\nfunction json_download_quilt {\r\n echo \"Downloading Quilt...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft' ${MANIFEST})\r\n QUILT_VERSION=$(jq -r '.dependencies.\"quilt-loader\"' ${MANIFEST})\r\n\r\n INSTALLER_JSON=$(wget -q -O - ${QUILT_INSTALLER_URL} )\r\n INSTALLER_VERSION=$(echo $INSTALLER_JSON | jq -r '.[0].version')\r\n INSTALLER_URL=$(echo $INSTALLER_JSON | jq -r '.[0].url')\r\n\r\n echo -e \"\\tDownloading Quilt Installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n wget -q -O quilt-installer.jar ${INSTALLER_URL}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n java -jar quilt-installer.jar install server ${MC_VERSION} ${QUILT_VERSION} --download-server --install-dir=.\/ || { echo \"Quilt installer failed!\"; exit 4; }\r\n\r\n echo \"quilt-server-launch.jar\" > \".serverjar\"\r\n\r\n rm quilt-installer.jar\r\n}\r\n\r\ninstall_required\r\n\r\nif [[ ! -z \"${VERSION_ID}\" && ! \"${VERSION_ID}\" = \"zip\" ]]; then\r\n\tget_download\r\n\tunpack_zip\r\nelse\r\n\tunpack_zip\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n echo \"Found modrinth.index.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n if [[ $(jq -r '.dependencies.forge' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"fabric-loader\"' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_fabric\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"quilt-loader\"' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_quilt\r\n fi\r\nfi\r\n\r\necho -e \"\\nInstall completed succesfully, enjoy!\"", + "script": "#!\/bin\/bash\r\n# Modrinth Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n: ${SERVER_DIR:=\/mnt\/server}\r\n: ${PROJECT_ID:=}\r\n: ${VERSION_ID:=}\r\n\r\nif [[ ! -d $SERVER_DIR ]]; then\r\n mkdir -p $SERVER_DIR\r\nfi\r\n\r\ncd $SERVER_DIR\r\n\r\nfunction install_required {\r\n echo -e \"Installing required packages...\"\r\n echo -e \"\\tRunning apt update\"\r\n apt update > \/dev\/null 2>&1 || { echo \"apt update failed!\"; exit 1; }\r\n echo -e \"\\tRunning apt install\"\r\n apt install -y wget jq unzip dos2unix > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nMODRINTH_API_URL=\"https:\/\/api.modrinth.com\/v2\"\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving Modrinth project information...\"\r\n PROJECT_DATA=$(wget -q \"${MODRINTH_API_URL}\/project\/${PROJECT_ID}\" -O -)\r\n PROJECT_TITLE=$(echo $PROJECT_DATA | jq -r '.title \/\/ empty')\r\n PROJECT_SUPPORTED=$(echo $PROJECT_DATA | jq -r '.\"server_side\" \/\/ empty')\r\n\r\n if [[ \"${PROJECT_SUPPORTED}\" == \"unsupported\" ]]; then\r\n echo -e \"\\tWARNING: The project '${PROJECT_TITLE}' is listed as unsupported for server use. Continuing anyway...\"\r\n fi\r\n\r\n if [[ ! -n \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo version ID specified, using latest version\"\r\n VERSION_ID=$(echo $PROJECT_DATA | jq -r '.versions[-1] \/\/ empty')\r\n else\r\n echo -e \"\\tChecking if provided version id '${VERSION_ID}' exists\"\r\n if [[ $(echo $PROJECT_DATA | jq -r --arg VERSION_ID \"$VERSION_ID\" '.versions[]? | select(. == $VERSION_ID)') != \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: Version id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n fi\r\n\r\n if [[ ! -n \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No version id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n # get json data to work with\r\n echo -e \"\\tRetrieving version information for '${VERSION_ID}'\"\r\n JSON_DATA=$(wget -q \"${MODRINTH_API_URL}\/version\/${VERSION_ID}\" -O -)\r\n\r\n echo -e \"\\tParsing Modrinth pack download url\"\r\n\r\n DOWNLOAD_URL=$(echo $JSON_DATA | jq -r '.files[]? | select(.primary == true) | .url')\r\n\r\n if [[ ! -n \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for version ${VERSION_ID}\"\r\n exit 1\r\n fi\r\n\r\n ## download modpack files\r\n echo -e \"\\tDownloading ${DOWNLOAD_URL}\"\r\n wget -q ${DOWNLOAD_URL} -O server.zip\r\n}\r\n\r\nfunction unpack_zip {\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction json_download_mods {\r\n echo \"Downloading mods...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n jq -c '.files[]? | select(.env.server == \"required\") | {name: .path, url: .downloads[0]}' ${MANIFEST} | while read -r mod; do\r\n FILE_URL=$(echo ${mod} | jq -r '.url \/\/ empty')\r\n\r\n if [[ ! -n \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading ${FILE_URL}\"\r\n wget -q \"${FILE_URL}\" -P \"${SERVER_DIR}\/mods\"\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n done\r\n}\r\n\r\nfunction json_download_overrides {\r\n echo \"Copying overrides...\"\r\n if [[ -d \"${SERVER_DIR}\/overrides\" ]]; then\r\n echo -e \"\\tCopying overrides\"\r\n cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/overrides\"\r\n fi\r\n\r\n if [[ -d \"${SERVER_DIR}\/server-overrides\" ]]; then\r\n echo -e \"\\tCopying server overrides\"\r\n cp -r \"${SERVER_DIR}\/server-overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/server-overrides\"\r\n fi\r\n}\r\n\r\nFORGE_INSTALLER_URL=\"https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/\"\r\n\r\nfunction json_download_forge {\r\n echo \"Downloading Forge...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' ${MANIFEST})\r\n FORGE_VERSION=$(jq -r '.dependencies.forge \/\/ empty' ${MANIFEST})\r\n\r\n if [[ ! -n \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${FORGE_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Forge version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n FORGE_VERSION=\"${MC_VERSION}-${FORGE_VERSION}\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" || \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n FORGE_VERSION=\"${FORGE_VERSION}-${MC_VERSION}\"\r\n fi\r\n\r\n FORGE_JAR=\"forge-${FORGE_VERSION}.jar\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=\"forge-${FORGE_VERSION}-universal.jar\"\r\n fi\r\n\r\n FORGE_URL=\"${FORGE_INSTALLER_URL}${FORGE_VERSION}\/forge-${FORGE_VERSION}\"\r\n\r\n echo -e \"\\tUsing Forge ${FORGE_VERSION} from ${FORGE_URL}\"\r\n\r\n FORGE_INSTALLER=\"${FORGE_URL}-installer.jar\"\r\n echo -e \"\\tDownloading Forge Installer ${FORGE_VERSION} from ${FORGE_INSTALLER}\"\r\n wget -q -O forge-installer.jar ${FORGE_INSTALLER}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n rm -rf libraries\/net\/minecraftforge\/forge\/\r\n rm -f unix_args.txt\r\n\r\n echo -e \"\\tInstalling Forge Server ${FORGE_VERSION}\"\r\n java -jar forge-installer.jar --installServer > \/dev\/null 2>&1 || { echo \"Forge installer failed!\"; exit 1; }\r\n\r\n if [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n echo -e \"\\tDetected Forge 1.17 or newer version. Setting up Forge Unix arguments\"\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n else\r\n mv $FORGE_JAR forge-server-launch.jar\r\n echo \"forge-server-launch.jar\" > \".serverjar\"\r\n fi\r\n\r\n rm -f forge-installer.jar\r\n}\r\n\r\nFABRIC_INSTALLER_URL=\"https:\/\/meta.fabricmc.net\/v2\/versions\/installer\"\r\n\r\nfunction json_download_fabric {\r\n echo \"Downloading Fabric...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' ${MANIFEST})\r\n FABRIC_VERSION=$(jq -r '.dependencies.\"fabric-loader\" \/\/ empty' ${MANIFEST})\r\n\r\n if [[ ! -n \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${FABRIC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n INSTALLER_JSON=$(wget -q -O - ${FABRIC_INSTALLER_URL} )\r\n INSTALLER_VERSION=$(echo $INSTALLER_JSON | jq -r '.[0].version \/\/ empty')\r\n INSTALLER_URL=$(echo $INSTALLER_JSON | jq -r '.[0].url \/\/ empty')\r\n\r\n if [[ ! -n \"${INSTALLER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric installer version found\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${INSTALLER_URL}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric installer url found\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n wget -q -O fabric-installer.jar ${INSTALLER_URL}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n java -jar fabric-installer.jar server -mcversion ${MC_VERSION} -loader ${FABRIC_VERSION} -downloadMinecraft || { echo \"Fabric installer failed!\"; exit 4; }\r\n\r\n echo \"fabric-server-launch.jar\" > \".serverjar\"\r\n\r\n rm -f fabric-installer.jar\r\n}\r\n\r\nQUILT_INSTALLER_URL=\"https:\/\/meta.quiltmc.org\/v3\/versions\/installer\"\r\n\r\nfunction json_download_quilt {\r\n echo \"Downloading Quilt...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' ${MANIFEST})\r\n QUILT_VERSION=$(jq -r '.dependencies.\"quilt-loader\" \/\/ empty' ${MANIFEST})\r\n\r\n if [[ ! -n \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${QUILT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n INSTALLER_JSON=$(wget -q -O - ${QUILT_INSTALLER_URL} )\r\n INSTALLER_VERSION=$(echo $INSTALLER_JSON | jq -r '.[0].version \/\/ empty')\r\n INSTALLER_URL=$(echo $INSTALLER_JSON | jq -r '.[0].url \/\/ empty')\r\n\r\n if [[ ! -n \"${INSTALLER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${INSTALLER_URL}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer URL found\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading Quilt Installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n wget -q -O quilt-installer.jar ${INSTALLER_URL}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n java -jar quilt-installer.jar install server ${MC_VERSION} ${QUILT_VERSION} --download-server --install-dir=.\/ || { echo \"Quilt installer failed!\"; exit 4; }\r\n\r\n echo \"quilt-server-launch.jar\" > \".serverjar\"\r\n\r\n rm quilt-installer.jar\r\n}\r\n\r\ninstall_required\r\n\r\nif [[ ! -n \"${PROJECT_ID}\" ]]; then\r\n echo \"ERROR: You must specify a PROJECT_ID environment variable!\"\r\n exit 1\r\nfi\r\n\r\nif [[ ! \"${PROJECT_ID}\" = \"zip\" ]]; then\r\n\tget_download\r\n\tunpack_zip\r\nelse\r\n\tunpack_zip\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n echo \"Found modrinth.index.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n if [[ $(jq -r '.dependencies.forge' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"fabric-loader\"' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_fabric\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"quilt-loader\"' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_quilt\r\n fi\r\nfi\r\n\r\necho -e \"\\nInstall completed succesfully, enjoy!\"", "container": "openjdk:8-jdk-slim", "entrypoint": "bash" } }, "variables": [ + { + "name": "Modpack Version ID", + "description": "This is the modpack version ID from the Modrinth site.\r\n\r\nFor example, the version ID of 'https:\/\/modrinth.com\/modpack\/fabulously-optimized\/version\/4.7.4' is P9wA6exe", + "env_variable": "VERSION_ID", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "string|max:8", + "field_type": "text" + }, { "name": "Modpack Project ID", "description": "This is the modpack project ID from the Modrinth site.\r\n\r\nFor example, the project ID of 'https:\/\/modrinth.com\/modpack\/fabulously-optimized\/' is 1KVo5zza", @@ -44,16 +54,6 @@ "user_editable": true, "rules": "required|string|max:8", "field_type": "text" - }, - { - "name": "Modpack Version ID", - "description": "This is the modpack version ID from the Modrinth site.\r\n\r\nFor example, the version ID of 'https:\/\/modrinth.com\/modpack\/fabulously-optimized\/version\/4.7.4' is P9wA6exe", - "env_variable": "VERSION_ID", - "default_value": "latest", - "user_viewable": true, - "user_editable": true, - "rules": "required|string|max:8", - "field_type": "text" } ] -} +} \ No newline at end of file From e10762c1bc3ac702c5f6bcc73b25efaf62a850fb Mon Sep 17 00:00:00 2001 From: David Katz Date: Fri, 5 May 2023 18:14:31 -0700 Subject: [PATCH 4/5] Update Modrinth Egg with better error handling --- .../java/modrinth/egg-modrinth-generic.json | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json b/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json index f1192228..2859e9ff 100644 --- a/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json +++ b/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2023-04-20T19:34:09-07:00", + "exported_at": "2023-05-05T18:13:15-07:00", "name": "Modrinth Generic", "author": "contact@chromozone.dev", "description": "A generic egg for a Modrinth modpack.", @@ -29,22 +29,12 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Modrinth Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n: ${SERVER_DIR:=\/mnt\/server}\r\n: ${PROJECT_ID:=}\r\n: ${VERSION_ID:=}\r\n\r\nif [[ ! -d $SERVER_DIR ]]; then\r\n mkdir -p $SERVER_DIR\r\nfi\r\n\r\ncd $SERVER_DIR\r\n\r\nfunction install_required {\r\n echo -e \"Installing required packages...\"\r\n echo -e \"\\tRunning apt update\"\r\n apt update > \/dev\/null 2>&1 || { echo \"apt update failed!\"; exit 1; }\r\n echo -e \"\\tRunning apt install\"\r\n apt install -y wget jq unzip dos2unix > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nMODRINTH_API_URL=\"https:\/\/api.modrinth.com\/v2\"\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving Modrinth project information...\"\r\n PROJECT_DATA=$(wget -q \"${MODRINTH_API_URL}\/project\/${PROJECT_ID}\" -O -)\r\n PROJECT_TITLE=$(echo $PROJECT_DATA | jq -r '.title \/\/ empty')\r\n PROJECT_SUPPORTED=$(echo $PROJECT_DATA | jq -r '.\"server_side\" \/\/ empty')\r\n\r\n if [[ \"${PROJECT_SUPPORTED}\" == \"unsupported\" ]]; then\r\n echo -e \"\\tWARNING: The project '${PROJECT_TITLE}' is listed as unsupported for server use. Continuing anyway...\"\r\n fi\r\n\r\n if [[ ! -n \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo version ID specified, using latest version\"\r\n VERSION_ID=$(echo $PROJECT_DATA | jq -r '.versions[-1] \/\/ empty')\r\n else\r\n echo -e \"\\tChecking if provided version id '${VERSION_ID}' exists\"\r\n if [[ $(echo $PROJECT_DATA | jq -r --arg VERSION_ID \"$VERSION_ID\" '.versions[]? | select(. == $VERSION_ID)') != \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: Version id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n fi\r\n\r\n if [[ ! -n \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No version id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n # get json data to work with\r\n echo -e \"\\tRetrieving version information for '${VERSION_ID}'\"\r\n JSON_DATA=$(wget -q \"${MODRINTH_API_URL}\/version\/${VERSION_ID}\" -O -)\r\n\r\n echo -e \"\\tParsing Modrinth pack download url\"\r\n\r\n DOWNLOAD_URL=$(echo $JSON_DATA | jq -r '.files[]? | select(.primary == true) | .url')\r\n\r\n if [[ ! -n \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for version ${VERSION_ID}\"\r\n exit 1\r\n fi\r\n\r\n ## download modpack files\r\n echo -e \"\\tDownloading ${DOWNLOAD_URL}\"\r\n wget -q ${DOWNLOAD_URL} -O server.zip\r\n}\r\n\r\nfunction unpack_zip {\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction json_download_mods {\r\n echo \"Downloading mods...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n jq -c '.files[]? | select(.env.server == \"required\") | {name: .path, url: .downloads[0]}' ${MANIFEST} | while read -r mod; do\r\n FILE_URL=$(echo ${mod} | jq -r '.url \/\/ empty')\r\n\r\n if [[ ! -n \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading ${FILE_URL}\"\r\n wget -q \"${FILE_URL}\" -P \"${SERVER_DIR}\/mods\"\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n done\r\n}\r\n\r\nfunction json_download_overrides {\r\n echo \"Copying overrides...\"\r\n if [[ -d \"${SERVER_DIR}\/overrides\" ]]; then\r\n echo -e \"\\tCopying overrides\"\r\n cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/overrides\"\r\n fi\r\n\r\n if [[ -d \"${SERVER_DIR}\/server-overrides\" ]]; then\r\n echo -e \"\\tCopying server overrides\"\r\n cp -r \"${SERVER_DIR}\/server-overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/server-overrides\"\r\n fi\r\n}\r\n\r\nFORGE_INSTALLER_URL=\"https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/\"\r\n\r\nfunction json_download_forge {\r\n echo \"Downloading Forge...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' ${MANIFEST})\r\n FORGE_VERSION=$(jq -r '.dependencies.forge \/\/ empty' ${MANIFEST})\r\n\r\n if [[ ! -n \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${FORGE_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Forge version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n FORGE_VERSION=\"${MC_VERSION}-${FORGE_VERSION}\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" || \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n FORGE_VERSION=\"${FORGE_VERSION}-${MC_VERSION}\"\r\n fi\r\n\r\n FORGE_JAR=\"forge-${FORGE_VERSION}.jar\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=\"forge-${FORGE_VERSION}-universal.jar\"\r\n fi\r\n\r\n FORGE_URL=\"${FORGE_INSTALLER_URL}${FORGE_VERSION}\/forge-${FORGE_VERSION}\"\r\n\r\n echo -e \"\\tUsing Forge ${FORGE_VERSION} from ${FORGE_URL}\"\r\n\r\n FORGE_INSTALLER=\"${FORGE_URL}-installer.jar\"\r\n echo -e \"\\tDownloading Forge Installer ${FORGE_VERSION} from ${FORGE_INSTALLER}\"\r\n wget -q -O forge-installer.jar ${FORGE_INSTALLER}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n rm -rf libraries\/net\/minecraftforge\/forge\/\r\n rm -f unix_args.txt\r\n\r\n echo -e \"\\tInstalling Forge Server ${FORGE_VERSION}\"\r\n java -jar forge-installer.jar --installServer > \/dev\/null 2>&1 || { echo \"Forge installer failed!\"; exit 1; }\r\n\r\n if [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n echo -e \"\\tDetected Forge 1.17 or newer version. Setting up Forge Unix arguments\"\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n else\r\n mv $FORGE_JAR forge-server-launch.jar\r\n echo \"forge-server-launch.jar\" > \".serverjar\"\r\n fi\r\n\r\n rm -f forge-installer.jar\r\n}\r\n\r\nFABRIC_INSTALLER_URL=\"https:\/\/meta.fabricmc.net\/v2\/versions\/installer\"\r\n\r\nfunction json_download_fabric {\r\n echo \"Downloading Fabric...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' ${MANIFEST})\r\n FABRIC_VERSION=$(jq -r '.dependencies.\"fabric-loader\" \/\/ empty' ${MANIFEST})\r\n\r\n if [[ ! -n \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${FABRIC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n INSTALLER_JSON=$(wget -q -O - ${FABRIC_INSTALLER_URL} )\r\n INSTALLER_VERSION=$(echo $INSTALLER_JSON | jq -r '.[0].version \/\/ empty')\r\n INSTALLER_URL=$(echo $INSTALLER_JSON | jq -r '.[0].url \/\/ empty')\r\n\r\n if [[ ! -n \"${INSTALLER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric installer version found\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${INSTALLER_URL}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric installer url found\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n wget -q -O fabric-installer.jar ${INSTALLER_URL}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n java -jar fabric-installer.jar server -mcversion ${MC_VERSION} -loader ${FABRIC_VERSION} -downloadMinecraft || { echo \"Fabric installer failed!\"; exit 4; }\r\n\r\n echo \"fabric-server-launch.jar\" > \".serverjar\"\r\n\r\n rm -f fabric-installer.jar\r\n}\r\n\r\nQUILT_INSTALLER_URL=\"https:\/\/meta.quiltmc.org\/v3\/versions\/installer\"\r\n\r\nfunction json_download_quilt {\r\n echo \"Downloading Quilt...\"\r\n\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' ${MANIFEST})\r\n QUILT_VERSION=$(jq -r '.dependencies.\"quilt-loader\" \/\/ empty' ${MANIFEST})\r\n\r\n if [[ ! -n \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${QUILT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt version found in manifest\"\r\n exit 1\r\n fi\r\n\r\n INSTALLER_JSON=$(wget -q -O - ${QUILT_INSTALLER_URL} )\r\n INSTALLER_VERSION=$(echo $INSTALLER_JSON | jq -r '.[0].version \/\/ empty')\r\n INSTALLER_URL=$(echo $INSTALLER_JSON | jq -r '.[0].url \/\/ empty')\r\n\r\n if [[ ! -n \"${INSTALLER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found\"\r\n exit 1\r\n fi\r\n\r\n if [[ ! -n \"${INSTALLER_URL}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer URL found\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading Quilt Installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n wget -q -O quilt-installer.jar ${INSTALLER_URL}\r\n\r\n if [[ $? != 0 ]]; then\r\n echo -e \"Download failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n java -jar quilt-installer.jar install server ${MC_VERSION} ${QUILT_VERSION} --download-server --install-dir=.\/ || { echo \"Quilt installer failed!\"; exit 4; }\r\n\r\n echo \"quilt-server-launch.jar\" > \".serverjar\"\r\n\r\n rm quilt-installer.jar\r\n}\r\n\r\ninstall_required\r\n\r\nif [[ ! -n \"${PROJECT_ID}\" ]]; then\r\n echo \"ERROR: You must specify a PROJECT_ID environment variable!\"\r\n exit 1\r\nfi\r\n\r\nif [[ ! \"${PROJECT_ID}\" = \"zip\" ]]; then\r\n\tget_download\r\n\tunpack_zip\r\nelse\r\n\tunpack_zip\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n echo \"Found modrinth.index.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n if [[ $(jq -r '.dependencies.forge' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"fabric-loader\"' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_fabric\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"quilt-loader\"' ${MANIFEST}) != \"null\" ]]; then\r\n json_download_quilt\r\n fi\r\nfi\r\n\r\necho -e \"\\nInstall completed succesfully, enjoy!\"", + "script": "#!\/bin\/bash\r\n# shellcheck disable=SC2155\r\n#\r\n# Modrinth Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n: \"${SERVER_DIR:=\/mnt\/server}\"\r\n: \"${PROJECT_ID:=}\"\r\n: \"${VERSION_ID:=}\"\r\n\r\nif [[ ! -d $SERVER_DIR ]]; then\r\n mkdir -p \"$SERVER_DIR\"\r\nfi\r\n\r\nif ! cd \"$SERVER_DIR\"; then\r\n echo -e \"Failed to change directory to ${SERVER_DIR}\"\r\n exit 1\r\nfi\r\n\r\nfunction install_required {\r\n echo -e \"Installing required packages...\"\r\n\r\n echo -e \"\\tRunning apt update\"\r\n if ! apt update > \/dev\/null 2>&1; then\r\n echo -e \"\\tERROR: apt update failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tRunning apt install\"\r\n if ! apt install -y wget jq unzip dos2unix > \/dev\/null 2>&1; then\r\n echo -e \"\\tERROR: apt install failed!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nMODRINTH_API_URL=\"https:\/\/api.modrinth.com\/v2\"\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving Modrinth project information...\"\r\n local PROJECT_DATA=$(wget -q \"${MODRINTH_API_URL}\/project\/${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.title \/\/ empty')\r\n local PROJECT_SUPPORTED=$(echo \"$PROJECT_DATA\" | jq -r '.\"server_side\" \/\/ empty')\r\n\r\n if [[ -z \"${PROJECT_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve project data for project id '${PROJECT_ID}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ \"${PROJECT_SUPPORTED}\" == \"unsupported\" ]]; then\r\n echo -e \"\\tWARNING: The project '${PROJECT_TITLE}' is listed as unsupported for server use. Continuing anyway...\"\r\n fi\r\n\r\n if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo version ID specified, using latest version\"\r\n VERSION_ID=$(echo \"$PROJECT_DATA\" | jq -r '.versions[-1] \/\/ empty')\r\n else\r\n echo -e \"\\tChecking if provided version id '${VERSION_ID}' exists\"\r\n if [[ $(echo \"$PROJECT_DATA\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.versions[]? | select(. == $VERSION_ID)') != \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: Version id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n fi\r\n\r\n if [[ -z \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No version id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n # get json data to work with\r\n echo -e \"\\tRetrieving version information for '${VERSION_ID}'\"\r\n local JSON_DATA=$(wget -q \"${MODRINTH_API_URL}\/version\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${JSON_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve version data for version id '${VERSION_ID}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tParsing Modrinth pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo \"$JSON_DATA\" | jq -r '.files[]? | select(.primary == true) | .url')\r\n\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for version ${VERSION_ID}\"\r\n exit 1\r\n fi\r\n\r\n ## download modpack files\r\n echo -e \"\\tDownloading ${DOWNLOAD_URL}\"\r\n if ! wget -q \"${DOWNLOAD_URL}\" -O server.zip; then\r\n echo -e \"\\tERROR: Failed to download modpack files!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nfunction unpack_zip {\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction json_download_mods {\r\n echo \"Downloading mods...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n jq -c '.files[]? | select(.env.server == \"required\") | {name: .path, url: .downloads[0]}' \"${MANIFEST}\" | while read -r mod; do\r\n local FILE_URL=$(echo \"${mod}\" | jq -r '.url \/\/ empty')\r\n local FILE_NAME=$(echo \"${mod}\" | jq -r '.name \/\/ empty')\r\n\r\n if [[ -z \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading ${FILE_URL}\"\r\n \r\n if ! wget -q \"${FILE_URL}\" -P \"${SERVER_DIR}\/mods\"; then\r\n echo -e \"\\tERROR: Failed to download mod '${FILE_NAME}'\"\r\n exit 1\r\n fi\r\n done\r\n}\r\n\r\nfunction json_download_overrides {\r\n echo \"Copying overrides...\"\r\n if [[ -d \"${SERVER_DIR}\/overrides\" ]]; then\r\n echo -e \"\\tCopying shared overrides\"\r\n cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/overrides\"\r\n fi\r\n\r\n if [[ -d \"${SERVER_DIR}\/server-overrides\" ]]; then\r\n echo -e \"\\tCopying server overrides\"\r\n cp -r \"${SERVER_DIR}\/server-overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/server-overrides\"\r\n fi\r\n}\r\n\r\nFORGE_INSTALLER_URL=\"https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/\"\r\n\r\nfunction json_download_forge {\r\n echo \"Downloading Forge...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n local MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' \"${MANIFEST}\")\r\n local FORGE_VERSION=$(jq -r '.dependencies.forge \/\/ empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${FORGE_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Forge version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n FORGE_VERSION=\"${MC_VERSION}-${FORGE_VERSION}\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" || \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n FORGE_VERSION=\"${FORGE_VERSION}-${MC_VERSION}\"\r\n fi\r\n\r\n local FORGE_JAR=\"forge-${FORGE_VERSION}.jar\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=\"forge-${FORGE_VERSION}-universal.jar\"\r\n fi\r\n\r\n local FORGE_URL=\"${FORGE_INSTALLER_URL}${FORGE_VERSION}\/forge-${FORGE_VERSION}\"\r\n\r\n echo -e \"\\tUsing Forge ${FORGE_VERSION} from ${FORGE_URL}\"\r\n\r\n local FORGE_INSTALLER=\"${FORGE_URL}-installer.jar\"\r\n echo -e \"\\tDownloading Forge Installer ${FORGE_VERSION} from ${FORGE_INSTALLER}\"\r\n\r\n if ! wget -q -O forge-installer.jar \"${FORGE_INSTALLER}\"; then\r\n echo -e \"\\tERROR: Failed to download Forge Installer ${FORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n rm -rf libraries\/net\/minecraftforge\/forge\/\r\n rm -f unix_args.txt\r\n\r\n echo -e \"\\tInstalling Forge Server ${FORGE_VERSION}\"\r\n if ! java -jar forge-installer.jar --installServer > \/dev\/null 2>&1; then\r\n echo -e \"\\tERROR: Failed to install Forge Server ${FORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n if [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n echo -e \"\\tDetected Forge 1.17 or newer version. Setting up Forge Unix arguments\"\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n else\r\n mv \"$FORGE_JAR\" forge-server-launch.jar\r\n echo \"forge-server-launch.jar\" > \".serverjar\"\r\n fi\r\n\r\n rm -f forge-installer.jar\r\n}\r\n\r\nFABRIC_INSTALLER_URL=\"https:\/\/meta.fabricmc.net\/v2\/versions\/installer\"\r\n\r\nfunction json_download_fabric {\r\n echo \"Downloading Fabric...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n local MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' \"${MANIFEST}\")\r\n local FABRIC_VERSION=$(jq -r '.dependencies.\"fabric-loader\" \/\/ empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${FABRIC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n local INSTALLER_JSON=$(wget -q -O - ${FABRIC_INSTALLER_URL} )\r\n local INSTALLER_VERSION=$(echo \"$INSTALLER_JSON\" | jq -r '.[0].version \/\/ empty')\r\n local INSTALLER_URL=$(echo \"$INSTALLER_JSON\" | jq -r '.[0].url \/\/ empty')\r\n\r\n if [[ -z \"${INSTALLER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric installer version found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${INSTALLER_URL}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric installer url found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n\r\n if ! wget -q -O fabric-installer.jar \"${INSTALLER_URL}\"; then\r\n echo -e \"\\tERROR: Failed to download Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n if ! java -jar fabric-installer.jar server -mcversion \"${MC_VERSION}\" -loader \"${FABRIC_VERSION}\" -downloadMinecraft; then\r\n echo -e \"\\tERROR: Failed to install Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n exit 1\r\n fi\r\n\r\n echo \"fabric-server-launch.jar\" > \".serverjar\"\r\n\r\n rm -f fabric-installer.jar\r\n}\r\n\r\nQUILT_INSTALLER_URL=\"https:\/\/meta.quiltmc.org\/v3\/versions\/installer\"\r\n\r\nfunction json_download_quilt {\r\n echo \"Downloading Quilt...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n local MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' \"${MANIFEST}\")\r\n local QUILT_VERSION=$(jq -r '.dependencies.\"quilt-loader\" \/\/ empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${QUILT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt version found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n local INSTALLER_JSON=$(wget -q -O - ${QUILT_INSTALLER_URL} )\r\n local INSTALLER_VERSION=$(echo \"$INSTALLER_JSON\" | jq -r '.[0].version \/\/ empty')\r\n local INSTALLER_URL=$(echo \"$INSTALLER_JSON\" | jq -r '.[0].url \/\/ empty')\r\n\r\n if [[ -z \"${INSTALLER_JSON}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve Quilt installer information from manifest!\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${INSTALLER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${INSTALLER_URL}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer URL found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading Quilt Installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n\r\n if ! wget -q -O quilt-installer.jar \"${INSTALLER_URL}\"; then\r\n echo -e \"\\tERROR: Failed to download Quilt installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n if ! java -jar quilt-installer.jar install server \"${MC_VERSION}\" \"${QUILT_VERSION}\" --download-server --install-dir=.\/; then\r\n echo -e \"\\tERROR: Failed to install Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n exit 1\r\n fi\r\n\r\n echo \"quilt-server-launch.jar\" > \".serverjar\"\r\n\r\n rm quilt-installer.jar\r\n}\r\n\r\ninstall_required\r\n\r\nif [[ -z \"${PROJECT_ID}\" ]]; then\r\n echo \"ERROR: You must specify a PROJECT_ID environment variable!\"\r\n exit 1\r\nfi\r\n\r\nif [[ ! \"${PROJECT_ID}\" = \"zip\" ]]; then\r\n\tget_download\r\n\tunpack_zip\r\nelse\r\n\tunpack_zip\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n echo \"Found modrinth.index.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/modrinth.index.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n if [[ $(jq -r '.dependencies.forge' \"${MANIFEST}\") != \"null\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"fabric-loader\"' \"${MANIFEST}\") != \"null\" ]]; then\r\n json_download_fabric\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"quilt-loader\"' \"${MANIFEST}\") != \"null\" ]]; then\r\n json_download_quilt\r\n fi\r\nfi\r\n\r\necho -e \"\\nInstall completed succesfully, enjoy!\"", "container": "openjdk:8-jdk-slim", "entrypoint": "bash" } }, "variables": [ - { - "name": "Modpack Version ID", - "description": "This is the modpack version ID from the Modrinth site.\r\n\r\nFor example, the version ID of 'https:\/\/modrinth.com\/modpack\/fabulously-optimized\/version\/4.7.4' is P9wA6exe", - "env_variable": "VERSION_ID", - "default_value": "latest", - "user_viewable": true, - "user_editable": true, - "rules": "string|max:8", - "field_type": "text" - }, { "name": "Modpack Project ID", "description": "This is the modpack project ID from the Modrinth site.\r\n\r\nFor example, the project ID of 'https:\/\/modrinth.com\/modpack\/fabulously-optimized\/' is 1KVo5zza", @@ -54,6 +44,16 @@ "user_editable": true, "rules": "required|string|max:8", "field_type": "text" + }, + { + "name": "Modpack Version ID", + "description": "This is the modpack version ID from the Modrinth site.\r\n\r\nFor example, the version ID of 'https:\/\/modrinth.com\/modpack\/fabulously-optimized\/version\/4.7.4' is P9wA6exe", + "env_variable": "VERSION_ID", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "string|max:8", + "field_type": "text" } ] } \ No newline at end of file From a68f8e752990dd341708056c6090b2e0245b3eb4 Mon Sep 17 00:00:00 2001 From: David Katz Date: Sat, 6 May 2023 12:31:30 -0700 Subject: [PATCH 5/5] Use '@user_jvm_args.txt' if available --- game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json b/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json index 2859e9ff..2938c759 100644 --- a/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json +++ b/game_eggs/minecraft/java/modrinth/egg-modrinth-generic.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2023-05-05T18:13:15-07:00", + "exported_at": "2023-05-06T12:29:46-07:00", "name": "Modrinth Generic", "author": "contact@chromozone.dev", "description": "A generic egg for a Modrinth modpack.", @@ -20,7 +20,7 @@ "Java 17": "ghcr.io\/pterodactyl\/yolks:java_17" }, "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true $([[ ! -f unix_args.txt ]] && printf %s \"-jar `cat .serverjar`\" || printf %s \"@unix_args.txt\")", + "startup": "java $([[ -f user_jvm_args.txt ]] && printf %s \"@user_jvm_args.txt\") -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true $([[ ! -f unix_args.txt ]] && printf %s \"-jar `cat .serverjar`\" || printf %s \"@unix_args.txt\")", "config": { "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-ip\": \"0.0.0.0\",\r\n \"server-port\": \"{{server.build.default.port}}\",\r\n \"query.port\": \"{{server.build.default.port}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \")! For help, type \"\r\n}",