From ccf5be797f388e1a4720f477ba84a00e5a58c2c0 Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Tue, 18 Feb 2025 13:03:39 -0500 Subject: [PATCH 01/20] update velocity (#60) updates the velocity egg for pelican to match the pterodactyl one. --- proxy/java/velocity/egg-velocity.json | 44 +++++++++++++++++---------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/proxy/java/velocity/egg-velocity.json b/proxy/java/velocity/egg-velocity.json index 135418ca..80a88cf4 100644 --- a/proxy/java/velocity/egg-velocity.json +++ b/proxy/java/velocity/egg-velocity.json @@ -1,10 +1,10 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PTDL_v2", + "version": "PLCN_v1", "update_url": null }, - "exported_at": "2024-06-01T19:40:07+00:00", + "exported_at": "2025-02-12T03:43:07+00:00", "name": "Velocity", "author": "parker@parkervcp.com", "uuid": "44d20b6d-0a20-4144-a96c-71d214b3c850", @@ -24,62 +24,74 @@ "file_denylist": [], "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -XX:MaxInlineLevel=15 -jar {{SERVER_JARFILE}}", "config": { - "files": "{\r\n \"velocity.toml\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"bind = \": \"bind = \\\"0.0.0.0:{{server.build.default.port}}\\\"\"\r\n }\r\n }\r\n}", + "files": "{\r\n \"velocity.toml\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"bind = \": \"bind = \\\"0.0.0.0:{{server.allocations.default.port}}\\\"\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"Done (\"\r\n}", "logs": "{}", "stop": "end" }, "scripts": { "installation": { - "script": "#!\/bin\/ash\r\n# Velocity Proxy Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=velocity\r\n\r\nif [[ -z ${VELOCITY_VERSION} ]] || [[ ${VELOCITY_VERSION} == \"latest\" ]]; then\r\n VELOCITY_VERSION=\"latest\"\r\nfi\r\n\r\nif [[ -n \"${DOWNLOAD_LINK}\" ]]; then\r\n echo -e \"Using supplied download url: ${DOWNLOAD_LINK}\"\r\n DOWNLOAD_URL=$(eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g'))\r\nelse\r\n VER_EXISTS=$(curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT} | jq -r --arg VERSION $VELOCITY_VERSION '.versions[] | contains($VERSION)' | grep true)\r\n LATEST_VERSION=$(curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]')\r\n\r\nif [[ \"${VER_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Version is valid. Using version ${VELOCITY_VERSION}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} version\"\r\n VELOCITY_VERSION=${LATEST_VERSION}\r\nfi\r\n\r\nBUILD_EXISTS=$(curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true)\r\nLATEST_BUILD=$(curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION} | jq -r '.builds' | jq -r '.[-1]')\r\n\r\nif [[ \"${BUILD_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Build is valid for version ${VELOCITY_VERSION}. Using build ${BUILD_NUMBER}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} build for version ${VELOCITY_VERSION}\"\r\n BUILD_NUMBER=${LATEST_BUILD}\r\nfi\r\n\r\nJAR_NAME=${PROJECT}-${VELOCITY_VERSION}-${BUILD_NUMBER}.jar\r\necho \"Version being downloaded\"\r\necho -e \"Velocity Version: ${VELOCITY_VERSION}\"\r\necho -e \"Build: ${BUILD_NUMBER}\"\r\necho -e \"JAR Name of Build: ${JAR_NAME}\"\r\nDOWNLOAD_URL=https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION}\/builds\/${BUILD_NUMBER}\/downloads\/${JAR_NAME}\r\n\r\nfi\r\ncd \/mnt\/server\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [[ -f ${SERVER_JARFILE} ]]; then\r\nmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [[ -f velocity.toml ]]; then\r\n echo -e \"velocity config file exists\"\r\nelse\r\n echo -e \"downloading velocity config file.\"\r\n curl https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/proxy\/java\/velocity\/velocity.toml -o velocity.toml\r\nfi\r\n\r\nif [[ -f forwarding.secret ]]; then\r\n echo -e \"velocity forwarding secret file already exists\"\r\nelse\r\n echo -e \"creating forwarding secret file\"\r\n touch forwarding.secret\r\n date +%s | sha256sum | base64 | head -c 12 > forwarding.secret\r\nfi\r\n\r\necho -e \"install complete\"", + "script": "#!\/bin\/ash\r\n# Velocity Proxy Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=velocity\r\n\r\nif [[ -z ${VELOCITY_VERSION} ]] || [[ ${VELOCITY_VERSION} == \"latest\" ]]; then\r\n VELOCITY_VERSION=\"latest\"\r\nfi\r\n\r\nif [[ -n \"${DOWNLOAD_LINK}\" ]]; then\r\n echo -e \"Using supplied download url: ${DOWNLOAD_LINK}\"\r\n DOWNLOAD_URL=$(eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g'))\r\nelse\r\n VER_EXISTS=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r --arg VERSION $VELOCITY_VERSION '.versions[] | contains($VERSION)' | grep true)\r\n LATEST_VERSION=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]')\r\n\r\nif [[ \"${VER_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Version is valid. Using version ${VELOCITY_VERSION}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} version\"\r\n VELOCITY_VERSION=${LATEST_VERSION}\r\nfi\r\n\r\nBUILD_EXISTS=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true)\r\nLATEST_BUILD=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION} | jq -r '.builds' | jq -r '.[-1]')\r\n\r\nif [[ \"${BUILD_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Build is valid for version ${VELOCITY_VERSION}. Using build ${BUILD_NUMBER}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} build for version ${VELOCITY_VERSION}\"\r\n BUILD_NUMBER=${LATEST_BUILD}\r\nfi\r\n\r\nJAR_NAME=${PROJECT}-${VELOCITY_VERSION}-${BUILD_NUMBER}.jar\r\necho \"Version being downloaded\"\r\necho -e \"Velocity Version: ${VELOCITY_VERSION}\"\r\necho -e \"Build: ${BUILD_NUMBER}\"\r\necho -e \"JAR Name of Build: ${JAR_NAME}\"\r\nDOWNLOAD_URL=https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION}\/builds\/${BUILD_NUMBER}\/downloads\/${JAR_NAME}\r\n\r\nfi\r\n\r\ncd \/mnt\/server\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [[ -f ${SERVER_JARFILE} ]]; then\r\nmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [[ -f velocity.toml ]]; then\r\n echo -e \"velocity config file exists\"\r\nelse\r\n echo -e \"downloading velocity config file.\"\r\n curl https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/proxy\/java\/velocity\/velocity.toml -o velocity.toml\r\nfi\r\n\r\nif [[ -f forwarding.secret ]]; then\r\n echo -e \"velocity forwarding secret file already exists\"\r\nelse\r\n echo -e \"creating forwarding secret file\"\r\n touch forwarding.secret\r\n date +%s | sha256sum | base64 | head -c 12 > forwarding.secret\r\nfi\r\n\r\necho -e \"install complete\"", "container": "ghcr.io\/parkervcp\/installers:alpine", "entrypoint": "ash" } }, "variables": [ { + "sort": 1, "name": "Velocity Version", "description": "The Velocity Proxy version to download.\r\n\r\nSet to 'latest ' the download the last stable build.", "env_variable": "VELOCITY_VERSION", "default_value": "latest", "user_viewable": true, "user_editable": false, - "rules": "required|string|max:20", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "string", + "max:20" + ] }, { + "sort": 2, "name": "Server Jar File", "description": "Server Jarfile, by default this is set to 'velocity.jar'.\r\nSet it to otherwise if you wish to have a different jarfile name.", "env_variable": "SERVER_JARFILE", "default_value": "velocity.jar", "user_viewable": true, "user_editable": false, - "rules": "required|string|max:32|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "string", + "max:32", + "regex:\/^([\\w\\d._-]+)(\\.jar)$\/" + ] }, { + "sort": 3, "name": "Download Path", "description": "A URL to use to download a server.jar rather than the ones in the install script. This is not user viewable.", "env_variable": "DL_PATH", "default_value": "", "user_viewable": false, "user_editable": false, - "rules": "nullable|string", - "sort": null, - "field_type": "text" + "rules": [ + "nullable", + "string" + ] }, { + "sort": 4, "name": "Build Number", "description": "The build number for the velocity release.\r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", "env_variable": "BUILD_NUMBER", "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "string", + "max:20" + ] } ] } \ No newline at end of file From 35221c501eb6c21605a58c4f2b202e04f23d4d42 Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Tue, 18 Feb 2025 17:41:16 -0500 Subject: [PATCH 02/20] update templates update templates with correct links --- .github/ISSUE_TEMPLATE/bug-report.yml | 4 ++-- .github/ISSUE_TEMPLATE/config.yml | 2 +- .github/ISSUE_TEMPLATE/egg-request.yml | 2 +- .github/ISSUE_TEMPLATE/install-bug-report.yml | 4 ++-- .github/pull_request_template.md | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index dd1ac249..e2efe998 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -6,11 +6,11 @@ body: - type: markdown attributes: value: | - If you see any of the following, go to [Discord](https://discord.gg/pterodactyl) and report your error in a support channel. + If you see any of the following, go to [Discord](https://discord.gg/pelican-panel) and report your error in a support channel. * `A fatal error was encountered while starting this server.` * `No server egg configuration could be located; aborting startup.` - Make sure there are no existing bug reports by searching the [repository issues](https://github.com/parkervcp/eggs/issues?q=is%3Aopen+is%3Aissue+label%3ABug). + Make sure there are no existing bug reports by searching the [repository issues](https://github.com/pelican-eggs/minecraft/labels/bug). - type: input id: panel-version attributes: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 51392286..d921371d 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - name: ❓ Discord - url: https://discord.gg/pterodactyl + url: https://discord.gg/pelican-panel about: Please visit our Discord for support with configuration issues. diff --git a/.github/ISSUE_TEMPLATE/egg-request.yml b/.github/ISSUE_TEMPLATE/egg-request.yml index 3749c3ce..02d1be81 100644 --- a/.github/ISSUE_TEMPLATE/egg-request.yml +++ b/.github/ISSUE_TEMPLATE/egg-request.yml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Make sure there are no existing egg requests by searching the [repository issues](https://github.com/parkervcp/eggs/labels/egg%20request). Please understand how Pterodactyl works when you are requesting an egg. (ie. docker-compose doesn't work for a pterodactyl server) + Make sure there are no existing egg requests by searching the [repository issues](https://github.com/pelican-eggs/minecraft/labels/egg%20request). Please understand how Pterodactyl works when you are requesting an egg. (ie. docker-compose doesn't work for a pterodactyl server) - type: dropdown id: expand attributes: diff --git a/.github/ISSUE_TEMPLATE/install-bug-report.yml b/.github/ISSUE_TEMPLATE/install-bug-report.yml index bd1d2114..e41f3d1f 100644 --- a/.github/ISSUE_TEMPLATE/install-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/install-bug-report.yml @@ -6,11 +6,11 @@ body: - type: markdown attributes: value: | - If you see any of the following, go to [Discord](https://discord.gg/pterodactyl) and report your error in a support channel. + If you see any of the following, go to [Discord](https://discord.gg/pelican-panel) and report your error in a support channel. * `A fatal error was encountered while starting this server.` * `No server egg configuration could be located; aborting startup.` - Make sure there are no existing bug reports by searching the the issues for [install bugs](https://github.com/parkervcp/eggs/labels/install%20bug). + Make sure there are no existing bug reports by searching the the issues for [install bugs](https://github.com/pelican-eggs/minecraft/labels/install%20bug. - type: input id: panel-version attributes: diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c6f9007d..eaa7a4c4 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -6,7 +6,7 @@ -* [ ] Have you followed the guidelines in our [Contributing document](https://github.com/parkervcp/eggs/blob/master/CONTRIBUTING.md)? +* [ ] Have you followed the guidelines in our [Contributing document](https://github.com/pelican-eggs/minecraft/blob/main/CONTRIBUTING.md)? * [ ] Have you checked to ensure there aren't other open [Pull Requests](../pulls) for the same update/change? * [ ] Have you tested and reviewed your changes with confidence that everything works? * [ ] Did you branch your changes and PR from that branch and not from your master branch? From 702ae3c1e34062ac883b1f6c97e49d6abb96c304 Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Wed, 19 Feb 2025 22:17:34 -0500 Subject: [PATCH 03/20] cleaned up cleaned up the rest of the places where panels are mentioned --- .github/ISSUE_TEMPLATE/egg-request.yml | 2 +- CONTRIBUTING.md | 16 ++++++++-------- bedrock/PowerNukkitX/egg-power-nukkit-x.json | 2 +- bedrock/pocketmine_mp/egg-pocketmine-m-p.json | 2 +- .../egg-pterodactyl-pocketmine-m-p.json | 2 +- java/README.md | 2 +- java/cuberite/egg-cuberite.json | 2 +- java/krypton/egg-krypton.json | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/egg-request.yml b/.github/ISSUE_TEMPLATE/egg-request.yml index 02d1be81..f6620f18 100644 --- a/.github/ISSUE_TEMPLATE/egg-request.yml +++ b/.github/ISSUE_TEMPLATE/egg-request.yml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Make sure there are no existing egg requests by searching the [repository issues](https://github.com/pelican-eggs/minecraft/labels/egg%20request). Please understand how Pterodactyl works when you are requesting an egg. (ie. docker-compose doesn't work for a pterodactyl server) + Make sure there are no existing egg requests by searching the [repository issues](https://github.com/pelican-eggs/minecraft/labels/egg%20request). Please understand how the panel works when you are requesting an egg. (ie. docker-compose doesn't work for a pterodactyl server) - type: dropdown id: expand attributes: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6d5a6a10..f5e9636e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # How to contribute -You can contribute by either creating a new pull request or testing [existing pull requests](https://github.com/parkervcp/eggs/pulls) and commenting on whether the egg works for you or not. Testing is very important and helpful! +You can contribute by either creating a new pull request or testing [existing pull requests](https://github.com/pelican-eggs/minecraft/pulls) and commenting on whether the egg works for you or not. Testing is very important and helpful! ## General rules for eggs @@ -15,10 +15,10 @@ You can contribute by either creating a new pull request or testing [existing pu We don't need 8 miles of the install script. 4. Keep it small. - Only use what is absolutely needed. The [yolks install images](https://github.com/parkervcp/yolks#installation-images) already contain the most basic packages that speeds up the installation process. + Only use what is absolutely needed. The [yolks install images](https://github.com/pelican-eggs/yolks?tab=readme-ov-file#installation-images) already contain the most basic packages that speeds up the installation process. 5. Use the stock images. - If you need something in an image, open a PR in [my yolks repo](https://github.com/parkervcp/yolks) where it can be reviewed and built. Self-hosted or third-party images won't be accepted for security reasons. + If you need something in an image, open a PR in [Pelican Yolks Repo](https://github.com/pelican-eggs/yolks) where it can be reviewed and built. Self-hosted or third-party images won't be accepted for security reasons. 6. Export eggs from the panel We ask that you use the panel to manage and export eggs. @@ -26,17 +26,17 @@ You can contribute by either creating a new pull request or testing [existing pu ### Sources for working on a new egg -Look at existing eggs to see how they work. In most cases, you can take the existing egg as your new template. There's a brief documentation on how to [create eggs](https://pterodactyl.io/community/config/eggs/creating_a_custom_egg.html) and [Docker images](https://pterodactyl.io/community/config/eggs/creating_a_custom_image.html). +Look at existing eggs to see how they work. In most cases, you can take the existing egg as your new template. There's a brief documentation on how to [create eggs](https://pelican.dev/community/config/eggs/creating_a_custom_egg.html) and [Docker images](https://pelican.dev/community/config/eggs/creating_a_custom_image.html). -Use existing Docker images for your egg. You can find them in [Parkers Yolks fork](https://github.com/parkervcp/yolks) and [Pterodactyl Yolks](https://github.com/pterodactyl/yolks). +Use existing Docker images for your egg. You can find them in [Pelican Yolks](https://github.com/pelican-eggs/yolks). -We have a collection of [existing install script snippets](https://github.com/parkervcp/eggs/tree/master/scripts) that you can use. +We have a collection of [existing install script snippets](https://github.com/pelican-eggs/eggs/tree/master/scripts) that you can use. ## Step 1 -### Be aware of the pterodactyl install process +### Be aware of the Pelican/Pterodactyl install process -The Pterodactyl install process is fairly simple once you know it. +The install process is fairly simple once you know it. ```md 1. Spin up install container diff --git a/bedrock/PowerNukkitX/egg-power-nukkit-x.json b/bedrock/PowerNukkitX/egg-power-nukkit-x.json index 2877556d..1653f546 100644 --- a/bedrock/PowerNukkitX/egg-power-nukkit-x.json +++ b/bedrock/PowerNukkitX/egg-power-nukkit-x.json @@ -8,7 +8,7 @@ "name": "PowerNukkitX", "author": "powernukkitx@github.com", "uuid": "27250406-1acf-4dce-b39f-3413cc290b64", - "description": "PowerNukkitX support for Pterodactyl", + "description": "PowerNukkitX support for Pelican", "features": null, "docker_images": { "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" diff --git a/bedrock/pocketmine_mp/egg-pocketmine-m-p.json b/bedrock/pocketmine_mp/egg-pocketmine-m-p.json index e8a52930..1432291a 100644 --- a/bedrock/pocketmine_mp/egg-pocketmine-m-p.json +++ b/bedrock/pocketmine_mp/egg-pocketmine-m-p.json @@ -8,7 +8,7 @@ "name": "PocketmineMP", "author": "info@swisscrafting.ch", "uuid": "4c3baab1-67ad-48c7-8acd-eb3deaa0a462", - "description": "Pocketmine Egg\r\nby onekintaro from swisscrafting.ch\r\nwith the nice help from #eggs Channel on Pterodactyl-Discord :)", + "description": "Pocketmine Egg\r\nby onekintaro from swisscrafting.ch\r\nwith the nice help from #eggs Channel on Pelican Discord :)", "features": null, "docker_images": { "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" diff --git a/bedrock/pocketmine_mp/egg-pterodactyl-pocketmine-m-p.json b/bedrock/pocketmine_mp/egg-pterodactyl-pocketmine-m-p.json index c319489c..fb64f0a9 100644 --- a/bedrock/pocketmine_mp/egg-pterodactyl-pocketmine-m-p.json +++ b/bedrock/pocketmine_mp/egg-pterodactyl-pocketmine-m-p.json @@ -7,7 +7,7 @@ "exported_at": "2024-11-29T11:53:20+01:00", "name": "PocketmineMP", "author": "info@swisscrafting.ch", - "description": "Pocketmine Egg\r\nby onekintaro from swisscrafting.ch\r\nwith the nice help from #eggs Channel on Pterodactyl-Discord :)", + "description": "Pocketmine Egg\r\nby onekintaro from swisscrafting.ch\r\nwith the nice help from #eggs Channel on Pelican Discord :)", "features": null, "docker_images": { "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" diff --git a/java/README.md b/java/README.md index f0865dc2..eeb2dce7 100644 --- a/java/README.md +++ b/java/README.md @@ -117,7 +117,7 @@ A collection of spigot and forked spigot eggs. [PaperMC GitHub](https://github.com/PaperMC/Paper) High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies -Currently the default on pterodactyl for many reasons. First being that you don't need to build the jar. +Currently the default for many reasons. First being that you don't need to build the jar. ### [Folia](folia) diff --git a/java/cuberite/egg-cuberite.json b/java/cuberite/egg-cuberite.json index 1b09c301..6911159c 100644 --- a/java/cuberite/egg-cuberite.json +++ b/java/cuberite/egg-cuberite.json @@ -37,7 +37,7 @@ "name": "Server Description", "description": "Server Description", "env_variable": "SERV_DESC", - "default_value": "Cuberite on Pterodactyl!", + "default_value": "Cuberite on Pelican!", "user_viewable": true, "user_editable": true, "rules": "nullable|string", diff --git a/java/krypton/egg-krypton.json b/java/krypton/egg-krypton.json index 4c796359..513296e7 100644 --- a/java/krypton/egg-krypton.json +++ b/java/krypton/egg-krypton.json @@ -31,7 +31,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n#\r\n# Krypton installation script for Pterodactyl\r\n# Created by BomBardyGamer\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\napt-get update\r\napt-get install -y curl jq unzip\r\n\r\ncd \/mnt\/server\r\nif [ -z \"${KRYPTON_VERSION}\" ] || [ \"${KRYPTON_VERSION}\" == \"latest\" ]; then\r\n KRYPTON_VERSION=\"lastSuccessfulBuild\"\r\nfi\r\n\r\nBASE_URL=\"https:\/\/ci.kryptonmc.org\/job\/Krypton\/${KRYPTON_VERSION}\"\r\nARTIFACT=`curl \"${BASE_URL}\/api\/json?tree=artifacts%5BrelativePath%5D\" | jq '.artifacts[0].relativePath' | sed 's\/\"\/\/g'`\r\n\r\ncurl -o ${SERVER_JAR} ${BASE_URL}\/artifact\/${ARTIFACT}\r\nunzip ${SERVER_JAR} \"config.conf\"", + "script": "#!\/bin\/bash\r\n#\r\n# Krypton installation script for Pelican\r\n# Created by BomBardyGamer\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\napt-get update\r\napt-get install -y curl jq unzip\r\n\r\ncd \/mnt\/server\r\nif [ -z \"${KRYPTON_VERSION}\" ] || [ \"${KRYPTON_VERSION}\" == \"latest\" ]; then\r\n KRYPTON_VERSION=\"lastSuccessfulBuild\"\r\nfi\r\n\r\nBASE_URL=\"https:\/\/ci.kryptonmc.org\/job\/Krypton\/${KRYPTON_VERSION}\"\r\nARTIFACT=`curl \"${BASE_URL}\/api\/json?tree=artifacts%5BrelativePath%5D\" | jq '.artifacts[0].relativePath' | sed 's\/\"\/\/g'`\r\n\r\ncurl -o ${SERVER_JAR} ${BASE_URL}\/artifact\/${ARTIFACT}\r\nunzip ${SERVER_JAR} \"config.conf\"", "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } From 600aae8050a739dfdf810c9bbf4b5d254312d663 Mon Sep 17 00:00:00 2001 From: "Michael (Parker) Parker" Date: Sat, 22 Feb 2025 10:08:32 -0500 Subject: [PATCH 04/20] update install bug report template --- .github/ISSUE_TEMPLATE/install-bug-report.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/install-bug-report.yml b/.github/ISSUE_TEMPLATE/install-bug-report.yml index e41f3d1f..07b3804d 100644 --- a/.github/ISSUE_TEMPLATE/install-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/install-bug-report.yml @@ -79,8 +79,14 @@ body: description: | Run the command below on the SSH terminal of your Wings machine and provide the link to logs. + Pelican: ``` - tail -n 1000 $(ls -Alrt /var/log/pterodactyl/install/*.log | tail -1 | sed 's/ */ /g' | cut -s -d' ' -f9) | nc pteropaste.com 99 + tail -n 1000 $(ls -Alrt /var/log/pelican/install/*.log | tail -1 | sed 's/ */ /g' | cut -s -d' ' -f9) | curl -X POST -F 'c=@-' paste.pelistuff.com + ``` + + Pterodactyl: + ``` + tail -n 1000 $(ls -Alrt /var/log/pterodactyl/install/*.log | tail -1 | sed 's/ */ /g' | cut -s -d' ' -f9) | nc pteropaste.com 99 ``` placeholder: | https://pteropaste.com/exampleLogs From 2d8e02a562c92a789f88b96e312d64a6dc5ac4ec Mon Sep 17 00:00:00 2001 From: zDqrK404 Date: Sat, 29 Mar 2025 14:47:38 +0600 Subject: [PATCH 05/20] [Bedrock Vanilla] Add Multiple World choose options (#67) * [Bedrock Vanilla] Add Multiple World choose options Added a Startup Variable Option which will point to the World Folder Name in the Directory and thus Choosing between Multiple Worlds more Easily * apply to the pelican egg --------- Co-authored-by: Quinten <67589015+QuintenQVD0@users.noreply.github.com> --- .../egg-pterodactyl-vanilla-bedrock.json | 16 +++- bedrock/bedrock/egg-vanilla-bedrock.json | 75 +++++++++++++------ 2 files changed, 67 insertions(+), 24 deletions(-) diff --git a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json index ffdbdc7f..cb91b10f 100644 --- a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json +++ b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2024-09-24T13:43:28-07:00", + "exported_at": "2025-03-28T16:22:19+06:00", "name": "Vanilla Bedrock", "author": "parker@parkervcp.com", "description": "Bedrock Edition (also known as the Bedrock Version, Bedrock Codebase, Bedrock Engine or just Bedrock) refers to the multi-platform family of editions of Minecraft developed by Mojang AB, Microsoft Studios, 4J Studios, and SkyBox Labs. Prior to this term, as the engine originated with Pocket Edition, this entire product family was referred to as \"Pocket Edition\", \"MCPE\", or \"Pocket\/Windows 10 Edition\".", @@ -17,7 +17,7 @@ "file_denylist": [], "startup": ".\/bedrock_server", "config": { - "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-port\": \"{{server.build.default.port}}\",\r\n \"server-name\": \"{{server.build.env.SERVERNAME}}\",\r\n \"gamemode\": \"{{server.build.env.GAMEMODE}}\",\r\n \"difficulty\": \"{{server.build.env.DIFFICULTY}}\",\r\n \"allow-cheats\": \"{{server.build.env.CHEATS}}\"\r\n }\r\n }\r\n}", + "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-port\": \"{{server.build.default.port}}\",\r\n \"server-name\": \"{{server.build.env.SERVERNAME}}\",\r\n \"gamemode\": \"{{server.build.env.GAMEMODE}}\",\r\n \"difficulty\": \"{{server.build.env.DIFFICULTY}}\",\r\n \"level-name\": \"{{server.build.env.WORLDNAME}}\",\r\n \"allow-cheats\": \"{{server.build.env.CHEATS}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"Server started\"\r\n}", "logs": "{}", "stop": "stop" @@ -89,6 +89,16 @@ "user_editable": true, "rules": "required|string|in:true,false", "field_type": "text" + }, + { + "name": "Choose World", + "description": "If you have multiple world files, Enter the World Folder Name you want to Select to Start the Server", + "env_variable": "WORLDNAME", + "default_value": "default", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:100", + "field_type": "text" } ] -} \ No newline at end of file +} diff --git a/bedrock/bedrock/egg-vanilla-bedrock.json b/bedrock/bedrock/egg-vanilla-bedrock.json index 527f5919..2b5f89ee 100644 --- a/bedrock/bedrock/egg-vanilla-bedrock.json +++ b/bedrock/bedrock/egg-vanilla-bedrock.json @@ -1,14 +1,15 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PTDL_v2", + "version": "PLCN_v1", "update_url": null }, - "exported_at": "2024-09-25T01:03:44+00:00", + "exported_at": "2025-03-29T08:45:01+00:00", "name": "Vanilla Bedrock", "author": "parker@parkervcp.com", "uuid": "a03036b8-8c1b-4c8a-80be-018baad3dcaf", "description": "Bedrock Edition (also known as the Bedrock Version, Bedrock Codebase, Bedrock Engine or just Bedrock) refers to the multi-platform family of editions of Minecraft developed by Mojang AB, Microsoft Studios, 4J Studios, and SkyBox Labs. Prior to this term, as the engine originated with Pocket Edition, this entire product family was referred to as \"Pocket Edition\", \"MCPE\", or \"Pocket\/Windows 10 Edition\".", + "tags": [], "features": [ "pid_limit" ], @@ -18,7 +19,7 @@ "file_denylist": [], "startup": ".\/bedrock_server", "config": { - "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-port\": \"{{server.allocations.default.port}}\",\r\n \"server-name\": \"{{server.environment.SERVERNAME}}\",\r\n \"gamemode\": \"{{server.environment.GAMEMODE}}\",\r\n \"difficulty\": \"{{server.environment.DIFFICULTY}}\",\r\n \"allow-cheats\": \"{{server.environment.CHEATS}}\"\r\n }\r\n }\r\n}", + "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-port\": \"{{server.allocations.default.port}}\",\r\n \"server-name\": \"{{server.environment.SERVERNAME}}\",\r\n \"gamemode\": \"{{server.environment.GAMEMODE}}\",\r\n \"difficulty\": \"{{server.environment.DIFFICULTY}}\",\r\n \"level-name\": \"{{server.environment.WORLDNAME}}\",\r\n \"allow-cheats\": \"{{server.environment.CHEATS}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"Server started\"\r\n}", "logs": "{}", "stop": "stop" @@ -32,70 +33,102 @@ }, "variables": [ { - "sort": 1, "name": "Bedrock Version", "description": "The version of bedrock. (Ex. 1.7.0.13)\r\n\r\nDefault version is latest.", "env_variable": "BEDROCK_VERSION", "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20", - "field_type": "text" + "rules": [ + "required", + "string", + "max:20" + ], + "sort": null }, { - "sort": 2, "name": "ld lib path", "description": "Dumb reasons to need this", "env_variable": "LD_LIBRARY_PATH", "default_value": ".", "user_viewable": false, "user_editable": false, - "rules": "required|string|max:20", - "field_type": "text" + "rules": [ + "required", + "string", + "max:20" + ], + "sort": null }, { - "sort": 3, "name": "Server Name", "description": "The name for the server", "env_variable": "SERVERNAME", "default_value": "Bedrock Dedicated Server", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:50", - "field_type": "text" + "rules": [ + "required", + "string", + "max:50" + ], + "sort": null }, { - "sort": 4, "name": "Gamemode", "description": "Allowed values: \"survival\", \"creative\", or \"adventure\"", "env_variable": "GAMEMODE", "default_value": "survival", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:survival,creative,adventure", - "field_type": "text" + "rules": [ + "required", + "string", + "in:survival,creative,adventure" + ], + "sort": null }, { - "sort": 5, "name": "Difficulty", "description": "Allowed values: \"peaceful\", \"easy\", \"normal\", or \"hard\"", "env_variable": "DIFFICULTY", "default_value": "easy", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:peaceful,easy,normal,hard", - "field_type": "text" + "rules": [ + "required", + "string", + "in:peaceful,easy,normal,hard" + ], + "sort": null }, { - "sort": 6, "name": "Allow cheats", "description": "If true then cheats like commands can be used.\r\n\r\nAllowed values: \"true\" or \"false\"", "env_variable": "CHEATS", "default_value": "false", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false", - "field_type": "text" + "rules": [ + "required", + "string", + "in:true,false" + ], + "sort": null + }, + { + "name": "Choose World", + "description": "If you have multiple world files, Enter the World Folder Name you want to Select to Start the Server", + "env_variable": "WORLDNAME", + "default_value": "default", + "user_viewable": true, + "user_editable": true, + "rules": [ + "required", + "string", + "max:100" + ], + "sort": null } ] } \ No newline at end of file From 36d722b357536cbd97d0d38da1cda9b2b80f87d5 Mon Sep 17 00:00:00 2001 From: Siebren Bakker Date: Sat, 24 May 2025 10:58:21 -0400 Subject: [PATCH 06/20] Added neoforge loader installer to curseforge-gen (#76) * Added neoforge loader installer to curseforge-gen Automatically detect and load the neoforge version for modpacks * Pelican export --------- Co-authored-by: Quinten <67589015+QuintenQVD0@users.noreply.github.com> --- java/curseforge/egg-curse-forge-generic.json | 19 ++++++++++--------- .../egg-pterodactyl-curse-forge-generic.json | 6 +++--- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/java/curseforge/egg-curse-forge-generic.json b/java/curseforge/egg-curse-forge-generic.json index fbeb6b3f..46c609ee 100644 --- a/java/curseforge/egg-curse-forge-generic.json +++ b/java/curseforge/egg-curse-forge-generic.json @@ -4,11 +4,12 @@ "version": "PLCN_v1", "update_url": null }, - "exported_at": "2024-12-27T10:13:29+00:00", + "exported_at": "2025-05-23T13:10:20+00:00", "name": "CurseForge Generic", "author": "contact@chromozone.dev", "uuid": "019bbf16-a3f3-470a-9c0b-f3995b5e032a", "description": "A generic egg for a CurseForge modpack.", + "tags": [], "features": [ "eula", "java_version", @@ -31,14 +32,13 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# shellcheck disable=SC2155\r\n#\r\n# CurseForge 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: \"${API_KEY:=}\"\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 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 > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nCURSEFORGE_API_URL=\"https:\/\/api.curseforge.com\/v1\/mods\/\"\r\nCURSEFORGE_API_HEADERS=(\"--header=Accept: application\/json\" \"--header=x-api-key: ${API_KEY}\")\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving CurseForge project information...\"\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ 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 local IS_SERVER_PACK=false\r\n\r\n if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo file ID specified, using latest file\"\r\n VERSION_ID=$(echo \"$PROJECT_DATA\" | jq -r '.data.mainFileId \/\/ empty')\r\n\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .isServerPack')\"\r\n local VERSION_SERVER_ID=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .serverPackFileId')\"\r\n\r\n if [[ \"${VERSION_SERVER_PACK}\" == \"false\" && -n \"${VERSION_SERVER_ID}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_ID}'\"\r\n VERSION_ID=$VERSION_SERVER_ID\r\n IS_SERVER_PACK=true\r\n elif [[ \"${VERSION_SERVER_PACK}\" == \"true\" ]]; then\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n echo -e \"\\tChecking if provided file id '${VERSION_ID}' exists\"\r\n\r\n local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.serverPackFileId \/\/ empty')\"\r\n if [[ -n \"${VERSION_SERVER_PACK}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_PACK}'\"\r\n VERSION_ID=$VERSION_SERVER_PACK\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n IS_SERVER_PACK=true\r\n fi\r\n fi\r\n\r\n # Check if version id is unset or empty string\r\n if [[ -z \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No file id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n echo -e \"\\tWARNING: File id '${VERSION_ID}' is not a server pack, attempting to use client files\"\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 \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\/download-url\" -O -)\r\n\r\n if [[ -z \"${JSON_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve file data for file id '${VERSION_ID}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file ${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 \"Download failed!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nfunction get_loader {\r\n echo -e \"Retrieving loader information...\"\r\n\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ empty')\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 local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n local IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n local CLIENT_VERSION_ID;\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"true\" ]]; then\r\n CLIENT_VERSION_ID=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.parentProjectFileId \/\/ empty')\"\r\n else\r\n CLIENT_VERSION_ID=$VERSION_ID\r\n fi\r\n\r\n if [[ -z \"${CLIENT_VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tRetrieving file information for '${CLIENT_VERSION_ID}'\"\r\n local JSON_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${CLIENT_VERSION_ID}\/download-url\" -O -)\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file id ${CLIENT_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 client.zip\r\n\r\n echo -e \"\\tUnpacking client manifest\"\r\n unzip -jo client.zip manifest.json -d \"${SERVER_DIR}\"\r\n mv \"${SERVER_DIR}\/manifest.json\" \"${SERVER_DIR}\/client.manifest.json\" # rename to avoid conflicts with main manifest\r\n rm -rf client.zip\r\n\r\n echo -e \"\\tParsing client manifest\"\r\n local MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n\r\n LOADER_ID=$(jq -r '.minecraft.modLoaders[]? | select(.primary == true) | .id' \"${MANIFEST}\")\r\n LOADER_NAME=$(echo \"${LOADER_ID}\" | cut -d'-' -f1)\r\n LOADER_VERSION=$(echo \"${LOADER_ID}\" | cut -d'-' -f2)\r\n\r\n if [[ -z \"${LOADER_NAME}\" || -z \"${LOADER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No loader found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n MINECRAFT_VERSION=$(jq -r '.minecraft.version \/\/ empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MINECRAFT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No minecraft version found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tFound loader ${LOADER_NAME} ${LOADER_VERSION} for Minecraft ${MINECRAFT_VERSION}\"\r\n}\r\n\r\nfunction unzip-strip() (\r\n set -u\r\n\r\n local archive=$1\r\n local destdir=${2:-}\r\n shift; shift || :\r\n echo -e \"\\tUnpacking ${archive} to ${destdir}\"\r\n\r\n echo -e \"\\tCreating temporary directory\"\r\n local tmpdir=\/mnt\/server\/tmp\r\n if ! mkdir -p \"${tmpdir}\"; then\r\n echo -e \"\\tERROR: mkdir failed to create temporary directory\"\r\n return 1\r\n fi\r\n\r\n trap 'rm -rf -- \"$tmpdir\"' EXIT\r\n\r\n echo -e \"\\tUnpacking archive\"\r\n\r\n if ! unzip -q \"$archive\" -d \"$tmpdir\"; then\r\n echo -e \"\\tERROR: unzip failed to unpack archive\"\r\n return 1\r\n fi\r\n\r\n echo -e \"\\tSetting glob settings\"\r\n\r\n shopt -s dotglob\r\n\r\n echo -e \"\\tCleaning up directory structure\"\r\n\r\n local files=(\"$tmpdir\"\/*) name i=1\r\n\r\n if (( ${#files[@]} == 1 )) && [[ -d \"${files[0]}\" ]]; then\r\n name=$(basename \"${files[0]}\")\r\n files=(\"$tmpdir\"\/*\/*)\r\n else\r\n name=$(basename \"$archive\"); name=${archive%.*}\r\n files=(\"$tmpdir\"\/*)\r\n fi\r\n\r\n if [[ -z \"$destdir\" ]]; then\r\n destdir=.\/\"$name\"\r\n fi\r\n\r\n while [[ -f \"$destdir\" ]]; do\r\n destdir=${destdir}-$((i++));\r\n done\r\n\r\n echo -e \"\\tCopying files to ${destdir}\"\r\n\r\n mkdir -p \"$destdir\"\r\n cp -ar \"$@\" -t \"$destdir\" -- \"${files[@]}\"\r\n rm -rf \"$tmpdir\"\r\n)\r\n\r\nfunction unpack_zip {\r\n echo -e \"Unpacking server files...\"\r\n unzip-strip server.zip \"${SERVER_DIR}\"\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}\/manifest.json\"\r\n jq -c '.files[]? | select(.required == true) | {project: .projectID, file: .fileID}' \"${MANIFEST}\" | while read -r mod; do\r\n local MOD_PROJECT_ID=$(echo \"${mod}\" | jq -r '.project \/\/ empty')\r\n local MOD_FILE_ID=$(echo \"${mod}\" | jq -r '.file \/\/ empty')\r\n\r\n if [[ -z \"${MOD_PROJECT_ID}\" || -z \"${MOD_FILE_ID}\" ]]; then\r\n echo -e \"\\tERROR: Failed to parse project id or file id for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n local FILE_URL=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${MOD_PROJECT_ID}\/files\/${MOD_FILE_ID}\/download-url\" -O - | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\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 ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\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 cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/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 MC_VERSION=$MINECRAFT_VERSION\r\n local FORGE_VERSION=$LOADER_VERSION\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 # Remove old Forge files so we can safely update\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 MC_VERSION=$MINECRAFT_VERSION\r\n local FABRIC_VERSION=$LOADER_VERSION\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\"\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\"\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 MC_VERSION=$MINECRAFT_VERSION\r\n local QUILT_VERSION=$LOADER_VERSION\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_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found\"\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\"\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\nNEOFORGE_INSTALLER_URL=\"https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/neoforge\/\"\r\n\r\nfunction json_download_neoforge {\r\n echo \"Downloading NeoForge...\"\r\n\r\n local NEOFORGE_VERSION=$LOADER_VERSION\r\n \r\n local NEOFORGE_JAR=\"neoforge-${NEOFORGE_VERSION}.jar\"\r\n\r\n local NEOFORGE_URL=\"${NEOFORGE_INSTALLER_URL}${NEOFORGE_VERSION}\/neoforge-${NEOFORGE_VERSION}\"\r\n\r\n echo -e \"\\tUsing Forge ${NEOFORGE_VERSION} from ${NEOFORGE_URL}\"\r\n\r\n local NEOFORGE_INSTALLER=\"${NEOFORGE_URL}-installer.jar\"\r\n echo -e \"\\tDownloading Forge Installer ${NEOFORGE_VERSION} from ${NEOFORGE_INSTALLER}\"\r\n\r\n if ! wget -q -O neoforge-installer.jar \"${NEOFORGE_INSTALLER}\"; then\r\n echo -e \"\\tERROR: Failed to download NeoForge Installer ${NEOFORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n # Remove old NeoForge files so we can safely update\r\n rm -rf libraries\/net\/neoforged\/neoforge\r\n rm -f unix_args.txt\r\n\r\n echo -e \"\\tInstalling NeoForge Server ${FORGE_VERSION}\"\r\n if ! java -jar neoforge-installer.jar --installServer > \/dev\/null 2>&1; then\r\n echo -e \"\\tERROR: Failed to install NeoForge Server ${FORGE_VERSION}\"\r\n exit 1\r\n fi\r\n echo -e \"\\tSetting up Forge Unix arguments\"\r\n ln -sf libraries\/net\/neoforged\/neoforge\/*\/unix_args.txt unix_args.txt\r\n\r\n rm -f neoforge-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\nfi\r\n\r\nget_loader\r\nunpack_zip\r\n\r\nif [[ -f \"${SERVER_DIR}\/manifest.json\" ]]; then\r\n echo \"Found manifest.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/client.manifest.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n\r\n if [[ $LOADER_NAME == \"forge\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"fabric\" ]]; then\r\n json_download_fabric\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"quilt\" ]]; then\r\n json_download_quilt\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"neoforge\" ]]; then\r\n json_download_neoforge\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# CurseForge 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: \"${API_KEY:=}\"\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 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 > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nCURSEFORGE_API_URL=\"https:\/\/api.curseforge.com\/v1\/mods\/\"\r\nCURSEFORGE_API_HEADERS=(\"--header=Accept: application\/json\" \"--header=x-api-key: ${API_KEY}\")\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving CurseForge project information...\"\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ 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 local IS_SERVER_PACK=false\r\n\r\n if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo file ID specified, using latest file\"\r\n VERSION_ID=$(echo \"$PROJECT_DATA\" | jq -r '.data.mainFileId \/\/ empty')\r\n\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .isServerPack')\"\r\n local VERSION_SERVER_ID=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .serverPackFileId')\"\r\n\r\n if [[ \"${VERSION_SERVER_PACK}\" == \"false\" && -n \"${VERSION_SERVER_ID}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_ID}'\"\r\n VERSION_ID=$VERSION_SERVER_ID\r\n IS_SERVER_PACK=true\r\n elif [[ \"${VERSION_SERVER_PACK}\" == \"true\" ]]; then\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n echo -e \"\\tChecking if provided file id '${VERSION_ID}' exists\"\r\n\r\n local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.serverPackFileId \/\/ empty')\"\r\n if [[ -n \"${VERSION_SERVER_PACK}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_PACK}'\"\r\n VERSION_ID=$VERSION_SERVER_PACK\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n IS_SERVER_PACK=true\r\n fi\r\n fi\r\n\r\n # Check if version id is unset or empty string\r\n if [[ -z \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No file id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n echo -e \"\\tWARNING: File id '${VERSION_ID}' is not a server pack, attempting to use client files\"\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 \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\/download-url\" -O -)\r\n\r\n if [[ -z \"${JSON_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve file data for file id '${VERSION_ID}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file ${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 \"Download failed!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nfunction get_loader {\r\n echo -e \"Retrieving loader information...\"\r\n\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ empty')\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 local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n local IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n local CLIENT_VERSION_ID;\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"true\" ]]; then\r\n CLIENT_VERSION_ID=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.parentProjectFileId \/\/ empty')\"\r\n else\r\n CLIENT_VERSION_ID=$VERSION_ID\r\n fi\r\n\r\n if [[ -z \"${CLIENT_VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tRetrieving file information for '${CLIENT_VERSION_ID}'\"\r\n local JSON_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${CLIENT_VERSION_ID}\/download-url\" -O -)\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file id ${CLIENT_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 client.zip\r\n\r\n echo -e \"\\tUnpacking client manifest\"\r\n unzip -jo client.zip manifest.json -d \"${SERVER_DIR}\"\r\n mv \"${SERVER_DIR}\/manifest.json\" \"${SERVER_DIR}\/client.manifest.json\" # rename to avoid conflicts with main manifest\r\n rm -rf client.zip\r\n\r\n echo -e \"\\tParsing client manifest\"\r\n local MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n\r\n LOADER_ID=$(jq -r '.minecraft.modLoaders[]? | select(.primary == true) | .id' \"${MANIFEST}\")\r\n LOADER_NAME=$(echo \"${LOADER_ID}\" | cut -d'-' -f1)\r\n LOADER_VERSION=$(echo \"${LOADER_ID}\" | cut -d'-' -f2)\r\n\r\n if [[ -z \"${LOADER_NAME}\" || -z \"${LOADER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No loader found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n MINECRAFT_VERSION=$(jq -r '.minecraft.version \/\/ empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MINECRAFT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No minecraft version found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tFound loader ${LOADER_NAME} ${LOADER_VERSION} for Minecraft ${MINECRAFT_VERSION}\"\r\n}\r\n\r\nfunction unzip-strip() (\r\n set -u\r\n\r\n local archive=$1\r\n local destdir=${2:-}\r\n shift; shift || :\r\n echo -e \"\\tUnpacking ${archive} to ${destdir}\"\r\n\r\n echo -e \"\\tCreating temporary directory\"\r\n local tmpdir=\/mnt\/server\/tmp\r\n if ! mkdir -p \"${tmpdir}\"; then\r\n echo -e \"\\tERROR: mkdir failed to create temporary directory\"\r\n return 1\r\n fi\r\n\r\n trap 'rm -rf -- \"$tmpdir\"' EXIT\r\n\r\n echo -e \"\\tUnpacking archive\"\r\n\r\n if ! unzip -q \"$archive\" -d \"$tmpdir\"; then\r\n echo -e \"\\tERROR: unzip failed to unpack archive\"\r\n return 1\r\n fi\r\n\r\n echo -e \"\\tSetting glob settings\"\r\n\r\n shopt -s dotglob\r\n\r\n echo -e \"\\tCleaning up directory structure\"\r\n\r\n local files=(\"$tmpdir\"\/*) name i=1\r\n\r\n if (( ${#files[@]} == 1 )) && [[ -d \"${files[0]}\" ]]; then\r\n name=$(basename \"${files[0]}\")\r\n files=(\"$tmpdir\"\/*\/*)\r\n else\r\n name=$(basename \"$archive\"); name=${archive%.*}\r\n files=(\"$tmpdir\"\/*)\r\n fi\r\n\r\n if [[ -z \"$destdir\" ]]; then\r\n destdir=.\/\"$name\"\r\n fi\r\n\r\n while [[ -f \"$destdir\" ]]; do\r\n destdir=${destdir}-$((i++));\r\n done\r\n\r\n echo -e \"\\tCopying files to ${destdir}\"\r\n\r\n mkdir -p \"$destdir\"\r\n cp -ar \"$@\" -t \"$destdir\" -- \"${files[@]}\"\r\n rm -rf \"$tmpdir\"\r\n)\r\n\r\nfunction unpack_zip {\r\n echo -e \"Unpacking server files...\"\r\n unzip-strip server.zip \"${SERVER_DIR}\"\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}\/manifest.json\"\r\n jq -c '.files[]? | select(.required == true) | {project: .projectID, file: .fileID}' \"${MANIFEST}\" | while read -r mod; do\r\n local MOD_PROJECT_ID=$(echo \"${mod}\" | jq -r '.project \/\/ empty')\r\n local MOD_FILE_ID=$(echo \"${mod}\" | jq -r '.file \/\/ empty')\r\n\r\n if [[ -z \"${MOD_PROJECT_ID}\" || -z \"${MOD_FILE_ID}\" ]]; then\r\n echo -e \"\\tERROR: Failed to parse project id or file id for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n local FILE_URL=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${MOD_PROJECT_ID}\/files\/${MOD_FILE_ID}\/download-url\" -O - | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\r\n continue\r\n fi\r\n\r\n echo -e \"\\tDownloading ${FILE_URL}\"\r\n\r\n if ! wget -q -nc \"${FILE_URL}\" -P \"${SERVER_DIR}\/mods\"; then\r\n echo -e \"\\tERROR: Failed to download mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\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 cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/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 MC_VERSION=$MINECRAFT_VERSION\r\n local FORGE_VERSION=$LOADER_VERSION\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 # Remove old Forge files so we can safely update\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 MC_VERSION=$MINECRAFT_VERSION\r\n local FABRIC_VERSION=$LOADER_VERSION\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\"\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\"\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 MC_VERSION=$MINECRAFT_VERSION\r\n local QUILT_VERSION=$LOADER_VERSION\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_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found\"\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\"\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\nNEOFORGE_DOWNLOAD_URL=\"https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/\"\r\n\r\nfunction json_download_neoforge {\r\n echo \"Downloading neoforge\"\r\n \r\n local MC_VERSION=$MINECRAFT_VERSION\r\n local NEOFORGE_VERSION=$LOADER_VERSION\r\n \r\n if [[ ! -z ${NEOFORGE_VERSION} ]]; then\r\n # The 1.20.1 release lives in a different repository and is called \"forge\" instead of \"neoforge\"\r\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\r\n DOWNLOAD_LINK=$NEOFORGE_DOWNLOAD_URL\/forge\/${NEOFORGE_VERSION}\/forge-${NEOFORGE_VERSION}\r\n ARTIFACT_NAME=\"forge\"\r\n else\r\n DOWNLOAD_LINK=$NEOFORGE_DOWNLOAD_URL\/neoforge\/${NEOFORGE_VERSION}\/neoforge-${NEOFORGE_VERSION}\r\n ARTIFACT_NAME=\"neoforge\"\r\n fi\r\n else\r\n echo \"No Neoforge version specified in manifest\"\r\n exit 1\r\n fi\r\n \r\n echo \"Downloading NeoForge version ${NEOFORGE_VERSION}\"\r\n echo \"Download link is ${DOWNLOAD_LINK}\"\r\n\r\n # Check if the download link we generated is valid\r\n if [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\r\n if wget -q --spider ${DOWNLOAD_LINK}-installer.jar; then\r\n echo -e \"Installer jar download link is valid.\"\r\n else\r\n echo -e \"Link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\n else\r\n echo -e \"No download link provided. Exiting now\"\r\n exit 3\r\n fi\r\n \r\n # If so, go ahead and download the installer\r\n wget -O installer.jar ${DOWNLOAD_LINK}-installer.jar\r\n \r\n if [[ ! -f .\/installer.jar ]]; then\r\n echo \"!!! Error downloading NeoForge version ${NEOFORGE_VERSION} !!!\"\r\n exit 4\r\n fi\r\n \r\n # Delete args to support downgrading\/upgrading\r\n rm -rf libraries\/net\/neoforged\/${ARTIFACT_NAME}\r\n rm unix_args.txt\r\n\r\n # Installing server\r\n echo -e \"Installing NeoForge server.\\n\"\r\n java -jar installer.jar --installServer || {\r\n echo -e \"\\nInstall failed using NeoForge version ${NEOFORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.\"\r\n echo -n \"Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Wings\"\r\n echo \"config or specify exact allocated memory in the server Build Configuration instead of 0!\"\r\n echo \"Otherwise, the NeoForge installer will not have enough memory.\";\r\n exit 5;\r\n }\r\n\r\n # Symlink the startup arguments to the server directory\r\n ln -sf libraries\/net\/neoforged\/${ARTIFACT_NAME}\/*\/unix_args.txt unix_args.txt\r\n\r\n # And finally clean up\r\n echo -e \"Deleting installer.jar file.\\n\"\r\n rm -rf 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\nfi\r\n\r\nget_loader\r\nunpack_zip\r\n\r\nif [[ -f \"${SERVER_DIR}\/manifest.json\" ]]; then\r\n echo \"Found manifest.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/client.manifest.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n echo -e \"\\nLoader name: ${LOADER_NAME}\"\r\n\r\n if [[ $LOADER_NAME == \"forge\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"fabric\" ]]; then\r\n json_download_fabric\r\n fi\r\n \r\n if [[ $LOADER_NAME == \"neoforge\" ]]; then\r\n json_download_neoforge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"quilt\" ]]; 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": [ { - "sort": null, "name": "Modpack Project ID", "description": "The modpack project ID from the CurseForge site on the pack page, or 'zip' if installing from an uploaded server.zip file.\r\n\r\nFor example, the project Id of https:\/\/www.curseforge.com\/minecraft\/modpacks\/bofa-mods ID is 375152", "env_variable": "PROJECT_ID", @@ -48,10 +48,10 @@ "rules": [ "required", "string" - ] + ], + "sort": null }, { - "sort": null, "name": "Modpack File ID", "description": "The file ID belonging to a specific version of a modpack. Can either be the main file or the file ID associated with the server pack.\r\n\r\nIf not provided the script will attempt to retrieve the latest server pack or client pack available.", "env_variable": "VERSION_ID", @@ -60,10 +60,10 @@ "user_editable": true, "rules": [ "string" - ] + ], + "sort": null }, { - "sort": null, "name": "CurseForge API Key", "description": "A CurseForge API key is required to use this egg. You can learn how to get an API key here: https:\/\/support.curseforge.com\/en\/support\/solutions\/articles\/9000208346-about-the-curseforge-api-and-how-to-apply-for-a-key", "env_variable": "API_KEY", @@ -74,7 +74,8 @@ "required", "string", "max:60" - ] + ], + "sort": null } ] -} +} \ No newline at end of file diff --git a/java/curseforge/egg-pterodactyl-curse-forge-generic.json b/java/curseforge/egg-pterodactyl-curse-forge-generic.json index eccead81..ce70497f 100644 --- a/java/curseforge/egg-pterodactyl-curse-forge-generic.json +++ b/java/curseforge/egg-pterodactyl-curse-forge-generic.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2024-11-02T09:40:55+01:00", + "exported_at": "2025-05-13T18:43:58+00:00", "name": "CurseForge Generic", "author": "contact@chromozone.dev", "description": "A generic egg for a CurseForge modpack.", @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# shellcheck disable=SC2155\r\n#\r\n# CurseForge 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: \"${API_KEY:=}\"\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 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 > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nCURSEFORGE_API_URL=\"https:\/\/api.curseforge.com\/v1\/mods\/\"\r\nCURSEFORGE_API_HEADERS=(\"--header=Accept: application\/json\" \"--header=x-api-key: ${API_KEY}\")\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving CurseForge project information...\"\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ 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 local IS_SERVER_PACK=false\r\n\r\n if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo file ID specified, using latest file\"\r\n VERSION_ID=$(echo \"$PROJECT_DATA\" | jq -r '.data.mainFileId \/\/ empty')\r\n\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .isServerPack')\"\r\n local VERSION_SERVER_ID=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .serverPackFileId')\"\r\n\r\n if [[ \"${VERSION_SERVER_PACK}\" == \"false\" && -n \"${VERSION_SERVER_ID}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_ID}'\"\r\n VERSION_ID=$VERSION_SERVER_ID\r\n IS_SERVER_PACK=true\r\n elif [[ \"${VERSION_SERVER_PACK}\" == \"true\" ]]; then\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n echo -e \"\\tChecking if provided file id '${VERSION_ID}' exists\"\r\n\r\n local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.serverPackFileId \/\/ empty')\"\r\n if [[ -n \"${VERSION_SERVER_PACK}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_PACK}'\"\r\n VERSION_ID=$VERSION_SERVER_PACK\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n IS_SERVER_PACK=true\r\n fi\r\n fi\r\n\r\n # Check if version id is unset or empty string\r\n if [[ -z \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No file id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n echo -e \"\\tWARNING: File id '${VERSION_ID}' is not a server pack, attempting to use client files\"\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 \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\/download-url\" -O -)\r\n\r\n if [[ -z \"${JSON_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve file data for file id '${VERSION_ID}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file ${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 \"Download failed!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nfunction get_loader {\r\n echo -e \"Retrieving loader information...\"\r\n\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ empty')\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 local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n local IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n local CLIENT_VERSION_ID;\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"true\" ]]; then\r\n CLIENT_VERSION_ID=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.parentProjectFileId \/\/ empty')\"\r\n else\r\n CLIENT_VERSION_ID=$VERSION_ID\r\n fi\r\n\r\n if [[ -z \"${CLIENT_VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tRetrieving file information for '${CLIENT_VERSION_ID}'\"\r\n local JSON_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${CLIENT_VERSION_ID}\/download-url\" -O -)\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file id ${CLIENT_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 client.zip\r\n\r\n echo -e \"\\tUnpacking client manifest\"\r\n unzip -jo client.zip manifest.json -d \"${SERVER_DIR}\"\r\n mv \"${SERVER_DIR}\/manifest.json\" \"${SERVER_DIR}\/client.manifest.json\" # rename to avoid conflicts with main manifest\r\n rm -rf client.zip\r\n\r\n echo -e \"\\tParsing client manifest\"\r\n local MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n\r\n LOADER_ID=$(jq -r '.minecraft.modLoaders[]? | select(.primary == true) | .id' \"${MANIFEST}\")\r\n LOADER_NAME=$(echo \"${LOADER_ID}\" | cut -d'-' -f1)\r\n LOADER_VERSION=$(echo \"${LOADER_ID}\" | cut -d'-' -f2)\r\n\r\n if [[ -z \"${LOADER_NAME}\" || -z \"${LOADER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No loader found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n MINECRAFT_VERSION=$(jq -r '.minecraft.version \/\/ empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MINECRAFT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No minecraft version found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tFound loader ${LOADER_NAME} ${LOADER_VERSION} for Minecraft ${MINECRAFT_VERSION}\"\r\n}\r\n\r\nfunction unzip-strip() (\r\n set -u\r\n\r\n local archive=$1\r\n local destdir=${2:-}\r\n shift; shift || :\r\n echo -e \"\\tUnpacking ${archive} to ${destdir}\"\r\n\r\n echo -e \"\\tCreating temporary directory\"\r\n local tmpdir=\/mnt\/server\/tmp\r\n if ! mkdir -p \"${tmpdir}\"; then\r\n echo -e \"\\tERROR: mkdir failed to create temporary directory\"\r\n return 1\r\n fi\r\n\r\n trap 'rm -rf -- \"$tmpdir\"' EXIT\r\n\r\n echo -e \"\\tUnpacking archive\"\r\n\r\n if ! unzip -q \"$archive\" -d \"$tmpdir\"; then\r\n echo -e \"\\tERROR: unzip failed to unpack archive\"\r\n return 1\r\n fi\r\n\r\n echo -e \"\\tSetting glob settings\"\r\n\r\n shopt -s dotglob\r\n\r\n echo -e \"\\tCleaning up directory structure\"\r\n\r\n local files=(\"$tmpdir\"\/*) name i=1\r\n\r\n if (( ${#files[@]} == 1 )) && [[ -d \"${files[0]}\" ]]; then\r\n name=$(basename \"${files[0]}\")\r\n files=(\"$tmpdir\"\/*\/*)\r\n else\r\n name=$(basename \"$archive\"); name=${archive%.*}\r\n files=(\"$tmpdir\"\/*)\r\n fi\r\n\r\n if [[ -z \"$destdir\" ]]; then\r\n destdir=.\/\"$name\"\r\n fi\r\n\r\n while [[ -f \"$destdir\" ]]; do\r\n destdir=${destdir}-$((i++));\r\n done\r\n\r\n echo -e \"\\tCopying files to ${destdir}\"\r\n\r\n mkdir -p \"$destdir\"\r\n cp -ar \"$@\" -t \"$destdir\" -- \"${files[@]}\"\r\n rm -rf \"$tmpdir\"\r\n)\r\n\r\nfunction unpack_zip {\r\n echo -e \"Unpacking server files...\"\r\n unzip-strip server.zip \"${SERVER_DIR}\"\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}\/manifest.json\"\r\n jq -c '.files[]? | select(.required == true) | {project: .projectID, file: .fileID}' \"${MANIFEST}\" | while read -r mod; do\r\n local MOD_PROJECT_ID=$(echo \"${mod}\" | jq -r '.project \/\/ empty')\r\n local MOD_FILE_ID=$(echo \"${mod}\" | jq -r '.file \/\/ empty')\r\n\r\n if [[ -z \"${MOD_PROJECT_ID}\" || -z \"${MOD_FILE_ID}\" ]]; then\r\n echo -e \"\\tERROR: Failed to parse project id or file id for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n local FILE_URL=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${MOD_PROJECT_ID}\/files\/${MOD_FILE_ID}\/download-url\" -O - | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\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 ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\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 cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/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 MC_VERSION=$MINECRAFT_VERSION\r\n local FORGE_VERSION=$LOADER_VERSION\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 # Remove old Forge files so we can safely update\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 MC_VERSION=$MINECRAFT_VERSION\r\n local FABRIC_VERSION=$LOADER_VERSION\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\"\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\"\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 MC_VERSION=$MINECRAFT_VERSION\r\n local QUILT_VERSION=$LOADER_VERSION\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_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found\"\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\"\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\nfi\r\n\r\nget_loader\r\nunpack_zip\r\n\r\nif [[ -f \"${SERVER_DIR}\/manifest.json\" ]]; then\r\n echo \"Found manifest.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/client.manifest.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n\r\n if [[ $LOADER_NAME == \"forge\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"fabric\" ]]; then\r\n json_download_fabric\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"quilt\" ]]; 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# CurseForge 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: \"${API_KEY:=}\"\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 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 > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nCURSEFORGE_API_URL=\"https:\/\/api.curseforge.com\/v1\/mods\/\"\r\nCURSEFORGE_API_HEADERS=(\"--header=Accept: application\/json\" \"--header=x-api-key: ${API_KEY}\")\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving CurseForge project information...\"\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ 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 local IS_SERVER_PACK=false\r\n\r\n if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo file ID specified, using latest file\"\r\n VERSION_ID=$(echo \"$PROJECT_DATA\" | jq -r '.data.mainFileId \/\/ empty')\r\n\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .isServerPack')\"\r\n local VERSION_SERVER_ID=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .serverPackFileId')\"\r\n\r\n if [[ \"${VERSION_SERVER_PACK}\" == \"false\" && -n \"${VERSION_SERVER_ID}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_ID}'\"\r\n VERSION_ID=$VERSION_SERVER_ID\r\n IS_SERVER_PACK=true\r\n elif [[ \"${VERSION_SERVER_PACK}\" == \"true\" ]]; then\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n echo -e \"\\tChecking if provided file id '${VERSION_ID}' exists\"\r\n\r\n local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.serverPackFileId \/\/ empty')\"\r\n if [[ -n \"${VERSION_SERVER_PACK}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_PACK}'\"\r\n VERSION_ID=$VERSION_SERVER_PACK\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n IS_SERVER_PACK=true\r\n fi\r\n fi\r\n\r\n # Check if version id is unset or empty string\r\n if [[ -z \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No file id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n echo -e \"\\tWARNING: File id '${VERSION_ID}' is not a server pack, attempting to use client files\"\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 \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\/download-url\" -O -)\r\n\r\n if [[ -z \"${JSON_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve file data for file id '${VERSION_ID}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file ${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 \"Download failed!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nfunction get_loader {\r\n echo -e \"Retrieving loader information...\"\r\n\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ empty')\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 local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n local IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n local CLIENT_VERSION_ID;\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"true\" ]]; then\r\n CLIENT_VERSION_ID=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.parentProjectFileId \/\/ empty')\"\r\n else\r\n CLIENT_VERSION_ID=$VERSION_ID\r\n fi\r\n\r\n if [[ -z \"${CLIENT_VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tRetrieving file information for '${CLIENT_VERSION_ID}'\"\r\n local JSON_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${CLIENT_VERSION_ID}\/download-url\" -O -)\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file id ${CLIENT_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 client.zip\r\n\r\n echo -e \"\\tUnpacking client manifest\"\r\n unzip -jo client.zip manifest.json -d \"${SERVER_DIR}\"\r\n mv \"${SERVER_DIR}\/manifest.json\" \"${SERVER_DIR}\/client.manifest.json\" # rename to avoid conflicts with main manifest\r\n rm -rf client.zip\r\n\r\n echo -e \"\\tParsing client manifest\"\r\n local MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n\r\n LOADER_ID=$(jq -r '.minecraft.modLoaders[]? | select(.primary == true) | .id' \"${MANIFEST}\")\r\n LOADER_NAME=$(echo \"${LOADER_ID}\" | cut -d'-' -f1)\r\n LOADER_VERSION=$(echo \"${LOADER_ID}\" | cut -d'-' -f2)\r\n\r\n if [[ -z \"${LOADER_NAME}\" || -z \"${LOADER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No loader found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n MINECRAFT_VERSION=$(jq -r '.minecraft.version \/\/ empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MINECRAFT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No minecraft version found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tFound loader ${LOADER_NAME} ${LOADER_VERSION} for Minecraft ${MINECRAFT_VERSION}\"\r\n}\r\n\r\nfunction unzip-strip() (\r\n set -u\r\n\r\n local archive=$1\r\n local destdir=${2:-}\r\n shift; shift || :\r\n echo -e \"\\tUnpacking ${archive} to ${destdir}\"\r\n\r\n echo -e \"\\tCreating temporary directory\"\r\n local tmpdir=\/mnt\/server\/tmp\r\n if ! mkdir -p \"${tmpdir}\"; then\r\n echo -e \"\\tERROR: mkdir failed to create temporary directory\"\r\n return 1\r\n fi\r\n\r\n trap 'rm -rf -- \"$tmpdir\"' EXIT\r\n\r\n echo -e \"\\tUnpacking archive\"\r\n\r\n if ! unzip -q \"$archive\" -d \"$tmpdir\"; then\r\n echo -e \"\\tERROR: unzip failed to unpack archive\"\r\n return 1\r\n fi\r\n\r\n echo -e \"\\tSetting glob settings\"\r\n\r\n shopt -s dotglob\r\n\r\n echo -e \"\\tCleaning up directory structure\"\r\n\r\n local files=(\"$tmpdir\"\/*) name i=1\r\n\r\n if (( ${#files[@]} == 1 )) && [[ -d \"${files[0]}\" ]]; then\r\n name=$(basename \"${files[0]}\")\r\n files=(\"$tmpdir\"\/*\/*)\r\n else\r\n name=$(basename \"$archive\"); name=${archive%.*}\r\n files=(\"$tmpdir\"\/*)\r\n fi\r\n\r\n if [[ -z \"$destdir\" ]]; then\r\n destdir=.\/\"$name\"\r\n fi\r\n\r\n while [[ -f \"$destdir\" ]]; do\r\n destdir=${destdir}-$((i++));\r\n done\r\n\r\n echo -e \"\\tCopying files to ${destdir}\"\r\n\r\n mkdir -p \"$destdir\"\r\n cp -ar \"$@\" -t \"$destdir\" -- \"${files[@]}\"\r\n rm -rf \"$tmpdir\"\r\n)\r\n\r\nfunction unpack_zip {\r\n echo -e \"Unpacking server files...\"\r\n unzip-strip server.zip \"${SERVER_DIR}\"\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}\/manifest.json\"\r\n jq -c '.files[]? | select(.required == true) | {project: .projectID, file: .fileID}' \"${MANIFEST}\" | while read -r mod; do\r\n local MOD_PROJECT_ID=$(echo \"${mod}\" | jq -r '.project \/\/ empty')\r\n local MOD_FILE_ID=$(echo \"${mod}\" | jq -r '.file \/\/ empty')\r\n\r\n if [[ -z \"${MOD_PROJECT_ID}\" || -z \"${MOD_FILE_ID}\" ]]; then\r\n echo -e \"\\tERROR: Failed to parse project id or file id for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n local FILE_URL=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${MOD_PROJECT_ID}\/files\/${MOD_FILE_ID}\/download-url\" -O - | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\r\n continue\r\n fi\r\n\r\n echo -e \"\\tDownloading ${FILE_URL}\"\r\n\r\n if ! wget -q -nc \"${FILE_URL}\" -P \"${SERVER_DIR}\/mods\"; then\r\n echo -e \"\\tERROR: Failed to download mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\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 cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/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 MC_VERSION=$MINECRAFT_VERSION\r\n local FORGE_VERSION=$LOADER_VERSION\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 # Remove old Forge files so we can safely update\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 MC_VERSION=$MINECRAFT_VERSION\r\n local FABRIC_VERSION=$LOADER_VERSION\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\"\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\"\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 MC_VERSION=$MINECRAFT_VERSION\r\n local QUILT_VERSION=$LOADER_VERSION\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_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found\"\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\"\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\nNEOFORGE_DOWNLOAD_URL=\"https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/\"\r\n\r\nfunction json_download_neoforge {\r\n echo \"Downloading neoforge\"\r\n \r\n local MC_VERSION=$MINECRAFT_VERSION\r\n local NEOFORGE_VERSION=$LOADER_VERSION\r\n \r\n if [[ ! -z ${NEOFORGE_VERSION} ]]; then\r\n # The 1.20.1 release lives in a different repository and is called \"forge\" instead of \"neoforge\"\r\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\r\n DOWNLOAD_LINK=$NEOFORGE_DOWNLOAD_URL\/forge\/${NEOFORGE_VERSION}\/forge-${NEOFORGE_VERSION}\r\n ARTIFACT_NAME=\"forge\"\r\n else\r\n DOWNLOAD_LINK=$NEOFORGE_DOWNLOAD_URL\/neoforge\/${NEOFORGE_VERSION}\/neoforge-${NEOFORGE_VERSION}\r\n ARTIFACT_NAME=\"neoforge\"\r\n fi\r\n else\r\n echo \"No Neoforge version specified in manifest\"\r\n exit 1\r\n fi\r\n \r\n echo \"Downloading NeoForge version ${NEOFORGE_VERSION}\"\r\n echo \"Download link is ${DOWNLOAD_LINK}\"\r\n\r\n # Check if the download link we generated is valid\r\n if [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\r\n if wget -q --spider ${DOWNLOAD_LINK}-installer.jar; then\r\n echo -e \"Installer jar download link is valid.\"\r\n else\r\n echo -e \"Link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\n else\r\n echo -e \"No download link provided. Exiting now\"\r\n exit 3\r\n fi\r\n \r\n # If so, go ahead and download the installer\r\n wget -O installer.jar ${DOWNLOAD_LINK}-installer.jar\r\n \r\n if [[ ! -f .\/installer.jar ]]; then\r\n echo \"!!! Error downloading NeoForge version ${NEOFORGE_VERSION} !!!\"\r\n exit 4\r\n fi\r\n \r\n # Delete args to support downgrading\/upgrading\r\n rm -rf libraries\/net\/neoforged\/${ARTIFACT_NAME}\r\n rm unix_args.txt\r\n\r\n # Installing server\r\n echo -e \"Installing NeoForge server.\\n\"\r\n java -jar installer.jar --installServer || {\r\n echo -e \"\\nInstall failed using NeoForge version ${NEOFORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.\"\r\n echo -n \"Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Wings\"\r\n echo \"config or specify exact allocated memory in the server Build Configuration instead of 0!\"\r\n echo \"Otherwise, the NeoForge installer will not have enough memory.\";\r\n exit 5;\r\n }\r\n\r\n # Symlink the startup arguments to the server directory\r\n ln -sf libraries\/net\/neoforged\/${ARTIFACT_NAME}\/*\/unix_args.txt unix_args.txt\r\n\r\n # And finally clean up\r\n echo -e \"Deleting installer.jar file.\\n\"\r\n rm -rf 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\nfi\r\n\r\nget_loader\r\nunpack_zip\r\n\r\nif [[ -f \"${SERVER_DIR}\/manifest.json\" ]]; then\r\n echo \"Found manifest.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/client.manifest.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n echo -e \"\\nLoader name: ${LOADER_NAME}\"\r\n\r\n if [[ $LOADER_NAME == \"forge\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"fabric\" ]]; then\r\n json_download_fabric\r\n fi\r\n \r\n if [[ $LOADER_NAME == \"neoforge\" ]]; then\r\n json_download_neoforge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"quilt\" ]]; 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" } @@ -67,4 +67,4 @@ "field_type": "text" } ] -} \ No newline at end of file +} From 8700c846b0e75aafd94fda1ddacbd9a91d8f2d99 Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Tue, 27 May 2025 11:31:04 -0700 Subject: [PATCH 07/20] [java\curseforge] Improve API key documentation & visibility The current CurseForge support article listed in the README and Egg variable description is misleading and unnecessary. It is much easier to obtain an API key for free in their developer portal at https://console.curseforge.com - Updated the README and Egg "CurseForge API Key" variable description with this new link. - Changed the "CurseForge API Key" variable to not be user visible. My reasoning behind this is that the host should maintain one key for all clients instead of requiring clients to obtain their own keys. Also, previously, with it being a required variable, it forced the host to either input their private key or an invalid "Enter your key here" string before the server can be created, which is more clunky in my opinion. - Added variable `sort` values for the Pelican Egg. - Small capitalization adjustments. --- java/curseforge/README.md | 4 ++-- java/curseforge/egg-curse-forge-generic.json | 16 ++++++++-------- .../egg-pterodactyl-curse-forge-generic.json | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/java/curseforge/README.md b/java/curseforge/README.md index d74cba0f..b00222ff 100644 --- a/java/curseforge/README.md +++ b/java/curseforge/README.md @@ -12,12 +12,12 @@ This can be found on the modpack page by clicking the wanted file and copying th The script will automatically setup of Forge, Fabric, or Quilt depending on the modpack. You *must* specify a CurseForge API key. -You can find out how to get an API key [here](https://support.curseforge.com/en/support/solutions/articles/9000208346-about-the-curseforge-api-and-how-to-apply-for-a-key) +You can obtain an API key by creating a developer account [here](https://console.curseforge.com/) and then clicking on the "API keys" tab. ## 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 | +| Port | Default | |-------|---------| | Game | 25565 | \ No newline at end of file diff --git a/java/curseforge/egg-curse-forge-generic.json b/java/curseforge/egg-curse-forge-generic.json index 46c609ee..b4538960 100644 --- a/java/curseforge/egg-curse-forge-generic.json +++ b/java/curseforge/egg-curse-forge-generic.json @@ -4,7 +4,7 @@ "version": "PLCN_v1", "update_url": null }, - "exported_at": "2025-05-23T13:10:20+00:00", + "exported_at": "2025-05-27T11:05:16-07:00", "name": "CurseForge Generic", "author": "contact@chromozone.dev", "uuid": "019bbf16-a3f3-470a-9c0b-f3995b5e032a", @@ -40,7 +40,7 @@ "variables": [ { "name": "Modpack Project ID", - "description": "The modpack project ID from the CurseForge site on the pack page, or 'zip' if installing from an uploaded server.zip file.\r\n\r\nFor example, the project Id of https:\/\/www.curseforge.com\/minecraft\/modpacks\/bofa-mods ID is 375152", + "description": "The modpack project ID from the CurseForge site on the pack page, or 'zip' if installing from an uploaded server.zip file.\r\n\r\nFor example, the project ID of https:\/\/www.curseforge.com\/minecraft\/modpacks\/bofa-mods is 375152", "env_variable": "PROJECT_ID", "default_value": "", "user_viewable": true, @@ -49,7 +49,7 @@ "required", "string" ], - "sort": null + "sort": 1 }, { "name": "Modpack File ID", @@ -61,21 +61,21 @@ "rules": [ "string" ], - "sort": null + "sort": 2 }, { "name": "CurseForge API Key", - "description": "A CurseForge API key is required to use this egg. You can learn how to get an API key here: https:\/\/support.curseforge.com\/en\/support\/solutions\/articles\/9000208346-about-the-curseforge-api-and-how-to-apply-for-a-key", + "description": "A CurseForge API key is required to use this egg. This key is not visible to the server owner. You can get an API key here: https:\/\/console.curseforge.com", "env_variable": "API_KEY", "default_value": "", - "user_viewable": true, - "user_editable": true, + "user_viewable": false, + "user_editable": false, "rules": [ "required", "string", "max:60" ], - "sort": null + "sort": 3 } ] } \ No newline at end of file diff --git a/java/curseforge/egg-pterodactyl-curse-forge-generic.json b/java/curseforge/egg-pterodactyl-curse-forge-generic.json index ce70497f..a767f638 100644 --- a/java/curseforge/egg-pterodactyl-curse-forge-generic.json +++ b/java/curseforge/egg-pterodactyl-curse-forge-generic.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2025-05-13T18:43:58+00:00", + "exported_at": "2025-05-27T11:05:16-07:00", "name": "CurseForge Generic", "author": "contact@chromozone.dev", "description": "A generic egg for a CurseForge modpack.", @@ -38,7 +38,7 @@ "variables": [ { "name": "Modpack Project ID", - "description": "The modpack project ID from the CurseForge site on the pack page, or 'zip' if installing from an uploaded server.zip file.\r\n\r\nFor example, the project Id of https:\/\/www.curseforge.com\/minecraft\/modpacks\/bofa-mods ID is 375152", + "description": "The modpack project ID from the CurseForge site on the pack page, or 'zip' if installing from an uploaded server.zip file.\r\n\r\nFor example, the project ID of https:\/\/www.curseforge.com\/minecraft\/modpacks\/bofa-mods is 375152", "env_variable": "PROJECT_ID", "default_value": "", "user_viewable": true, @@ -58,11 +58,11 @@ }, { "name": "CurseForge API Key", - "description": "A CurseForge API key is required to use this egg. You can learn how to get an API key here: https:\/\/support.curseforge.com\/en\/support\/solutions\/articles\/9000208346-about-the-curseforge-api-and-how-to-apply-for-a-key", + "description": "A CurseForge API key is required to use this egg. This key is not visible to the server owner. You can get an API key here: https:\/\/console.curseforge.com", "env_variable": "API_KEY", "default_value": "", - "user_viewable": true, - "user_editable": true, + "user_viewable": false, + "user_editable": false, "rules": "required|string|max:60", "field_type": "text" } From 191f20ed56ea74c727a28ceb3cdf22f5a58e41b9 Mon Sep 17 00:00:00 2001 From: Miniontoby Date: Wed, 18 Jun 2025 12:35:12 +0200 Subject: [PATCH 08/20] [Bedrock Vanilla] fix: outdated server file download URL * Only changed the URL, since the rest of the code is still valid working code. --- bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json | 2 +- bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json | 2 +- bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json | 2 +- bedrock/bedrock/egg-vanilla-bedrock.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json index 7ac21c9a..96ab3cdd 100644 --- a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json +++ b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json @@ -24,7 +24,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/www.minecraft.net\/en-us\/download\/server\/bedrock\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho 'emit-server-telemetry=true' >> server.properties\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", + "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/net-secondary.web.minecraft-services.net\/api\/v1.0\/download\/links\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho 'emit-server-telemetry=true' >> server.properties\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } diff --git a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json index cb91b10f..6644041d 100644 --- a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json +++ b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json @@ -24,7 +24,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/www.minecraft.net\/en-us\/download\/server\/bedrock\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", + "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/net-secondary.web.minecraft-services.net\/api\/v1.0\/download\/links\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } diff --git a/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json b/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json index 5367ec28..a9debef6 100644 --- a/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json +++ b/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json @@ -25,7 +25,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/www.minecraft.net\/en-us\/download\/server\/bedrock\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho 'emit-server-telemetry=true' >> server.properties\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", + "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/net-secondary.web.minecraft-services.net\/api\/v1.0\/download\/links\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho 'emit-server-telemetry=true' >> server.properties\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } diff --git a/bedrock/bedrock/egg-vanilla-bedrock.json b/bedrock/bedrock/egg-vanilla-bedrock.json index 2b5f89ee..9dd3b5c9 100644 --- a/bedrock/bedrock/egg-vanilla-bedrock.json +++ b/bedrock/bedrock/egg-vanilla-bedrock.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/www.minecraft.net\/en-us\/download\/server\/bedrock\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", + "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/net-secondary.web.minecraft-services.net\/api\/v1.0\/download\/links\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } From 6592dda3fc44f712a42f80c33aff3fe2029a8d5a Mon Sep 17 00:00:00 2001 From: Miniontoby Date: Wed, 18 Jun 2025 12:42:00 +0200 Subject: [PATCH 09/20] Update the date/time of the files --- bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json | 2 +- bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json | 2 +- bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json | 2 +- bedrock/bedrock/egg-vanilla-bedrock.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json index 96ab3cdd..eac8dcfa 100644 --- a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json +++ b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock-a-r-m64.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2024-09-24T13:43:50-07:00", + "exported_at": "2025-06-18T12:40:19+02:00", "name": "Vanilla Bedrock ARM64", "author": "josdekurk@gmail.com", "description": "Bedrock Edition (also known as the Bedrock Version, Bedrock Codebase, Bedrock Engine or just Bedrock) refers to the multi-platform family of editions of Minecraft developed by Mojang AB, Microsoft Studios, 4J Studios, and SkyBox Labs. Prior to this term, as the engine originated with Pocket Edition, this entire product family was referred to as \"Pocket Edition\", \"MCPE\", or \"Pocket\/Windows 10 Edition\".", diff --git a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json index 6644041d..ede8e06e 100644 --- a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json +++ b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2025-03-28T16:22:19+06:00", + "exported_at": "2025-06-18T12:40:19+02:00", "name": "Vanilla Bedrock", "author": "parker@parkervcp.com", "description": "Bedrock Edition (also known as the Bedrock Version, Bedrock Codebase, Bedrock Engine or just Bedrock) refers to the multi-platform family of editions of Minecraft developed by Mojang AB, Microsoft Studios, 4J Studios, and SkyBox Labs. Prior to this term, as the engine originated with Pocket Edition, this entire product family was referred to as \"Pocket Edition\", \"MCPE\", or \"Pocket\/Windows 10 Edition\".", diff --git a/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json b/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json index a9debef6..88e86cb0 100644 --- a/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json +++ b/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2024-09-25T01:03:38+00:00", + "exported_at": "2025-06-18T12:40:19+02:00", "name": "Vanilla Bedrock ARM64", "author": "josdekurk@gmail.com", "uuid": "121d13de-82d1-41c5-bd32-a6ef3663d616", diff --git a/bedrock/bedrock/egg-vanilla-bedrock.json b/bedrock/bedrock/egg-vanilla-bedrock.json index 9dd3b5c9..a8d2926e 100644 --- a/bedrock/bedrock/egg-vanilla-bedrock.json +++ b/bedrock/bedrock/egg-vanilla-bedrock.json @@ -4,7 +4,7 @@ "version": "PLCN_v1", "update_url": null }, - "exported_at": "2025-03-29T08:45:01+00:00", + "exported_at": "2025-06-18T12:40:19+02:00", "name": "Vanilla Bedrock", "author": "parker@parkervcp.com", "uuid": "a03036b8-8c1b-4c8a-80be-018baad3dcaf", From 18687ca35d106dd3ee84ad924f25c19ea0df13ea Mon Sep 17 00:00:00 2001 From: mystic Date: Sat, 9 Aug 2025 21:44:32 -0400 Subject: [PATCH 10/20] feat(modrinth): add support for NeoForge Also added support for Java 22 --- java/modrinth/egg-modrinth-generic.json | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/java/modrinth/egg-modrinth-generic.json b/java/modrinth/egg-modrinth-generic.json index ae8e18c5..5c1adc32 100644 --- a/java/modrinth/egg-modrinth-generic.json +++ b/java/modrinth/egg-modrinth-generic.json @@ -4,11 +4,12 @@ "version": "PLCN_v1", "update_url": null }, - "exported_at": "2025-01-13T09:44:32+00:00", + "exported_at": "2025-08-10T01:41:42+00:00", "name": "Modrinth Generic", "author": "contact@chromozone.dev", "uuid": "04befa18-37cf-41e9-b04d-89b3578bba6d", "description": "A generic egg for a Modrinth modpack.", + "tags": [], "features": [ "eula", "java_version", @@ -19,7 +20,8 @@ "Java 11": "ghcr.io\/parkervcp\/yolks:java_11", "Java 16": "ghcr.io\/parkervcp\/yolks:java_16", "Java 17": "ghcr.io\/parkervcp\/yolks:java_17", - "Java 21": "ghcr.io\/parkervcp\/yolks:java_21" + "Java 21": "ghcr.io\/parkervcp\/yolks:java_21", + "Java 22": "ghcr.io\/parkervcp\/yolks:java_22" }, "file_denylist": [], "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\")", @@ -31,14 +33,13 @@ }, "scripts": { "installation": { - "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 chmod -R 755 \"${SERVER_DIR}\/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 chmod -R 755 \"${SERVER_DIR}\/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!\"", + "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 chmod -R 755 \"${SERVER_DIR}\/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 chmod -R 755 \"${SERVER_DIR}\/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\nNEOFORGE_INSTALLER_URL=\"https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/\"\r\n\r\nfunction json_download_neoforge {\r\n echo \"Downloading NeoForge...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n # Extract Minecraft and NeoForge versions from the manifest\r\n local MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' \"${MANIFEST}\")\r\n local NEOFORGE_VERSION=$(jq -r '.dependencies.neoforge \/\/ empty' \"${MANIFEST}\")\r\n\r\n # Validate extracted versions\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 \"${NEOFORGE_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No NeoForge version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n # Determine the download link and artifact name based on the version\r\n local DOWNLOAD_LINK=\"\"\r\n local ARTIFACT_NAME=\"\"\r\n\r\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\r\n DOWNLOAD_LINK=\"${NEOFORGE_INSTALLER_URL}forge\/${NEOFORGE_VERSION}\/forge-${NEOFORGE_VERSION}-installer.jar\"\r\n ARTIFACT_NAME=\"forge\"\r\n else\r\n DOWNLOAD_LINK=\"${NEOFORGE_INSTALLER_URL}neoforge\/${NEOFORGE_VERSION}\/neoforge-${NEOFORGE_VERSION}-installer.jar\"\r\n ARTIFACT_NAME=\"neoforge\"\r\n fi\r\n\r\n # Download the installer\r\n echo -e \"\\tUsing NeoForge version ${NEOFORGE_VERSION} from ${DOWNLOAD_LINK}\"\r\n if ! wget -q -O neoforge-installer.jar \"${DOWNLOAD_LINK}\"; then\r\n echo -e \"\\tERROR: Failed to download NeoForge installer ${NEOFORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n # Install the server using the installer\r\n echo -e \"\\tInstalling NeoForge Server ${NEOFORGE_VERSION}\"\r\n if ! java -jar neoforge-installer.jar --installServer > \/dev\/null 2>&1; then\r\n echo -e \"\\tERROR: Failed to install NeoForge Server ${NEOFORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n # Create a symlink for the startup arguments\r\n ln -sf libraries\/net\/neoforged\/${ARTIFACT_NAME}\/*\/unix_args.txt unix_args.txt\r\n\r\n # Clean up\r\n rm -f neoforge-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.neoforge' \"${MANIFEST}\") != \"null\" ]]; then\r\n json_download_neoforge\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": "eclipse-temurin:17-jdk", "entrypoint": "bash" } }, "variables": [ { - "sort": 1, "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", @@ -49,10 +50,10 @@ "required", "string", "max:8" - ] + ], + "sort": 1 }, { - "sort": 2, "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", @@ -62,7 +63,8 @@ "rules": [ "string", "max:8" - ] + ], + "sort": 2 } ] } \ No newline at end of file From 43ce9ea1435435d24da872b692140241477e242f Mon Sep 17 00:00:00 2001 From: Jordan B Date: Wed, 20 Aug 2025 20:15:07 +0200 Subject: [PATCH 11/20] feat: add via proxy egg (#79) * feat: add via proxy egg * fix: use proper env variable * refactor: use pelican installer image * refactor: use code from github release grabber * refactor: add java 22 * Pterodactyl + features --------- Co-authored-by: Quinten <67589015+QuintenQVD0@users.noreply.github.com> --- proxy/README.md | 1 + proxy/java/README.md | 5 +- proxy/java/viaproxy/README.md | 11 ++++ .../viaproxy/egg-pterodactyl-via-proxy.json | 57 +++++++++++++++++ proxy/java/viaproxy/egg-via-proxy.json | 64 +++++++++++++++++++ 5 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 proxy/java/viaproxy/README.md create mode 100644 proxy/java/viaproxy/egg-pterodactyl-via-proxy.json create mode 100644 proxy/java/viaproxy/egg-via-proxy.json diff --git a/proxy/README.md b/proxy/README.md index 5b926e64..b5847ddc 100644 --- a/proxy/README.md +++ b/proxy/README.md @@ -4,6 +4,7 @@ * [Travertine](java/travertine) * [Velocity](/java/velocity) * [VIAaaS](/java/viaaas) + * [ViaProxy](/java/viaproxy) * [Waterfall](/java/waterfall) * [Bedrock](/bedrock) * [Waterdog PE](/bedrock/waterdogpe) diff --git a/proxy/java/README.md b/proxy/java/README.md index 6cb3bc02..accecce9 100644 --- a/proxy/java/README.md +++ b/proxy/java/README.md @@ -10,7 +10,10 @@ Waterfall, with additional support for Minecraft 1.7.10. Velocity is a Minecraft server proxy with unparalleled server support, scalability, and flexibility. #### VIAaaS -[VIAaaS](https://github.com/ViaVersion/VIAaaS) is the Minecraft plugin ViaVersion made standalone as a proxy. +[VIAaaS](https://github.com/ViaVersion/VIAaaS) is the Minecraft plugin ViaVersion made standalone as a proxy using VIAaaS. + +#### ViaProxy +[ViaProxy](https://github.com/ViaVersion/ViaProxy) is the Minecraft plugin ViaVersion made standalone as a proxy which allows players to join EVERY Minecraft server version. #### Waterfall [Waterfall](https://papermc.io/downloads#Waterfall) diff --git a/proxy/java/viaproxy/README.md b/proxy/java/viaproxy/README.md new file mode 100644 index 00000000..7939dfdd --- /dev/null +++ b/proxy/java/viaproxy/README.md @@ -0,0 +1,11 @@ +# ViaProxy +ViaProxy is the Minecraft plugin ViaVersion made standalone as a proxy which allows players to join EVERY Minecraft server version. + +More information is available here: https://github.com/ViaVersion/ViaProxy + +## Server Ports +The minecraft server requires a single port for access (default 25565). + +| Port | default | +|------------|---------| +| Game | 25565 | \ No newline at end of file diff --git a/proxy/java/viaproxy/egg-pterodactyl-via-proxy.json b/proxy/java/viaproxy/egg-pterodactyl-via-proxy.json new file mode 100644 index 00000000..81326546 --- /dev/null +++ b/proxy/java/viaproxy/egg-pterodactyl-via-proxy.json @@ -0,0 +1,57 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2025-06-01T07:53:01+00:00", + "name": "ViaProxy", + "author": "contact@ste4d.net", + "description": "ViaProxy is a standalone proxy which allows players to join EVERY Minecraft server version (Classic, Alpha, Beta, Release, Bedrock)", + "features": [ + "eula", + "java_version", + "pid_limit" + ], + "docker_images": { + "Java 21": "ghcr.io\/parkervcp\/yolks:java_21", + "Java 22": "ghcr.io\/parkervcp\/yolks:java_22" + }, + "file_denylist": [], + "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}} cli", + "config": { + "files": "{\n \"viaproxy.yml\": {\n \"parser\": \"yaml\",\n \"find\": {\n \"bind-address\": \"0.0.0.0:{{server.build.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \"Binding proxy server to\"\n}", + "logs": "{}", + "stop": "exit" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/ash\r\n# ViaProxy Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/ViaVersion\/ViaProxy\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/ViaVersion\/ViaProxy\/releases\")\r\nMATCH=\"ViaProxy-[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+\\.jar\"\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\nelse\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n# Download the .jar file\r\necho \"Downloading ViaProxy version $VERSION...\"\r\ncurl -sSL -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", + "container": "ghcr.io\/parkervcp\/installers:alpine", + "entrypoint": "ash" + } + }, + "variables": [ + { + "name": "ViaProxy JAR", + "description": "Server Jarfile, by default this is set to 'via-proxy.jar'.\nSet it to otherwise if you wish to have a different jarfile name.", + "env_variable": "SERVER_JARFILE", + "default_value": "viaproxy.jar", + "user_viewable": true, + "user_editable": true, + "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", + "field_type": "text" + }, + { + "name": "ViaProxy Version", + "description": "ViaProxy version to install, can be latest or 3.4.1 for example ", + "env_variable": "VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required", + "field_type": "text" + } + ] +} \ No newline at end of file diff --git a/proxy/java/viaproxy/egg-via-proxy.json b/proxy/java/viaproxy/egg-via-proxy.json new file mode 100644 index 00000000..c13272ee --- /dev/null +++ b/proxy/java/viaproxy/egg-via-proxy.json @@ -0,0 +1,64 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", + "meta": { + "version": "PLCN_v1", + "update_url": null + }, + "exported_at": "2025-06-01T07:53:01+00:00", + "name": "ViaProxy", + "author": "contact@ste4d.net", + "uuid": "39774149-12b1-4ef9-8945-bdb51bdfe442", + "description": "ViaProxy is a standalone proxy which allows players to join EVERY Minecraft server version (Classic, Alpha, Beta, Release, Bedrock)", + "tags": [], + "features": [ + "eula", + "java_version", + "pid_limit" + ], + "docker_images": { + "Java 21": "ghcr.io\/parkervcp\/yolks:java_21", + "Java 22": "ghcr.io\/parkervcp\/yolks:java_22" + }, + "file_denylist": [], + "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}} cli", + "config": { + "files": "{\n \"viaproxy.yml\": {\n \"parser\": \"yaml\",\n \"find\": {\n \"bind-address\": \"0.0.0.0:{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \"Binding proxy server to\"\n}", + "logs": "{}", + "stop": "exit" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/ash\r\n# ViaProxy Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/ViaVersion\/ViaProxy\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/ViaVersion\/ViaProxy\/releases\")\r\nMATCH=\"ViaProxy-[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+\\.jar\"\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\nelse\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n# Download the .jar file\r\necho \"Downloading ViaProxy version $VERSION...\"\r\ncurl -sSL -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", + "container": "ghcr.io\/parkervcp\/installers:alpine", + "entrypoint": "ash" + } + }, + "variables": [ + { + "sort": 1, + "name": "ViaProxy JAR", + "description": "Server Jarfile, by default this is set to 'via-proxy.jar'.\nSet it to otherwise if you wish to have a different jarfile name.", + "env_variable": "SERVER_JARFILE", + "default_value": "viaproxy.jar", + "user_viewable": true, + "user_editable": true, + "rules": [ + "required", + "regex:\/^([\\w\\d._-]+)(\\.jar)$\/" + ] + }, + { + "sort": 2, + "name": "ViaProxy Version", + "description": "ViaProxy version to install, can be latest or 3.4.1 for example ", + "env_variable": "VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": [ + "required" + ] + } + ] +} \ No newline at end of file From 70e39b8bf17c4ea2e72dd8f629cef2b8dc38ba4b Mon Sep 17 00:00:00 2001 From: Mads Kelberg <35922365+MadsKelberg@users.noreply.github.com> Date: Thu, 2 Oct 2025 02:12:35 +0200 Subject: [PATCH 12/20] Fix FTB Egg (#54) * Fix FTB Egg * Update README.md * Readded Java 8 * Updated egg Added "features" to egg. Changed pterodactyl images to parkervcp images. * Add back the pelican egg * indentation * Fix unavailable version in README --------- Co-authored-by: Quinten <67589015+QuintenQVD0@users.noreply.github.com> --- java/ftb/README.md | 8 +- java/ftb/egg-f-t-b-server.json | 94 +++++++++++++++++++ java/ftb/egg-pterodactyl-f-t-b-server.json | 81 ++++++++++++++++ .../egg-f-t-b-modpacks-ch-server.json | 0 ...-pterodactyl-f-t-b-modpacks-ch-server.json | 0 5 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 java/ftb/egg-f-t-b-server.json create mode 100644 java/ftb/egg-pterodactyl-f-t-b-server.json rename java/ftb/{ => outdated}/egg-f-t-b-modpacks-ch-server.json (100%) rename java/ftb/{ => outdated}/egg-pterodactyl-f-t-b-modpacks-ch-server.json (100%) diff --git a/java/ftb/README.md b/java/ftb/README.md index 385b0e0c..e63ea2e6 100644 --- a/java/ftb/README.md +++ b/java/ftb/README.md @@ -1,6 +1,6 @@ # FTB Modpacks -A generic service to pull FTB modpacks from api.modpacks.ch. +A generic service to pull FTB modpacks from api.feed-the-beast.com. There are 2 ways to install a server through this service. The first method only requires you to know the modpacks name and version. The second method requires you to know the id for both the modpack and version in the api. @@ -10,14 +10,14 @@ The second method requires you to know the id for both the modpack and version i - FTB_SEARCH_TERM: the modpack name to query for, must be at least 4 characters long. EX: for FTB: Interactions you would do "interactions". - FTB_VERSION_STRING: the string version that you want to install. - EX: for FTB: Interactions 2.0.2, you would put "2.0.2". + EX: for FTB: Interactions 2.12.1, you would put "2.12.1". ## Method 2 - FTB_MODPACK_ID: the id that directs to the modpack in the api. - EX: for FTB: Interactions the id would be "5". `https://api.modpacks.ch/public/modpack/5` + EX: for FTB: Interactions the id would be "5". `https://api.feed-the-beast.com/v1/modpacks/public/modpack/5` - FTB_MODPACK_VERSION_ID: the version id in the api. - EX: for FTB: Interactions 2.0.2 the id is "86". `https://api.modpacks.ch/public/modpack/5/86` + EX: for FTB: Interactions 2.12.1 the id is "2130". `https://api.feed-the-beast.com/v1/modpacks/public/modpack/5/2130` **NOTE** **Not all FTB packs come with a server.properties file, due to this the server.properties file diff --git a/java/ftb/egg-f-t-b-server.json b/java/ftb/egg-f-t-b-server.json new file mode 100644 index 00000000..cf76bbf3 --- /dev/null +++ b/java/ftb/egg-f-t-b-server.json @@ -0,0 +1,94 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", + "meta": { + "version": "PLCN_v1", + "update_url": null + }, + "exported_at": "2025-02-18T18:08:44+00:00", + "name": "FTB Server", + "author": "runemaster580@gmail.com", + "uuid": "e60a9de8-a0b1-4d97-b4e2-6568f048668d", + "description": "This egg was developed to easily set up a server from FTB.", + "features": [ + "eula", + "java_version", + "pid_limit" + ], + "docker_images": { + "Java 21": "ghcr.io\/parkervcp\/yolks:java_21", + "Java 19": "ghcr.io\/parkervcp\/yolks:java_19", + "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 start-server.jar\" || 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.allocations.default.port}}\",\r\n \"query.port\": \"{{server.allocations.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# FTB Pack Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nif [ ! -d \/mnt\/server ]; then\r\n mkdir -p \/mnt\/server\r\nfi\r\ncd \/mnt\/server\r\n\r\n\r\n# Download needed software.\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq\r\n}\r\n\r\nfunction get_modpack_id {\r\n urlencode() {\r\n local string=\"${1\/\/ \/%20}\"\r\n echo \"$string\"\r\n }\r\n \r\n # if no modpack id is set and modpack search term is set.\r\n if [ -z ${FTB_MODPACK_ID} ] && [ ! -z \"${FTB_SEARCH_TERM}\" ]; then\r\n encoded_search_term=$(urlencode \"$FTB_SEARCH_TERM\")\r\n JSON_DATA=$(curl -sSL https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/search\/8?term=\"${encoded_search_term}\")\r\n \r\n # grabs the first modpack in array.\r\n FTB_MODPACK_ID=$(echo -e ${JSON_DATA} | jq -r \".packs[0]\")\r\n fi\r\n\r\n if [ -z ${FTB_MODPACK_VERSION_ID} ] && [ ! -z ${FTB_VERSION_STRING} ]; then\r\n # grabs the correct version id matching the string.\r\n FTB_MODPACK_VERSION_ID=$(curl -sSL https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/${FTB_MODPACK_ID} | jq -r --arg VSTRING ${FTB_VERSION_STRING} '.versions[] | select(.name == $VSTRING) | .id')\r\n fi\r\n}\r\n\r\nfunction run_installer {\r\n # get architecture for installer\r\n INSTALLER_TYPE=$([ \"$(uname -m)\" == \"x86_64\" ] && echo \"linux\" || echo \"arm\/linux\")\r\n echo \"ModpackID: ${FTB_MODPACK_ID} VersionID: ${FTB_MODPACK_VERSION_ID} InstallerType: ${INSTALLER_TYPE}\"\r\n\r\n # download installer\r\n curl -L https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/0\/0\/server\/${INSTALLER_TYPE} --output serversetup\r\n chmod +x .\/serversetup\r\n \r\n # remove old forge files (to allow updating)\r\n rm -rf libraries\/net\/minecraftforge\/forge\r\n rm -rf libraries\/net\/neoforged\/forge\r\n rm -f unix_args.txt\r\n \r\n # run installer\r\n .\/serversetup --pack ${FTB_MODPACK_ID} --version ${FTB_MODPACK_VERSION_ID} --auto --no-java\r\n}\r\n\r\n# allows startup command to work\r\nfunction move_startup_files {\r\n # create symlink for forge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # create symlink for neoforge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/neoforged\/neoforge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/neoforged\/neoforge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # move forge\/neoforge\/fabric jar file to start-server.jar if exists\r\n if compgen -G \"forge-*.jar\"; then\r\n mv -f forge-*.jar start-server.jar\r\n elif compgen -G \"fabric-*.jar\"; then\r\n mv -f fabric-*.jar start-server.jar\r\n fi\r\n}\r\n\r\n# installer cleanup\r\nfunction installer_cleanup {\r\n rm serversetup\r\n rm -f run.bat\r\n rm -f run.sh\r\n}\r\n\r\n# run installation steps\r\ninstall_required\r\nget_modpack_id\r\nrun_installer\r\nmove_startup_files\r\ninstaller_cleanup\r\n\r\necho \"Finished installing FTB modpack\"", + "container": "openjdk:21-jdk-slim", + "entrypoint": "bash" + } + }, + "variables": [ + { + "sort": null, + "name": "FTB Pack search term", + "description": "the search term for finding the modpack. needs to be at least 4 characters long.\r\nFind out what term is needed by using the ftb app and searching with the term. make sure it only returns 1 result.\r\ncan also be searched for via: https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/search\/8?term={SEARCHTERM}\r\n\r\nonly needed if the modpack id and modpack version id is unknown.", + "env_variable": "FTB_SEARCH_TERM", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": [ + "nullable", + "string" + ] + }, + { + "sort": null, + "name": "FTB modpack ID", + "description": "The FTB Api modpack ID.\r\nNeeded if not using the search variable\r\n\r\nExample: FTB Interactions ID is 5.\r\nhttps:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/5", + "env_variable": "FTB_MODPACK_ID", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": [ + "nullable", + "integer" + ] + }, + { + "sort": null, + "name": "FTB Pack Version", + "description": "what version of the modpack to install. leave empty if using the modpack version id variable.", + "env_variable": "FTB_VERSION_STRING", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": [ + "nullable", + "string" + ] + }, + { + "sort": null, + "name": "FTB Pack Version ID", + "description": "The modpack api version ID.\r\nneeded if not using the string for the version.\r\n\r\nExample FTB Revelations version id for version \"2.0.2\" is 86.\r\nwhich would come out as: https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/5\/86", + "env_variable": "FTB_MODPACK_VERSION_ID", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": [ + "nullable", + "integer" + ] + } + ] +} \ No newline at end of file diff --git a/java/ftb/egg-pterodactyl-f-t-b-server.json b/java/ftb/egg-pterodactyl-f-t-b-server.json new file mode 100644 index 00000000..1a7647b5 --- /dev/null +++ b/java/ftb/egg-pterodactyl-f-t-b-server.json @@ -0,0 +1,81 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2025-02-18T18:11:44+00:00", + "name": "FTB Server", + "author": "runemaster580@gmail.com", + "description": "This egg was developed to easily set up a server from FTB.", + "features": [ + "eula", + "java_version", + "pid_limit" + ], + "docker_images": { + "Java 21": "ghcr.io\/parkervcp\/yolks:java_21", + "Java 19": "ghcr.io\/parkervcp\/yolks:java_19", + "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 start-server.jar\" || 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# FTB Pack Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nif [ ! -d \/mnt\/server ]; then\r\n mkdir -p \/mnt\/server\r\nfi\r\ncd \/mnt\/server\r\n\r\n\r\n# Download needed software.\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq\r\n}\r\n\r\nfunction get_modpack_id {\r\n urlencode() {\r\n local string=\"${1\/\/ \/%20}\"\r\n echo \"$string\"\r\n }\r\n \r\n # if no modpack id is set and modpack search term is set.\r\n if [ -z ${FTB_MODPACK_ID} ] && [ ! -z \"${FTB_SEARCH_TERM}\" ]; then\r\n encoded_search_term=$(urlencode \"$FTB_SEARCH_TERM\")\r\n JSON_DATA=$(curl -sSL https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/search\/8?term=\"${encoded_search_term}\")\r\n \r\n # grabs the first modpack in array.\r\n FTB_MODPACK_ID=$(echo -e ${JSON_DATA} | jq -r \".packs[0]\")\r\n fi\r\n\r\n if [ -z ${FTB_MODPACK_VERSION_ID} ] && [ ! -z ${FTB_VERSION_STRING} ]; then\r\n # grabs the correct version id matching the string.\r\n FTB_MODPACK_VERSION_ID=$(curl -sSL https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/${FTB_MODPACK_ID} | jq -r --arg VSTRING ${FTB_VERSION_STRING} '.versions[] | select(.name == $VSTRING) | .id')\r\n fi\r\n}\r\n\r\nfunction run_installer {\r\n # get architecture for installer\r\n INSTALLER_TYPE=$([ \"$(uname -m)\" == \"x86_64\" ] && echo \"linux\" || echo \"arm\/linux\")\r\n echo \"ModpackID: ${FTB_MODPACK_ID} VersionID: ${FTB_MODPACK_VERSION_ID} InstallerType: ${INSTALLER_TYPE}\"\r\n\r\n # download installer\r\n curl -L https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/0\/0\/server\/${INSTALLER_TYPE} --output serversetup\r\n chmod +x .\/serversetup\r\n \r\n # remove old forge files (to allow updating)\r\n rm -rf libraries\/net\/minecraftforge\/forge\r\n rm -rf libraries\/net\/neoforged\/forge\r\n rm -f unix_args.txt\r\n \r\n # run installer\r\n .\/serversetup --pack ${FTB_MODPACK_ID} --version ${FTB_MODPACK_VERSION_ID} --auto --no-java\r\n}\r\n\r\n# allows startup command to work\r\nfunction move_startup_files {\r\n # create symlink for forge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # create symlink for neoforge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/neoforged\/neoforge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/neoforged\/neoforge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # move forge\/neoforge\/fabric jar file to start-server.jar if exists\r\n if compgen -G \"forge-*.jar\"; then\r\n mv -f forge-*.jar start-server.jar\r\n elif compgen -G \"fabric-*.jar\"; then\r\n mv -f fabric-*.jar start-server.jar\r\n fi\r\n}\r\n\r\n# installer cleanup\r\nfunction installer_cleanup {\r\n rm serversetup\r\n rm -f run.bat\r\n rm -f run.sh\r\n}\r\n\r\n# run installation steps\r\ninstall_required\r\nget_modpack_id\r\nrun_installer\r\nmove_startup_files\r\ninstaller_cleanup\r\n\r\necho \"Finished installing FTB modpack\"", + "container": "openjdk:21-jdk-slim", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "FTB Pack search term", + "description": "the search term for finding the modpack. needs to be at least 4 characters long.\r\nFind out what term is needed by using the ftb app and searching with the term. make sure it only returns 1 result.\r\ncan also be searched for via: https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/search\/8?term={SEARCHTERM}\r\n\r\nonly needed if the modpack id and modpack version id is unknown.", + "env_variable": "FTB_SEARCH_TERM", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "FTB modpack ID", + "description": "The FTB Api modpack ID.\r\nNeeded if not using the search variable\r\n\r\nExample: FTB Interactions ID is 5.\r\nhttps:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/5", + "env_variable": "FTB_MODPACK_ID", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|integer", + "field_type": "text" + }, + { + "name": "FTB Pack Version", + "description": "what version of the modpack to install. leave empty if using the modpack version id variable.", + "env_variable": "FTB_VERSION_STRING", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "FTB Pack Version ID", + "description": "The modpack api version ID.\r\nneeded if not using the string for the version.\r\n\r\nExample FTB Revelations version id for version \"2.0.2\" is 86.\r\nwhich would come out as: https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/5\/86", + "env_variable": "FTB_MODPACK_VERSION_ID", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|integer", + "field_type": "text" + } + ] +} \ No newline at end of file diff --git a/java/ftb/egg-f-t-b-modpacks-ch-server.json b/java/ftb/outdated/egg-f-t-b-modpacks-ch-server.json similarity index 100% rename from java/ftb/egg-f-t-b-modpacks-ch-server.json rename to java/ftb/outdated/egg-f-t-b-modpacks-ch-server.json diff --git a/java/ftb/egg-pterodactyl-f-t-b-modpacks-ch-server.json b/java/ftb/outdated/egg-pterodactyl-f-t-b-modpacks-ch-server.json similarity index 100% rename from java/ftb/egg-pterodactyl-f-t-b-modpacks-ch-server.json rename to java/ftb/outdated/egg-pterodactyl-f-t-b-modpacks-ch-server.json From 6cfd0fbcd6182bb0abb8cf6f7e5ea3cb47f24dc6 Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Mon, 24 Nov 2025 21:42:22 +0800 Subject: [PATCH 13/20] add icon (#104) --- java/neoforge/egg-neo-forge.json | 34 ++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/java/neoforge/egg-neo-forge.json b/java/neoforge/egg-neo-forge.json index d48d3a26..f01de25c 100644 --- a/java/neoforge/egg-neo-forge.json +++ b/java/neoforge/egg-neo-forge.json @@ -1,38 +1,42 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PLCN_v1", - "update_url": null + "version": "PLCN_v3", + "update_url": "https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/neoforge/egg-neo-forge.json" }, - "exported_at": "2024-11-13T14:32:29+00:00", + "exported_at": "2025-11-24T08:47:32+00:00", "name": "NeoForge", "author": "glorantv@icloud.com", "uuid": "e23e092f-b803-4f34-82cf-2d6518c6351a", "description": "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.", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAACXBIWXMAAAsSAAALEgHS3X78AAAAPFBMVEWLjpQAAAD59PTm8vHV4N/n2dPH0dG9x8fHo7mqsLOgpanmjDfXdC+NcWi/YTR1dYCkTjdmU00mKjMTFRpppmRQAAAAAnRSTlP/AOW3MEoAAAE3SURBVHja7dvLboMwAERRcHjEqWtM+P9/7WLIYiyKoFXTVrlniZDnbmDnpv1lTfupFwtono4AAgiohjtzOaD7pkYIIICAh4tEGWVwsxlklNmMm/xwAgggoHE+ObpZ3sUDVv7KbgcBBBCwHdCJd8x+bC+zFDNLL9ZRh0QhgAAC/lrAuKU6/SpFsilylapx3EIAAQScCcgmyZtJks12QBQCCCDgSIBPujrAeQ4BBBBwPqAaDtKLByTTS5AqhAACCNgOmGT3PxDkLmnHXYLk1WCiTEIAAQRUAVGKVF/3IkmySbJIL2lVJAoBBBCwH2CKhZxXfJkAAgj4ekA2QRYTJBsCCCDg/wc8FBOkN0GKiSsCCCDgSIA/jXuKOT9JAAEE7AbcJP6ImxBAAAFVQCvT07VCAAEEcPWbgA9tTDwHvNgQFgAAAABJRU5ErkJggg==", + "tags": [], "features": [ "eula", "java_version", "pid_limit" ], "docker_images": { - "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", - "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", + "Java 21": "ghcr.io/parkervcp/yolks:java_21" }, "file_denylist": [], - "startup": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true @unix_args.txt", + "startup_commands": { + "Default": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true @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.allocations.default.port}}\",\r\n \"query.port\": \"{{server.allocations.default.port}}\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \")! For help, type \"\r\n}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"server-port\": \"{{server.allocations.default.port}}\",\n \"query.port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", "logs": "{}", "stop": "stop" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\n# NeoForge Installation Script\n#\n# Server Files: \/mnt\/server\n\napt-get update\napt-get install -y curl xq openjdk-17-jdk\n\nif [[ ! -d \/mnt\/server ]]; then\n mkdir \/mnt\/server\nfi\n\ncd \/mnt\/server\n\n# Remove spaces from the version number to avoid issues with curl\nNEOFORGE_VERSION=\"$(echo \"$NEOFORGE_VERSION\" | tr -d ' ')\"\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\n\n# If we have a specific NeoForge version set, use that\nif [[ ! -z ${NEOFORGE_VERSION} ]]; then\n # The 1.20.1 release lives in a different repository and is called \"forge\" instead of \"neoforge\"\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\n DOWNLOAD_LINK=https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/forge\/${NEOFORGE_VERSION}\/forge-${NEOFORGE_VERSION}\n ARTIFACT_NAME=\"forge\"\n else\n DOWNLOAD_LINK=https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/neoforge\/${NEOFORGE_VERSION}\/neoforge-${NEOFORGE_VERSION}\n ARTIFACT_NAME=\"neoforge\"\n fi\nelse\n # For NeoForge, downloading based on a Minecraft version is done by using the Maven metadata.\n # 1.20.1 is also handled differently here, because it's in a different repository and is called\n # \"forge\" instead of \"neoforge\".\n if [[ \"${MC_VERSION}\" == \"1.20.1\" ]]; then\n XML_DATA=$(curl -sSL https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/forge\/maven-metadata.xml)\n ARTIFACT_NAME=\"forge\"\n NEOFORGE_OLD=1\n else\n XML_DATA=$(curl -sSL https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/neoforge\/maven-metadata.xml)\n ARTIFACT_NAME=\"neoforge\"\n fi\n\n REPO_URL=\"https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/${ARTIFACT_NAME}\/\"\n\n # Get the latest version of Minecraft NeoForge supports. Here XML_DATA contains the metadata for\n # the new, \"neoforge\" repository, which is good since 1.20.1 will never be the latest anymore.\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\n echo \"Getting latest version of NeoForge.\"\n MC_VERSION=\"1.$(echo -e ${XML_DATA} | xq -x '\/metadata\/versioning\/release' | cut -d'.' -f1-2)\"\n fi\n\n echo \"Minecraft version: ${MC_VERSION}\"\n\n if [[ -z \"${NEOFORGE_OLD}\" ]]; then\n # For modern artifacts we cut the \"1.\" from the Minecraft version, and search for that\n VERSION_KEY=$(echo -n ${MC_VERSION} | cut -d'.' -f2-)\n else\n # For 1.20.1, it uses the same naming scheme as Forge, so we just append a dash\n VERSION_KEY=\"${MC_VERSION}-\"\n fi\n\n # Then we extract the latest the latest NeoForge version available based on the Maven metadata\n NEOFORGE_VERSION=$(echo -e ${XML_DATA} | xq -x \"(\/metadata\/versioning\/versions\/*[starts-with(text(), '${VERSION_KEY}')])\" | tail -n1)\n if [[ -z \"${NEOFORGE_VERSION}\" ]]; then\n echo \"The install failed, because there is no valid version of NeoForge for the version of Minecraft selected.\"\n exit 1\n fi\n\n echo \"NeoForge version: ${NEOFORGE_VERSION}\"\n\n DOWNLOAD_LINK=\"${REPO_URL}${NEOFORGE_VERSION}\/${ARTIFACT_NAME}-${NEOFORGE_VERSION}\"\nfi\n\necho \"Downloading NeoForge version ${NEOFORGE_VERSION}\"\necho \"Download link is ${DOWNLOAD_LINK}\"\n\n# Check if the download link we generated is valid\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then\n echo -e \"Installer jar download link is valid.\"\n else\n echo -e \"Link is invalid. Exiting now\"\n exit 2\n fi\nelse\n echo -e \"No download link provided. Exiting now\"\n exit 3\nfi\n\n# If so, go ahead and download the installer\ncurl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar\n\nif [[ ! -f .\/installer.jar ]]; then\n echo \"!!! Error downloading NeoForge version ${NEOFORGE_VERSION} !!!\"\n exit 4\nfi\n\n# Delete args to support downgrading\/upgrading\nrm -rf libraries\/net\/neoforged\/${ARTIFACT_NAME}\nrm unix_args.txt\n\n# Installing server\necho -e \"Installing NeoForge server.\\n\"\njava -jar installer.jar --installServer || {\n echo -e \"\\nInstall failed using NeoForge version ${NEOFORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.\"\n echo -n \"Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Wings\"\n echo \"config or specify exact allocated memory in the server Build Configuration instead of 0!\"\n echo \"Otherwise, the NeoForge installer will not have enough memory.\";\n exit 5;\n}\n\n# Symlink the startup arguments to the server directory\nln -sf libraries\/net\/neoforged\/${ARTIFACT_NAME}\/*\/unix_args.txt unix_args.txt\n\n# And finally clean up\necho -e \"Deleting installer.jar file.\\n\"\nrm -rf installer.jar\n\necho \"Installation process is completed!\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "script": "#!/bin/bash\n# NeoForge Installation Script\n#\n# Server Files: /mnt/server\n\napt-get update\napt-get install -y curl xq openjdk-17-jdk\n\nif [[ ! -d /mnt/server ]]; then\n mkdir /mnt/server\nfi\n\ncd /mnt/server\n\n# Remove spaces from the version number to avoid issues with curl\nNEOFORGE_VERSION=\"$(echo \"$NEOFORGE_VERSION\" | tr -d ' ')\"\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\n\n# If we have a specific NeoForge version set, use that\nif [[ ! -z ${NEOFORGE_VERSION} ]]; then\n # The 1.20.1 release lives in a different repository and is called \"forge\" instead of \"neoforge\"\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\n DOWNLOAD_LINK=https://maven.neoforged.net/releases/net/neoforged/forge/${NEOFORGE_VERSION}/forge-${NEOFORGE_VERSION}\n ARTIFACT_NAME=\"forge\"\n else\n DOWNLOAD_LINK=https://maven.neoforged.net/releases/net/neoforged/neoforge/${NEOFORGE_VERSION}/neoforge-${NEOFORGE_VERSION}\n ARTIFACT_NAME=\"neoforge\"\n fi\nelse\n # For NeoForge, downloading based on a Minecraft version is done by using the Maven metadata.\n # 1.20.1 is also handled differently here, because it's in a different repository and is called\n # \"forge\" instead of \"neoforge\".\n if [[ \"${MC_VERSION}\" == \"1.20.1\" ]]; then\n XML_DATA=$(curl -sSL https://maven.neoforged.net/releases/net/neoforged/forge/maven-metadata.xml)\n ARTIFACT_NAME=\"forge\"\n NEOFORGE_OLD=1\n else\n XML_DATA=$(curl -sSL https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml)\n ARTIFACT_NAME=\"neoforge\"\n fi\n\n REPO_URL=\"https://maven.neoforged.net/releases/net/neoforged/${ARTIFACT_NAME}/\"\n\n # Get the latest version of Minecraft NeoForge supports. Here XML_DATA contains the metadata for\n # the new, \"neoforge\" repository, which is good since 1.20.1 will never be the latest anymore.\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\n echo \"Getting latest version of NeoForge.\"\n MC_VERSION=\"1.$(echo -e ${XML_DATA} | xq -x '/metadata/versioning/release' | cut -d'.' -f1-2)\"\n fi\n\n echo \"Minecraft version: ${MC_VERSION}\"\n\n if [[ -z \"${NEOFORGE_OLD}\" ]]; then\n # For modern artifacts we cut the \"1.\" from the Minecraft version, and search for that\n VERSION_KEY=$(echo -n ${MC_VERSION} | cut -d'.' -f2-)\n else\n # For 1.20.1, it uses the same naming scheme as Forge, so we just append a dash\n VERSION_KEY=\"${MC_VERSION}-\"\n fi\n\n # Then we extract the latest the latest NeoForge version available based on the Maven metadata\n NEOFORGE_VERSION=$(echo -e ${XML_DATA} | xq -x \"(/metadata/versioning/versions/*[starts-with(text(), '${VERSION_KEY}')])\" | tail -n1)\n if [[ -z \"${NEOFORGE_VERSION}\" ]]; then\n echo \"The install failed, because there is no valid version of NeoForge for the version of Minecraft selected.\"\n exit 1\n fi\n\n echo \"NeoForge version: ${NEOFORGE_VERSION}\"\n\n DOWNLOAD_LINK=\"${REPO_URL}${NEOFORGE_VERSION}/${ARTIFACT_NAME}-${NEOFORGE_VERSION}\"\nfi\n\necho \"Downloading NeoForge version ${NEOFORGE_VERSION}\"\necho \"Download link is ${DOWNLOAD_LINK}\"\n\n# Check if the download link we generated is valid\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\n if curl --output /dev/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then\n echo -e \"Installer jar download link is valid.\"\n else\n echo -e \"Link is invalid. Exiting now\"\n exit 2\n fi\nelse\n echo -e \"No download link provided. Exiting now\"\n exit 3\nfi\n\n# If so, go ahead and download the installer\ncurl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar\n\nif [[ ! -f ./installer.jar ]]; then\n echo \"!!! Error downloading NeoForge version ${NEOFORGE_VERSION} !!!\"\n exit 4\nfi\n\n# Delete args to support downgrading/upgrading\nrm -rf libraries/net/neoforged/${ARTIFACT_NAME}\nrm unix_args.txt\n\n# Installing server\necho -e \"Installing NeoForge server.\\n\"\njava -jar installer.jar --installServer || {\n echo -e \"\\nInstall failed using NeoForge version ${NEOFORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.\"\n echo -n \"Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Wings\"\n echo \"config or specify exact allocated memory in the server Build Configuration instead of 0!\"\n echo \"Otherwise, the NeoForge installer will not have enough memory.\";\n exit 5;\n}\n\n# Symlink the startup arguments to the server directory\nln -sf libraries/net/neoforged/${ARTIFACT_NAME}/*/unix_args.txt unix_args.txt\n\n# And finally clean up\necho -e \"Deleting installer.jar file.\\n\"\nrm -rf installer.jar\n\necho \"Installation process is completed!\"", + "container": "ghcr.io/parkervcp/installers:debian", "entrypoint": "bash" } }, @@ -61,8 +65,8 @@ "user_editable": true, "rules": [ "nullable", - "regex:\/^[0-9\\.\\-]+$\/" + "regex:/^[0-9\\.\\-]+$/" ] } ] -} \ No newline at end of file +} From 5ca61f621622859995e2ba90c5cc04e83d6157ae Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Sun, 14 Dec 2025 11:24:30 +0100 Subject: [PATCH 14/20] Switch paper to fill.papermc.io (#106) * Switch paper to fill.papermc.io * Apply requested changes --- java/paper/egg-paper.json | 96 ++++++++++++++++----------- java/paper/egg-pterodactyl-paper.json | 72 ++++++++++---------- 2 files changed, 92 insertions(+), 76 deletions(-) diff --git a/java/paper/egg-paper.json b/java/paper/egg-paper.json index d4d0b253..3f0108d1 100644 --- a/java/paper/egg-paper.json +++ b/java/paper/egg-paper.json @@ -1,85 +1,101 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PTDL_v2", + "version": "PLCN_v3", "update_url": null }, - "exported_at": "2024-08-02T12:05:42+00:00", + "exported_at": "2025-12-11T14:26:49+00:00", "name": "Paper", "author": "parker@pterodactyl.io", "uuid": "150956be-4164-4086-9057-631ae95505e9", "description": "High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies.", + "image": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5OTUuMyA5OTUuMzEiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTS0uMDA1IDQ5OC43MjggNDk2LjYwNy4wMzJsNDk4LjY5NSA0OTYuNjEyLTQ5Ni42MSA0OTguNjk2eiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJiIj48cGF0aCBmaWxsPSJub25lIiBkPSJNNy43MDIgNDEwLjQ0NiA1ODQuODQ2IDcuNjc0IDk4Ny42MTggNTg0LjgyIDQxMC40NzMgOTg3LjU5eiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjIj48cGF0aCBmaWxsPSJub25lIiBkPSJtMjguMzUzIDMzMi4wNDcgNjM0Ljg2LTMwMy43NjUgMzAzLjc2NSA2MzQuODYtNjM0Ljg2IDMwMy43NjV6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImQiPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Im03MS41NTkgMjQwLjU0IDY4My4yMS0xNjguOTUyIDE2OC45NSA2ODMuMjFMMjQwLjUxIDkyMy43NXoiLz48L2NsaXBQYXRoPjwvZGVmcz48cGF0aCBmaWxsPSIjZjdlMzQ2IiBkPSJNLjAwNSA0OTguNzI4IDQ5Ni42MTcuMDMybDQ5OC42OTUgNDk2LjYxMi00OTYuNjEgNDk4LjY5NnoiLz48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNhNDk3MzEiIGQ9Ik0zLjUyNSA0MzguNDIgNTU2LjgzMSAzLjQ4bDQzNC45NCA1NTMuMzA3LTU1My4zMDYgNDM0Ljk0eiIvPjwvZz48cGF0aCBmaWxsPSIjNDI4ZWRiIiBkPSJNNy42OTggNDEwLjQ1NCA1ODQuODQyIDcuNjgzbDQwMi43NzEgNTc3LjE0NEw0MTAuNDcgOTg3LjU5OHoiLz48ZyBjbGlwLXBhdGg9InVybCgjYikiPjxwYXRoIGZpbGw9IiMyYjVmOTIiIGQ9Ik0xOC45OTkgMzYxLjQ2NCA2MzMuODMyIDE4Ljk3bDM0Mi40OTIgNjE0LjgzMy02MTQuODMyIDM0Mi40OTJ6Ii8+PC9nPjxwYXRoIGZpbGw9IiM5NmM5M2QiIGQ9Im0yOC4zNjYgMzMyLjA1MiA2MzQuODYtMzAzLjc2NSAzMDMuNzY1IDYzNC44Ni02MzQuODYgMzAzLjc2NXoiLz48ZyBjbGlwLXBhdGg9InVybCgjYykiPjxwYXRoIGZpbGw9IiM2Yzk4M2YiIGQ9Ik01OC43NTcgMjYzLjA2OCA3MzIuMjYgNTguODI3IDkzNi41IDczMi4zMyAyNjIuOTk5IDkzNi41N3oiLz48L2c+PHBhdGggZmlsbD0iI2ZkNGY1NyIgZD0ibTcxLjU2NiAyNDAuNTM3IDY4My4yMS0xNjguOTUgMTY4Ljk1MSA2ODMuMjEtNjgzLjIxIDE2OC45NXoiLz48ZyBjbGlwLXBhdGg9InVybCgjZCkiPjxwYXRoIGZpbGw9IiNiMDM2M2MiIGQ9Im0xMjkuNzgxIDE2Mi40OTIgNzAzLjAyNi0zMi43ODUgMzIuNzg1IDcwMy4wMjYtNzAzLjAyNiAzMi43ODV6Ii8+PC9nPjxwYXRoIGZpbGw9IiMzZDNkM2QiIGQ9Ik0xNDUuNzYgMTQ1Ljc2aDcwMy43OXY3MDMuNzlIMTQ1Ljc2eiIvPjxwYXRoIGZpbGw9IiM0NzQ3NDciIGQ9Ik0xNjQuNjEgMTY0LjZIODMwLjd2NjY2LjA5SDE2NC42MXoiLz48ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik01NTQuNDUgNDYyLjMyYy01NC4zOSA0Mi4xMy02OS4yMyA1Ny4yMi0xNjQuMzUgMTI3LjZsLTkuNjItNC44NGM1MS42LTQxLjcgMTI3LjU4LTEwMi42MiAxNzkuMTQtMTQ0LjI2IDE5LjI1LTE1LjI4IDM4LjY5LTM5LjExIDU3LjctNTQuOTF6bS0yMS43OCAxODguNzZjMy40NiAxLjcyIDYuMjUgMi42IDkuNjIgNC4zLTI2LjAzIDIzLjEyLTUzLjc2IDQ5LjI1LTc4Ljk2IDczLjYxLTQuODkgMi4zLTkuMzMgMS43OS0xMy4zMi0xLjU0bDE4LjQ1LTE5LjQ3YTQzMzAgNDMzMCAwIDAgMCA1Ny4zOS01NC44MmMzLjItMi40IDMuMTItMy43MiA2LjgzLTIuMDhabTExMy42NSA0Mi41NWMzLjcyLTIuMzEgNS42Ni00LjEyIDcuMDctNy42NSAxOS44Ny0xMjYuNjIgNDAuOTktMjUyLjk2IDYzLjM1LTM3OS4wNiA1LjA5LTI1LjMyIDYuMDgtMjEuNzYgNi4zNC0zMy43OSAxMS40MyAxLjc3IDE2LjE4IDguNDYgMTQuMjUgMjAuMDYtNS4zIDMyLjUzLTExLjI5IDY0LjkxLTE3Ljk1IDk3LjE0LTE1LjQxIDk0Ljc1LTMwLjk5IDE4OS40Ni00Ny4yNiAyODQuMDYtMS4zNyAxMC40NC0yLjE1IDE3LjIxLTQuNDcgMjEuMDktMy42OCA0LjUyLTguNDMgNi4xLTE0LjI1IDQuNzUtNC44My0xLjMzLTMuNzgtMS4xLTkuNjgtMy4zNGwtMy4yMS0xLjMzczMuOTktLjk1IDUuODItMS45M1oiLz48cGF0aCBmaWxsPSIjOTk5IiBkPSJNNTMyLjY3IDY1MS4wOWMtMS4yMy0uMTQtMi40OC0uMzUtMy41OS40NWEyMDA5IDIwMDkgMCAwIDAtNjIuOSA2MC42NWMtLjEzLS45NS4wMi0xLjg0LjQ1LTIuNyAzLjI5LTQuNzkgNS44OS04LjU3IDkuMTgtMTMuMzYuNjUtMS42My41NC0zLjA3LjQ0LTQuMDktMi4zOC0yNS41NS0xMC4wNS00OS40Ni0yMS43NS03Mi40MS0uMjUtLjQ4LjI1LTEuMjEgMS4zNS0uOSAyNS44NyAxMC4zNiA1MS40OCAyMS4xNSA3Ni44MiAzMi4zNVoiLz48cGF0aCBmaWxsPSIjY2NjIiBkPSJNNTU5LjYzIDQ0MC44M2E4NTM3IDg1MzcgMCAwIDEtMTgxLjk1IDE0Ni40NmMtMzYuNS0xNC44NC03Mi45Ni0yOS44LTEwOS4zNy00NC44Ny0xNC4wOC01LjgzLTE0LjAzLTE4LjU0LTEuNi0yNy4wMS02Ljc0IDguNTQtNS41NCAxNS44OCAzLjU5IDIyLjAxIDEyLjQ5IDUuMyAxMDYuNDEgNDQuMjUgMTA2LjQxIDQ0LjI1cy0uNzYtMy4wMyAxODIuOTEtMTQwLjg0WiIvPjxwYXRoIGZpbGw9IiNiMmIyYjIiIGQ9Ik02MzYuOSA2ODcuOTNjMTMuOTQgNC45OCAxMy40MyAxLjUgMTkuMzktNC4wOC0uNTEgMy45Ni0uOTUgOC4zLTUuOTkgMTEuMTItMy40NiAyLTYuNTkgMS45My05LjgxLjZhMTgyMCAxODIwIDAgMCAxLTEwNy44Mi00NC40OGMtMjUuMzQtMTEuMi01MC45NS0yMS45OC03Ni44Mi0zMi4zNWwtMS4zNS45YzEyLjY0IDIzLjYyIDE5Ljk4IDQ4Ljc3IDIyLjAxIDc1LjQ4LTMuMjkgNC43OS02LjU5IDkuNTgtOS44OCAxNC4zOHEtLjY0NSAxLjI3NS0uNDUgMi43bC0xNi4xNyAxNS4yN2MtNC4wNi0uMDEtNi4zMS0yLjExLTYuNzQtNi4yOS0uNTktMzMuNzMtLjYtNjcuNDYtLjAyLTEwMS4xOSAwLS40MS4wMS0uODEuMDItMS4yNC4xNS01LjA3IDUuMjYtNi41MiAxMC4zMy00Ljk0cTkxLjg0NSAzNi42NzUgMTgzLjMgNzQuMTNaIi8+PHBhdGggZmlsbD0iI2NjYyIgZD0iTTcxOS42NCAyNjcuOTNjNSAzLjk4IDQuMjMgMTAuNTcgMy4yOCAxNi4xNy0yMi42MyAxMzIuODItNDQuNTYgMjY2LjMyLTY2LjUzIDM5OS4yLS4yMSAxLjI0LS43NiA0LjE1LTIuNDIgNS42NS0zLjc3IDMtNy4xNyAyLjQ4LTE3LjA2LTEuMDEgMS40My0zLjM3IDIuNDgtNi45NiAzLjE0LTEwLjc4IDI1LjM0LTEyOS40MSA1MS4yNS0yNTguNjUgNzcuNzItMzg3LjcxIDIuMzMtMTMuNjUgMi4xMy05LjcxIDEuODctMjEuNVoiLz48cGF0aCBmaWxsPSIjZjJmMmYyIiBkPSJNNzE5LjY0IDI2Ny45M2MuOTIgMTAuNiAxLjA1IDUuODktMS44NyAyMS41LTI2LjQ3IDEyOS4wNi01Mi4zOCAyNTguMy03Ny43MiAzODcuNzEtLjY2IDMuODItMS43MSA3LjQxLTMuMTQgMTAuNzhxLTkxLjQ1NS0zNy40NTUtMTgzLjMtNzQuMTNjLTUuMDgtMS41OC04LjUyLjA3LTEwLjMzIDQuOTQtLjYgMzQuMTQtLjYgNjguMjkgMCAxMDIuNDMuNDMgNC4xOCAyLjY4IDYuMjggNi43NCA2LjI5LTEuMTIgMS4xNS0zLjc4IDEuMDctMy43OCAxLjA3cy0xMS45Mi0uNjktMTMuMzYtMy41NGMtLjM3LS43MS0uMzgtMS40Ni0uMzktMi4wOC0uMTgtMzYuMy0uNjEtNzIuMzktMS4yOS0xMDguMjktLjAyLS44NyAwLTEuNzIuMzUtMy4yNHMxLjM2LTMuNDYgMi43NS01LjIyYTExNjExIDExNjExIDAgMCAwIDE1OS4wNC0xOTEuMzkgMTM0MyAxMzQzIDAgMCAxLTMzLjY5IDI2LjA2QzQwMi40NCA1NTguNzggMzc2Ljc0IDU4MS42NiAzNzYuNzQgNTgxLjY2cy03MS45LTI5LjYzLTEwNi40MS00NC4yNWMtOS4xMy02LjEzLTEwLjMzLTEzLjQ3LTMuNTktMjIuMDFhNTA2MjggNTA2MjggMCAwIDAgNDI5LjQ5LTI0Ni42NGM1LjI4LTMuMjYgMTAuOTctNC40NiAxNy4wNy0zLjU5IDEuMzEuMTMgNC4xMS41OCA2LjM2IDIuNzZaIi8+PC9nPjwvc3ZnPg==", + "tags": [ + "minecraft" + ], "features": [ "eula", "java_version", "pid_limit" ], "docker_images": { - "Java 8": "ghcr.io\/parkervcp\/yolks:java_8", - "Java 11": "ghcr.io\/parkervcp\/yolks:java_11", - "Java 16": "ghcr.io\/parkervcp\/yolks:java_16", - "Java 17": "ghcr.io\/parkervcp\/yolks:java_17", - "Java 21": "ghcr.io\/parkervcp\/yolks:java_21" + "Java 21": "ghcr.io/pelican-eggs/yolks:java_21", + "Java 17": "ghcr.io/pelican-eggs/yolks:java_17", + "Java 16": "ghcr.io/pelican-eggs/yolks:java_16", + "Java 11": "ghcr.io/pelican-eggs/yolks:java_11", + "Java 8": "ghcr.io/pelican-eggs/yolks:java_8" }, "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}", + "startup_commands": { + "Default": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}" + }, "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.allocations.default.port}}\",\r\n \"query.port\": \"{{server.allocations.default.port}}\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \")! For help, type \"\r\n}", - "logs": "{}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"\",\n \"server-port\": \"{{server.allocations.default.port}}\",\n \"query.port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", + "logs": "[]", "stop": "stop" }, "scripts": { "installation": { - "script": "#!\/bin\/ash\r\n# Paper Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=paper\r\n\r\nif [ -n \"${DL_PATH}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_PATH}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep -m1 true`\r\n\tLATEST_VERSION=`curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Specified version not found. Defaulting to the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\r\n\tBUILD_EXISTS=`curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\r\n\tLATEST_BUILD=`curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION}\/builds\/${BUILD_NUMBER}\/downloads\/${JAR_NAME}\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/minecraft\/java\/server.properties\r\nfi", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "script": "#!/bin/ash\n# Paper Installation Script\n#\n# Server Files: /mnt/server\nPROJECT=paper\n\nif [ -n \"${DL_PATH}\" ]; then\n\techo -e \"Using supplied download url: ${DL_PATH}\"\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\nelse\n\tVER_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions | any(.[]; index($VERSION))' | grep -m1 true`\n\tLATEST_VERSION=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r '.versions | to_entries | .[0].value[0]'`\n\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\n\telse\n\t\techo -e \"Specified version not found. Defaulting to the latest ${PROJECT} version\"\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\n\tfi\n\n\tBUILD_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\n\tLATEST_BUILD=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[0]'`\n\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\n\telse\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\n\t\tBUILD_NUMBER=${LATEST_BUILD}\n\tfi\n\n\techo \"Version being downloaded\"\n\techo -e \"Project: ${PROJECT}\"\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\n\techo -e \"Build: ${BUILD_NUMBER}\"\n\tDOWNLOAD_URL=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER} | jq -r '.downloads.\"server:default\".url'`\nfi\n\ncd /mnt/server\n\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\n\nif [ -f ${SERVER_JARFILE} ]; then\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\nfi\n\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\n\nif [ ! -f server.properties ]; then\n echo -e \"Downloading MC server.properties\"\n curl -o server.properties https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/server.properties\nfi", + "container": "ghcr.io/pelican-eggs/installers:alpine", "entrypoint": "ash" } }, "variables": [ { - "sort": null, - "name": "Minecraft Version", - "description": "The version of minecraft to download. \r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", - "env_variable": "MINECRAFT_VERSION", + "name": "Build Number", + "description": "The build number for the paper release.\r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", + "env_variable": "BUILD_NUMBER", "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "nullable|string|max:20", - "field_type": "text" - }, - { - "sort": null, - "name": "Server Jar File", - "description": "The name of the server jarfile to run the server with.", - "env_variable": "SERVER_JARFILE", - "default_value": "server.jar", - "user_viewable": true, - "user_editable": true, - "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", - "field_type": "text" + "rules": [ + "required", + "string", + "max:20" + ], + "sort": 4 }, { - "sort": null, "name": "Download Path", - "description": "A URL to use to download a server.jar rather than the ones in the install script. This is not user viewable.", + "description": "A URL to use to download a server.jar rather than the ones in the install script. This is not user\nviewable.", "env_variable": "DL_PATH", "default_value": "", "user_viewable": false, "user_editable": false, - "rules": "nullable|string", - "field_type": "text" + "rules": [ + "nullable", + "string" + ], + "sort": 3 }, { - "sort": null, - "name": "Build Number", - "description": "The build number for the paper release.\r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", - "env_variable": "BUILD_NUMBER", + "name": "Minecraft Version", + "description": "The version of minecraft to download. \r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", + "env_variable": "MINECRAFT_VERSION", "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20", - "field_type": "text" + "rules": [ + "nullable", + "string", + "max:20" + ], + "sort": 1 + }, + { + "name": "Server Jar File", + "description": "The name of the server jarfile to run the server with.", + "env_variable": "SERVER_JARFILE", + "default_value": "server.jar", + "user_viewable": true, + "user_editable": true, + "rules": [ + "required", + "regex:/^([\\w\\d._-]+)(\\.jar)$/" + ], + "sort": 2 } ] } \ No newline at end of file diff --git a/java/paper/egg-pterodactyl-paper.json b/java/paper/egg-pterodactyl-paper.json index 940f180c..5a7624c6 100644 --- a/java/paper/egg-pterodactyl-paper.json +++ b/java/paper/egg-pterodactyl-paper.json @@ -1,10 +1,10 @@ { - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "update_url": null, - "version": "PTDL_v2" + "version": "PTDL_v2", + "update_url": null }, - "exported_at": "2024-08-02T12:05:42+00:00", + "exported_at": "2025-12-11T14:26:49+00:00", "name": "Paper", "author": "parker@pterodactyl.io", "description": "High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies.", @@ -14,51 +14,41 @@ "pid_limit" ], "docker_images": { - "Java 8": "ghcr.io\/parkervcp\/yolks:java_8", - "Java 11": "ghcr.io\/parkervcp\/yolks:java_11", - "Java 16": "ghcr.io\/parkervcp\/yolks:java_16", - "Java 17": "ghcr.io\/parkervcp\/yolks:java_17", - "Java 21": "ghcr.io\/parkervcp\/yolks:java_21" + "Java 8": "ghcr.io\/pelican-eggs\/yolks:java_8", + "Java 11": "ghcr.io\/pelican-eggs\/yolks:java_11", + "Java 16": "ghcr.io\/pelican-eggs\/yolks:java_16", + "Java 17": "ghcr.io\/pelican-eggs\/yolks:java_17", + "Java 21": "ghcr.io\/pelican-eggs\/yolks:java_21" }, "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}", + "startup": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}", "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}", - "logs": "{}", - "startup": "{\r\n \"done\": \")! For help, type \"\r\n}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"\",\n \"server-port\": \"{{server.build.default.port}}\",\n \"query.port\": \"{{server.build.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", + "logs": "[]", "stop": "stop" }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", - "entrypoint": "ash", - "script": "#!/bin/ash\r\n# Paper Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nPROJECT=paper\r\n\r\nif [ -n \"${DL_PATH}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_PATH}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep -m1 true`\r\n\tLATEST_VERSION=`curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Specified version not found. Defaulting to the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\r\n\tBUILD_EXISTS=`curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\r\n\tLATEST_BUILD=`curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER}/downloads/${JAR_NAME}\r\nfi\r\n\r\ncd /mnt/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https://raw.githubusercontent.com/parkervcp/eggs/master/minecraft/java/server.properties\r\nfi" + "script": "#!/bin/ash\n# Paper Installation Script\n#\n# Server Files: /mnt/server\nPROJECT=paper\n\nif [ -n \"${DL_PATH}\" ]; then\n\techo -e \"Using supplied download url: ${DL_PATH}\"\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\nelse\n\tVER_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions | any(.[]; index($VERSION))' | grep -m1 true`\n\tLATEST_VERSION=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r '.versions | to_entries | .[0].value[0]'`\n\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\n\telse\n\t\techo -e \"Specified version not found. Defaulting to the latest ${PROJECT} version\"\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\n\tfi\n\n\tBUILD_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\n\tLATEST_BUILD=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[0]'`\n\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\n\telse\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\n\t\tBUILD_NUMBER=${LATEST_BUILD}\n\tfi\n\n\techo \"Version being downloaded\"\n\techo -e \"Project: ${PROJECT}\"\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\n\techo -e \"Build: ${BUILD_NUMBER}\"\n\tDOWNLOAD_URL=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER} | jq -r '.downloads.\"server:default\".url'`\nfi\n\ncd /mnt/server\n\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\n\nif [ -f ${SERVER_JARFILE} ]; then\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\nfi\n\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\n\nif [ ! -f server.properties ]; then\n echo -e \"Downloading MC server.properties\"\n curl -o server.properties https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/server.properties\nfi", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", + "entrypoint": "ash" } }, "variables": [ { - "name": "Minecraft Version", - "description": "The version of minecraft to download. \r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", - "env_variable": "MINECRAFT_VERSION", + "name": "Build Number", + "description": "The build number for the paper release.\r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", + "env_variable": "BUILD_NUMBER", "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "nullable|string|max:20", - "field_type": "text" - }, - { - "name": "Server Jar File", - "description": "The name of the server jarfile to run the server with.", - "env_variable": "SERVER_JARFILE", - "default_value": "server.jar", - "user_viewable": true, - "user_editable": true, - "rules": "required|regex:/^([\\w\\d._-]+)(\\.jar)$/", + "rules": "required|string|max:20", "field_type": "text" }, { "name": "Download Path", - "description": "A URL to use to download a server.jar rather than the ones in the install script. This is not user viewable.", + "description": "A URL to use to download a server.jar rather than the ones in the install script. This is not user\nviewable.", "env_variable": "DL_PATH", "default_value": "", "user_viewable": false, @@ -67,14 +57,24 @@ "field_type": "text" }, { - "name": "Build Number", - "description": "The build number for the paper release.\r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", - "env_variable": "BUILD_NUMBER", + "name": "Minecraft Version", + "description": "The version of minecraft to download. \r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", + "env_variable": "MINECRAFT_VERSION", "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20", + "rules": "nullable|string|max:20", + "field_type": "text" + }, + { + "name": "Server Jar File", + "description": "The name of the server jarfile to run the server with.", + "env_variable": "SERVER_JARFILE", + "default_value": "server.jar", + "user_viewable": true, + "user_editable": true, + "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", "field_type": "text" } ] -} +} \ No newline at end of file From 4d612611ff72268789d38da9da3122439ac02a95 Mon Sep 17 00:00:00 2001 From: GamerDuck123 Date: Thu, 25 Dec 2025 03:53:57 -0500 Subject: [PATCH 15/20] Alwaysauth (#108) * Added Always Auth Eggs * Updated the README * Removed pterodactyl egg as it wasn't generated by the panel and was manually made from the pelican panel egg version, will add a pterodactyl egg version later. * Updated the global README * Added AlwaysAuth to the sub directory READMEs * Added a way to have max memory set by host * Added pterodactyl egg using https://redthirten.github.io/scramble-egg-converter/ Thanks QuintenQVD0 for telling me about it! * Update default port description from Game to Authorization * Updated the eggs to use a default server-ip of 0.0.0.0 to catch all traffic, thanks again QuintenQVD0 this is my first egg, and they're catching all the things I'm missing, truly a big help! --- README.md | 1 + proxy/README.md | 1 + proxy/java/README.md | 4 ++ proxy/java/alwaysauth/README.md | 10 ++++ proxy/java/alwaysauth/egg-always-auth.json | 58 +++++++++++++++++++ .../egg-pterodactyl-always-auth.json | 52 +++++++++++++++++ 6 files changed, 126 insertions(+) create mode 100644 proxy/java/alwaysauth/README.md create mode 100644 proxy/java/alwaysauth/egg-always-auth.json create mode 100644 proxy/java/alwaysauth/egg-pterodactyl-always-auth.json diff --git a/README.md b/README.md index 446dfddc..537b8b54 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ It’s set in infinitely-generated worlds of wide open terrain - icy mountains, * [GeyserMC](proxy/cross_platform/geyser) * [Waterdog](proxy/cross_platform/waterdog) * [Java](proxy/java) + * [AlwaysAuth](proxy/java/alwaysauth) * [Travertine](proxy/java/travertine) * [Velocity](proxy/java/velocity) * [VIAaas](proxy/java/viaaas) diff --git a/proxy/README.md b/proxy/README.md index b5847ddc..a2c190f9 100644 --- a/proxy/README.md +++ b/proxy/README.md @@ -1,6 +1,7 @@ # Minecraft Proxies * [Java](/java/) + * [AlwaysAuth](java/alwaysauth) * [Travertine](java/travertine) * [Velocity](/java/velocity) * [VIAaaS](/java/viaaas) diff --git a/proxy/java/README.md b/proxy/java/README.md index accecce9..5a65a761 100644 --- a/proxy/java/README.md +++ b/proxy/java/README.md @@ -1,6 +1,10 @@ # Minecraft Java Proxies +#### AlwaysAuth +[AlwaysAuth](https://github.com/GamerDuck123/AlwaysAuth) +AlwaysAuth is a proxy for the Mojang authorization servers that ensures your server always stays online + #### Travertine [Travertine](https://papermc.io/downloads#Travertine) Waterfall, with additional support for Minecraft 1.7.10. diff --git a/proxy/java/alwaysauth/README.md b/proxy/java/alwaysauth/README.md new file mode 100644 index 00000000..4038e42f --- /dev/null +++ b/proxy/java/alwaysauth/README.md @@ -0,0 +1,10 @@ +# AlwaysAuth Authorization Proxy +AlwaysAuth is a proxy for the Mojang authorization servers that ensures your server always stays online + +## Server Ports +The authorization server requires a single port for access (default 8795) for the Minecraft server to connect to. + + +| Port | default | +|-------|---------| +| Authorization | 8795 | diff --git a/proxy/java/alwaysauth/egg-always-auth.json b/proxy/java/alwaysauth/egg-always-auth.json new file mode 100644 index 00000000..f01e147c --- /dev/null +++ b/proxy/java/alwaysauth/egg-always-auth.json @@ -0,0 +1,58 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", + "meta": { + "version": "PLCN_v3", + "update_url": "https://raw.githubusercontent.com/GamerDuck123/AlwaysAuth/refs/heads/master/egg-always-auth.json" + }, + "exported_at": "2025-12-24T22:04:11+00:00", + "name": "Always Auth", + "author": "contact@quacks.media", + "uuid": "3885c37c-f1da-4979-860d-4c200a8ca564", + "description": "A simple proxy that sits between your server and Mojang's auth services that ensures even when they're offline, you stay online!", + "tags": [ + "minecraft" + ], + "features": [], + "docker_images": { + "Java 21": "ghcr.io/parkervcp/yolks:java_21" + }, + "file_denylist": [], + "startup_commands": { + "Default": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{JARFILE}}" + }, + "config": { + "files": "{\n \"data\\/config.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"server-port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", + "logs": "[]", + "stop": "stop" + }, + "scripts": { + "installation": { + "script": "#!/bin/bash\n\necho \"======================================\"\necho \" AlwaysAuth Installer\"\necho \"======================================\"\n\nmkdir -p /mnt/server\ncd /mnt/server\n\nJAR_NAME=\"AlwaysAuth.jar\"\n\ncommand -v curl >/dev/null 2>&1 || {\n echo \"ERROR: curl is required.\"\n exit 1\n}\n\n# --------------------------------------\n# Resolve version\n# --------------------------------------\n\nif [ \"$VERSION\" = \"latest\" ]; then\n echo \"Resolving latest standalone version...\"\n\n STANDALONE_VERSION=\"$(curl -fsSL \"https://raw.githubusercontent.com/GamerDuck123/AlwaysAuth/refs/heads/master/standalone-latest.txt\" | tr -d '[:space:]')\"\n\n if [ -z \"$STANDALONE_VERSION\" ]; then\n echo \"ERROR: standalone-latest.txt is empty.\"\n exit 1\n fi\nelse\n echo \"Using user-specified version: $VERSION\"\n STANDALONE_VERSION=\"$VERSION\"\nfi\n\necho \"Resolved version: $STANDALONE_VERSION\"\n\n# --------------------------------------\n# Download\n# --------------------------------------\n\nDOWNLOAD_URL=\"https://github.com/GamerDuck123/AlwaysAuth/releases/download/v${STANDALONE_VERSION}/AlwaysAuth-standalone-${STANDALONE_VERSION}.jar\"\n\necho \"Download URL: $DOWNLOAD_URL\"\necho \"Downloading AlwaysAuth...\"\n\ncurl -fL \"$DOWNLOAD_URL\" -o \"$JAR_NAME\"\n\nif [ ! -f \"$JAR_NAME\" ]; then\n echo \"ERROR: Download failed.\"\n exit 1\nfi\n\necho \"Install completed successfully!\"\necho \"======================================\"\nexit 0\n", + "container": "ghcr.io/pelican-eggs/installers:debian", + "entrypoint": "/bin/bash" + } + }, + "variables": [ + { + "name": "JARFILE", + "description": "The name of the jar to use.", + "env_variable": "JARFILE", + "default_value": "AlwaysAuth.jar", + "user_viewable": true, + "user_editable": true, + "rules": [], + "sort": 1 + }, + { + "name": "VERSION", + "description": "The version of AlwaysAuth to install. Use \"latest\" to install the latest version.", + "env_variable": "VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": [], + "sort": 2 + } + ] +} \ No newline at end of file diff --git a/proxy/java/alwaysauth/egg-pterodactyl-always-auth.json b/proxy/java/alwaysauth/egg-pterodactyl-always-auth.json new file mode 100644 index 00000000..8135cbd7 --- /dev/null +++ b/proxy/java/alwaysauth/egg-pterodactyl-always-auth.json @@ -0,0 +1,52 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2025-12-24T22:04:11+00:00", + "name": "Always Auth", + "author": "contact@quacks.media", + "description": "A simple proxy that sits between your server and Mojang's auth services that ensures even when they're offline, you stay online!", + "features": null, + "docker_images": { + "Java 21": "ghcr.io\/parkervcp\/yolks:java_21" + }, + "file_denylist": [], + "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{JARFILE}}", + "config": { + "files": "{\n \"data\\\/config.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"server-port\": \"{{server.build.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", + "logs": "[]", + "stop": "stop" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\n\necho \"======================================\"\necho \" AlwaysAuth Installer\"\necho \"======================================\"\n\nmkdir -p \/mnt\/server\ncd \/mnt\/server\n\nJAR_NAME=\"AlwaysAuth.jar\"\n\ncommand -v curl >\/dev\/null 2>&1 || {\n echo \"ERROR: curl is required.\"\n exit 1\n}\n\n# --------------------------------------\n# Resolve version\n# --------------------------------------\n\nif [ \"$VERSION\" = \"latest\" ]; then\n echo \"Resolving latest standalone version...\"\n\n STANDALONE_VERSION=\"$(curl -fsSL \"https:\/\/raw.githubusercontent.com\/GamerDuck123\/AlwaysAuth\/refs\/heads\/master\/standalone-latest.txt\" | tr -d '[:space:]')\"\n\n if [ -z \"$STANDALONE_VERSION\" ]; then\n echo \"ERROR: standalone-latest.txt is empty.\"\n exit 1\n fi\nelse\n echo \"Using user-specified version: $VERSION\"\n STANDALONE_VERSION=\"$VERSION\"\nfi\n\necho \"Resolved version: $STANDALONE_VERSION\"\n\n# --------------------------------------\n# Download\n# --------------------------------------\n\nDOWNLOAD_URL=\"https:\/\/github.com\/GamerDuck123\/AlwaysAuth\/releases\/download\/v${STANDALONE_VERSION}\/AlwaysAuth-standalone-${STANDALONE_VERSION}.jar\"\n\necho \"Download URL: $DOWNLOAD_URL\"\necho \"Downloading AlwaysAuth...\"\n\ncurl -fL \"$DOWNLOAD_URL\" -o \"$JAR_NAME\"\n\nif [ ! -f \"$JAR_NAME\" ]; then\n echo \"ERROR: Download failed.\"\n exit 1\nfi\n\necho \"Install completed successfully!\"\necho \"======================================\"\nexit 0\n", + "container": "ghcr.io\/pelican-eggs\/installers:debian", + "entrypoint": "\/bin\/bash" + } + }, + "variables": [ + { + "name": "JARFILE", + "description": "The name of the jar to use.", + "env_variable": "JARFILE", + "default_value": "AlwaysAuth.jar", + "user_viewable": true, + "user_editable": true, + "rules": "", + "field_type": "text" + }, + { + "name": "VERSION", + "description": "The version of AlwaysAuth to install. Use \"latest\" to install the latest version.", + "env_variable": "VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "", + "field_type": "text" + } + ] +} \ No newline at end of file From f0a6e79fafd4abcc74cedb841b9e64e26761e677 Mon Sep 17 00:00:00 2001 From: gOOvER Date: Thu, 1 Jan 2026 11:57:05 +0100 Subject: [PATCH 16/20] Pocketmine - fixed installscript, to prevent "unsupported Version" with 8.3 and 8.4 (#105) * fixed installscrit, to prevent "unsupported Version" with 8.3 and 8.4 * add ptero egg too * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * update description Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- bedrock/pocketmine_mp/egg-pocketmine-m-p.json | 34 +++++++++++-------- .../egg-pterodactyl-pocketmine-m-p.json | 13 +++---- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/bedrock/pocketmine_mp/egg-pocketmine-m-p.json b/bedrock/pocketmine_mp/egg-pocketmine-m-p.json index 1432291a..de7de4e5 100644 --- a/bedrock/pocketmine_mp/egg-pocketmine-m-p.json +++ b/bedrock/pocketmine_mp/egg-pocketmine-m-p.json @@ -1,47 +1,51 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PLCN_v1", - "update_url": null + "version": "PLCN_v3", + "update_url": "https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/bedrock/pocketmine_mp/egg-pocketmine-m-p.json" }, - "exported_at": "2024-11-29T10:54:34+00:00", + "exported_at": "2025-12-06T14:24:50+00:00", "name": "PocketmineMP", "author": "info@swisscrafting.ch", "uuid": "4c3baab1-67ad-48c7-8acd-eb3deaa0a462", "description": "Pocketmine Egg\r\nby onekintaro from swisscrafting.ch\r\nwith the nice help from #eggs Channel on Pelican Discord :)", - "features": null, + "image": null, + "tags": [], + "features": [], "docker_images": { - "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" + "ghcr.io/parkervcp/yolks:debian": "ghcr.io/parkervcp/yolks:debian" }, "file_denylist": [], - "startup": ".\/bin\/php7\/bin\/php .\/PocketMine-MP.phar --no-wizard", + "startup_commands": { + "Default": "./bin/php7/bin/php ./PocketMine-MP.phar --no-wizard" + }, "config": { - "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-ip\": \"0.0.0.0\",\r\n \"enable-query\": \"true\",\r\n \"server-port\": \"{{server.allocations.default.port}}\",\r\n \"query.port\": \"{{server.allocations.default.port}}\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \")! \"\r\n}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"enable-query\": \"true\",\n \"server-port\": \"{{server.allocations.default.port}}\",\n \"query.port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! \"\n}", "logs": "{}", "stop": "stop" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\napt-get update\r\napt-get install -y git curl wget jq file tar unzip zip\r\n\r\nmkdir -p \/mnt\/server\/ # Not required. Only here for parkervcp's local test setup\r\n\r\ncd \/mnt\/server || exit 1\r\n\r\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && printf \"x86_64\" || printf \"arm64\")\r\n\r\n# Shouldn't be possible to be empty, but default to PM5 if it is and convert to uppercase\r\nVERSION=\"${VERSION:-PM5}\"\r\nVERSION=\"${VERSION^^}\"\r\n\r\n# Helper functions\r\n\r\ndownload_php_binary() {\r\n local php_binary_url\r\n if [[ \"$VERSION\" == \"PM5\" ]]; then\r\n php_binary_url=\"https:\/\/github.com\/pmmp\/PHP-Binaries\/releases\/download\/pm5-latest\/PHP-8.2-Linux-${ARCH}-PM5.tar.gz\"\r\n elif [[ \"$VERSION\" == \"PM4\" ]]; then\r\n php_binary_url=\"https:\/\/github.com\/pmmp\/PHP-Binaries\/releases\/download\/pm4-latest\/PHP-8.1-Linux-${ARCH}-PM4.tar.gz\"\r\n else\r\n printf \"Unsupported version: %s\\n\" \"${VERSION}\"\r\n exit 1\r\n fi\r\n\r\n printf \"Downloading PHP binary for %s from %s\\n\" \"$VERSION\" \"$php_binary_url\"\r\n curl --location --progress-bar \"$php_binary_url\" | tar -xzv\r\n}\r\n\r\nset_php_extension_dir() {\r\n printf \"Configuring php.ini\\n\"\r\n EXTENSION_DIR=$(find \"bin\" -name '*debug-zts*')\r\n grep -q '^extension_dir' bin\/php7\/bin\/php.ini && \\\r\n sed -i'bak' \"s{^extension_dir=.*{extension_dir=\\\"$EXTENSION_DIR\\\"{\" bin\/php7\/bin\/php.ini || \\\r\n echo \"extension_dir=\\\"$EXTENSION_DIR\\\"\" >>bin\/php7\/bin\/php.ini\r\n}\r\n\r\ndownload_pmmp() {\r\n DOWNLOAD_LINK=$(curl -sSL https:\/\/update.pmmp.io\/api?channel=\"$API_CHANNEL\" | jq -r '.download_url')\r\n printf \"Downloading %s from %s\\n\" \"$VERSION\" \"${DOWNLOAD_LINK}\"\r\n curl --location --progress-bar \"${DOWNLOAD_LINK}\" --output PocketMine-MP.phar\r\n}\r\n\r\n# We have to convert VERSION into an API channel\r\nif [[ \"${VERSION}\" == \"PM4\" ]]; then\r\n API_CHANNEL=\"4\"\r\n\r\nelif [[ \"${VERSION}\" == \"PM5\" ]]; then\r\n API_CHANNEL=\"stable\"\r\nelse\r\n printf \"Unsupported version: %s\\n\" \"${VERSION}\"\r\n exit 1\r\nfi\r\n\r\nREQUIRED_PHP_VERSION=$(curl -sSL https:\/\/update.pmmp.io\/api?channel=\"$API_CHANNEL\" | jq -r '.php_version')\r\n\r\nif [[ \"${ARCH}\" == \"x86_64\" ]]; then\r\n download_php_binary\r\n\r\n# There are no ARM64 PHP binaries yet, so we have to compile them\r\nelse\r\n apt-get install -y make autoconf automake m4 bzip2 bison g++ cmake pkg-config re2c libtool-bin\r\n \r\n mkdir -p \/mnt\/server\/build_cache\/archives\r\n mkdir -p \/mnt\/server\/build_cache\/compilation\r\n \r\n # Each PHP version has its own compile script, so we have to download the correct one\r\n echo \"Running curl to download compile.sh for PHP version $REQUIRED_PHP_VERSION\"\r\n curl --location --progress-bar --remote-name https:\/\/raw.githubusercontent.com\/pmmp\/PHP-Binaries\/latest\/compile.sh\r\n chmod +x compile.sh\r\n\r\n cat <>bin/php7/bin/php.ini\n}\n\ndownload_pmmp() {\n DOWNLOAD_LINK=$(curl -sSL https://update.pmmp.io/api?channel=\"$API_CHANNEL\" | jq -r '.download_url')\n printf \"Downloading %s from %s\\n\" \"$VERSION\" \"${DOWNLOAD_LINK}\"\n curl --location --progress-bar \"${DOWNLOAD_LINK}\" --output PocketMine-MP.phar\n}\n\n# We have to convert VERSION into an API channel\nif [[ \"${VERSION}\" == \"PM4\" ]]; then\n API_CHANNEL=\"4\"\nelif [[ \"$VERSION\" == \"PM5\" ]] || [[ \"$VERSION\" == \"PM5PHP83\" ]] || [[ \"$VERSION\" == \"PM5PHP84\" ]]; then\n API_CHANNEL=\"stable\"\nelse\n printf \"Unsupported version: %s\\n\" \"${VERSION}\"\n exit 1\nfi\n\nREQUIRED_PHP_VERSION=$(curl -sSL https://update.pmmp.io/api?channel=\"$API_CHANNEL\" | jq -r '.php_version')\n\nif [[ \"${ARCH}\" == \"x86_64\" ]]; then\n download_php_binary\n\n# There are no ARM64 PHP binaries yet, so we have to compile them\nelse\n apt-get install -y make autoconf automake m4 bzip2 bison g++ cmake pkg-config re2c libtool-bin\n \n mkdir -p /mnt/server/build_cache/archives\n mkdir -p /mnt/server/build_cache/compilation\n \n # Each PHP version has its own compile script, so we have to download the correct one\n echo \"Running curl to download compile.sh for PHP version $REQUIRED_PHP_VERSION\"\n curl --location --progress-bar --remote-name https://raw.githubusercontent.com/pmmp/PHP-Binaries/latest/compile.sh\n chmod +x compile.sh\n\n cat <>bin\/php7\/bin\/php.ini\r\n}\r\n\r\ndownload_pmmp() {\r\n DOWNLOAD_LINK=$(curl -sSL https:\/\/update.pmmp.io\/api?channel=\"$API_CHANNEL\" | jq -r '.download_url')\r\n printf \"Downloading %s from %s\\n\" \"$VERSION\" \"${DOWNLOAD_LINK}\"\r\n curl --location --progress-bar \"${DOWNLOAD_LINK}\" --output PocketMine-MP.phar\r\n}\r\n\r\n# We have to convert VERSION into an API channel\r\nif [[ \"${VERSION}\" == \"PM4\" ]]; then\r\n API_CHANNEL=\"4\"\r\n\r\nelif [[ \"${VERSION}\" == \"PM5\" ]]; then\r\n API_CHANNEL=\"stable\"\r\nelse\r\n printf \"Unsupported version: %s\\n\" \"${VERSION}\"\r\n exit 1\r\nfi\r\n\r\nREQUIRED_PHP_VERSION=$(curl -sSL https:\/\/update.pmmp.io\/api?channel=\"$API_CHANNEL\" | jq -r '.php_version')\r\n\r\nif [[ \"${ARCH}\" == \"x86_64\" ]]; then\r\n download_php_binary\r\n\r\n# There are no ARM64 PHP binaries yet, so we have to compile them\r\nelse\r\n apt-get install -y make autoconf automake m4 bzip2 bison g++ cmake pkg-config re2c libtool-bin\r\n \r\n mkdir -p \/mnt\/server\/build_cache\/archives\r\n mkdir -p \/mnt\/server\/build_cache\/compilation\r\n \r\n # Each PHP version has its own compile script, so we have to download the correct one\r\n echo \"Running curl to download compile.sh for PHP version $REQUIRED_PHP_VERSION\"\r\n curl --location --progress-bar --remote-name https:\/\/raw.githubusercontent.com\/pmmp\/PHP-Binaries\/latest\/compile.sh\r\n chmod +x compile.sh\r\n\r\n cat <>bin\/php7\/bin\/php.ini\n}\n\ndownload_pmmp() {\n DOWNLOAD_LINK=$(curl -sSL https:\/\/update.pmmp.io\/api?channel=\"$API_CHANNEL\" | jq -r '.download_url')\n printf \"Downloading %s from %s\\n\" \"$VERSION\" \"${DOWNLOAD_LINK}\"\n curl --location --progress-bar \"${DOWNLOAD_LINK}\" --output PocketMine-MP.phar\n}\n\n# We have to convert VERSION into an API channel\nif [[ \"${VERSION}\" == \"PM4\" ]]; then\n API_CHANNEL=\"4\"\nelif [[ \"${VERSION}\" == \"PM5\" ]] || [[ \"${VERSION}\" == \"PM5PHP83\" ]] || [[ \"${VERSION}\" == \"PM5PHP84\" ]]; then\n API_CHANNEL=\"stable\"\nelse\n printf \"Unsupported version: %s\\n\" \"${VERSION}\"\n exit 1\nfi\n\nREQUIRED_PHP_VERSION=$(curl -sSL https:\/\/update.pmmp.io\/api?channel=\"$API_CHANNEL\" | jq -r '.php_version')\n\nif [[ \"${ARCH}\" == \"x86_64\" ]]; then\n download_php_binary\n\n# There are no ARM64 PHP binaries yet, so we have to compile them\nelse\n apt-get install -y make autoconf automake m4 bzip2 bison g++ cmake pkg-config re2c libtool-bin\n \n mkdir -p \/mnt\/server\/build_cache\/archives\n mkdir -p \/mnt\/server\/build_cache\/compilation\n \n # Each PHP version has its own compile script, so we have to download the correct one\n echo \"Running curl to download compile.sh for PHP version $REQUIRED_PHP_VERSION\"\n curl --location --progress-bar --remote-name https:\/\/raw.githubusercontent.com\/pmmp\/PHP-Binaries\/latest\/compile.sh\n chmod +x compile.sh\n\n cat < Date: Sat, 3 Jan 2026 03:39:02 +0100 Subject: [PATCH 17/20] changed all eggs to new installer images (#100) * changed all images from openjdk:8-jdk-slim to eclipse-temurin:8 * replaced all eclipse-temurin:8 and eclipse-temurin:8-jdk with ghcr.io/pelican-eggs/installers:java_8; side-effekt: all install images now include the jdk * replaced all eclipse-temurin:17-jdk with ghcr.io/pelican-eggs/installers:java_17 * reverting changes for FTB/outdated to original; no need to upgrade outdated egg's * added missing \ to the container images * upgraded all installation images to their yolks * changed "ghcr.io\/parkervcp\/yolks:java_8" to "ghcr.io\/pelican-eggs\/installers:java_8" changed "ghcr.io\/parkervcp\/yolks:java_11" to "ghcr.io\/pelican-eggs\/installers:java_17" changed "ghcr.io\/parkervcp\/yolks:java_21" to "ghcr.io\/pelican-eggs\/installers:java_21" temporarily * fixed image name formating * reverting fabric back to java-11 * exported from panel: - ftb-server - fabric - glowstone - modrinth-generic - quilt * exported forge-enhanced from panel fixed issue in the installation script where installer.jar gets killed * migrated scripts.installation.container field from ghcr.io/parkervcp/installers to ghcr.io/pelican-eggs/installers --------- Co-authored-by: Quinten <67589015+QuintenQVD0@users.noreply.github.com> --- ...g-liteloader-bedrock-dedicated-server.json | 2 +- ...l-liteloader-bedrock-dedicated-server.json | 2 +- bedrock/PowerNukkitX/egg-power-nukkit-x.json | 2 +- .../egg-pterodactyl-power-nukkit-x.json | 2 +- ...g-pterodactyl-vanilla-bedrock-a-r-m64.json | 2 +- .../egg-pterodactyl-vanilla-bedrock.json | 2 +- .../bedrock/egg-vanilla-bedrock-a-r-m64.json | 2 +- bedrock/bedrock/egg-vanilla-bedrock.json | 2 +- bedrock/gomint/egg-go-mint.json | 2 +- bedrock/gomint/egg-pterodactyl-go-mint.json | 2 +- bedrock/nukkit/egg-nukkit.json | 2 +- bedrock/nukkit/egg-pterodactyl-nukkit.json | 2 +- bedrock/pocketmine_mp/egg-pocketmine-m-p.json | 2 +- .../egg-pterodactyl-pocketmine-m-p.json | 2 +- ...pterodactyl-purpur--geyser--floodgate.json | 2 +- .../egg-purpur--geyser--floodgate.json | 2 +- java/cuberite/egg-cuberite.json | 2 +- java/cuberite/egg-pterodactyl-cuberite.json | 2 +- java/curseforge/egg-curse-forge-generic.json | 2 +- .../egg-pterodactyl-curse-forge-generic.json | 2 +- java/fabric/egg-fabric.json | 93 +++++++------ java/fabric/egg-pterodactyl-fabric.json | 2 +- java/feather/egg-feather.json | 2 +- java/folia/egg-folia.json | 2 +- java/folia/egg-pterodactyl-folia.json | 2 +- java/forge/forge/egg-forge-enhanced.json | 96 +++++++------ .../forge/egg-pterodactyl-forge-enhanced.json | 2 +- java/ftb/egg-f-t-b-server.json | 70 +++++----- java/ftb/egg-pterodactyl-f-t-b-server.json | 2 +- .../egg-f-t-b-modpacks-ch-server.json | 2 +- java/ftb/outdated/egg-f-t-b-revelation.json | 2 +- java/ftb/outdated/egg-feed-the-beast.json | 2 +- ...-pterodactyl-f-t-b-modpacks-ch-server.json | 2 +- .../egg-pterodactyl-f-t-b-revelation.json | 2 +- .../egg-pterodactyl-feed-the-beast.json | 2 +- java/glowstone/egg-glowstone.json | 127 ++++++++++-------- java/glowstone/egg-pterodactyl-glowstone.json | 2 +- java/krypton/egg-krypton.json | 2 +- java/krypton/egg-pterodactyl-krypton.json | 2 +- java/limbo/egg-limbo.json | 2 +- java/limbo/egg-pterodactyl-limbo.json | 2 +- java/magma/egg-magma.json | 2 +- java/magma/egg-pterodactyl-magma.json | 2 +- java/modrinth/egg-modrinth-generic.json | 33 ++--- .../egg-pterodactyl-modrinth-generic.json | 2 +- java/nanolimbo/egg-nano-limbo.json | 2 +- .../nanolimbo/egg-pterodactyl-nano-limbo.json | 2 +- java/neoforge/egg-neo-forge.json | 2 +- java/neoforge/egg-pterodactyl-neo-forge.json | 2 +- java/paper/egg-pterodactyl-paper.json | 10 +- java/purpur/egg-pterodactyl-purpur.json | 2 +- java/purpur/egg-purpur.json | 2 +- java/quilt/egg-pterodactyl-quilt.json | 2 +- java/quilt/egg-quilt.json | 47 ++++--- java/spigot/egg-pterodactyl-spigot.json | 2 +- java/spigot/egg-spigot.json | 2 +- .../egg-pterodactyl-sponge-forge.json | 2 +- java/spongeforge/egg-sponge-forge.json | 2 +- .../egg-pterodactyl-sponge-vanilla.json | 2 +- java/spongevanilla/egg-sponge-vanilla.json | 2 +- .../Tekkit-2/egg-pterodactyl-tekkit2.json | 2 +- java/technic/Tekkit-2/egg-tekkit2.json | 2 +- .../Tekkit/egg-pterodactyl-tekkit.json | 2 +- java/technic/Tekkit/egg-tekkit.json | 2 +- .../egg-attack-of-the-b--team.json | 2 +- ...egg-pterodactyl-attack-of-the-b--team.json | 2 +- java/technic/blightfall/egg-blightfall.json | 2 +- .../egg-pterodactyl-blightfall.json | 2 +- java/technic/hexxit/egg-hexxit.json | 2 +- .../hexxit/egg-pterodactyl-hexxit.json | 2 +- .../egg-pterodactyl-tekkit-classic.json | 2 +- .../tekkit-classic/egg-tekkit-classic.json | 2 +- .../egg-pterodactyl-tekkit-legends.json | 2 +- .../tekkit-legends/egg-tekkit-legends.json | 2 +- .../egg-pterodactyl-tekkit-smp.json | 2 +- java/technic/tekkit-smp/egg-tekkit-smp.json | 2 +- .../egg-pterodactyl-the1-12-2-pack.json | 2 +- .../the-1-12-2-pack/egg-the1-12-2-pack.json | 2 +- .../egg-pterodactyl-the1-7-10-pack.json | 2 +- .../the-1-7-10-pack/egg-the1-7-10-pack.json | 2 +- .../egg-pterodactyl-vanilla-cord.json | 2 +- java/vanillacord/egg-vanilla-cord.json | 2 +- .../egg-pterodactyl-waterdog-p-e.json | 2 +- .../bedrock/waterdog_pe/egg-waterdog-p-e.json | 2 +- .../waterdog/egg-pterodactyl-waterdog.json | 2 +- .../cross_platform/waterdog/egg-waterdog.json | 2 +- .../egg-pterodactyl-travertine.json | 2 +- proxy/java/travertine/egg-travertine.json | 2 +- .../velocity/egg-pterodactyl-velocity.json | 2 +- proxy/java/velocity/egg-velocity.json | 2 +- .../viaaas/egg-pterodactyl-v-i-aaa-s.json | 2 +- proxy/java/viaaas/egg-v-i-aaa-s.json | 2 +- .../viaproxy/egg-pterodactyl-via-proxy.json | 2 +- proxy/java/viaproxy/egg-via-proxy.json | 2 +- .../waterfall/egg-pterodactyl-waterfall.json | 2 +- proxy/java/waterfall/egg-waterfall.json | 2 +- 96 files changed, 359 insertions(+), 295 deletions(-) diff --git a/bedrock/LiteLoader-bedrock/egg-liteloader-bedrock-dedicated-server.json b/bedrock/LiteLoader-bedrock/egg-liteloader-bedrock-dedicated-server.json index bceb9fd4..60f2907c 100644 --- a/bedrock/LiteLoader-bedrock/egg-liteloader-bedrock-dedicated-server.json +++ b/bedrock/LiteLoader-bedrock/egg-liteloader-bedrock-dedicated-server.json @@ -24,7 +24,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# Liteloader First-time Install Script\r\n\r\napk update\r\napk add gzip jq curl wine\r\ncd \/mnt\/server\r\n\r\nfor file in *; do\r\n if [ \"$file\" != \"allowlist.json\" ] && [ \"$file\" != \"permissions.json\" ] && [ \"$file\" != \"server.properties\" ] && [ \"$file\" != \"plugins\" ] && [ \"$file\" != \"world\" ]; then\r\n if [ -d \"$file\" ]; then\r\n rm -rf \"$file\" # Remove directories recursively\r\n else\r\n rm \"$file\" # Remove files\r\n fi\r\n fi\r\ndone\r\n\r\n# Download Minecraft BDS\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BDS_VERSION}\" ] || [ \"${BDS_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/www.minecraft.net\/en-us\/download\/server\/bedrock\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/minecraft.azureedge.net\/bin-win\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BDS_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/minecraft.azureedge.net\/bin-win\/bedrock-server-$BDS_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\nrm versions.html.gz\r\n\r\n\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/LiteLDev\/LiteLoaderBDS\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/LiteLDev\/LiteLoaderBDS\/releases\")\r\n\r\nif [ -z \"${LL_VERSION}\" ] || [ \"${LL_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest LiteLoaderBDS from GitHub\"\r\n DOWNLOAD_GIT_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | head -1)\r\nelse\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${LL_VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n echo -e \"\\n Downloading ${LL_VERSION} LiteLoaderBDS from GitHub\"\r\n DOWNLOAD_GIT_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${LL_VERSION}\" '.[] | select(.tag_name==$LL_VERSION) | .assets[].browser_download_url' | head -1)\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_GIT_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | head -1)\r\n fi\r\nfi\r\n\r\ncurl -sSL -o LiteLoader.zip ${DOWNLOAD_GIT_URL}\r\nunzip -o LiteLoader.zip\r\nmv -f LiteLoaderBDS\/* \/mnt\/server\r\nrm LiteLoader.zip\r\ntimeout 30s wine PeEditor.exe\r\nrm -rf '\/root\/.wine' \/mnt\/server\/LiteLoaderBDS\/\r\n\r\n# Downloading Launcher and finishing touches\r\nwget https:\/\/io.ivampiresp.com\/d\/Software\/MCServer\/BDS\/LiteLoader\/lae-ll-launcher\r\nchmod +x lae-ll-launcher\r\necho \"Finished Downloading Liteloader...\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/bedrock/LiteLoader-bedrock/egg-pterodactyl-liteloader-bedrock-dedicated-server.json b/bedrock/LiteLoader-bedrock/egg-pterodactyl-liteloader-bedrock-dedicated-server.json index 72270cf1..332074da 100644 --- a/bedrock/LiteLoader-bedrock/egg-pterodactyl-liteloader-bedrock-dedicated-server.json +++ b/bedrock/LiteLoader-bedrock/egg-pterodactyl-liteloader-bedrock-dedicated-server.json @@ -22,7 +22,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/bash\r\n# Liteloader First-time Install Script\r\n\r\napk update\r\napk add gzip jq curl wine\r\ncd /mnt/server\r\n\r\nfor file in *; do\r\n if [ \"$file\" != \"allowlist.json\" ] \u0026\u0026 [ \"$file\" != \"permissions.json\" ] \u0026\u0026 [ \"$file\" != \"server.properties\" ] \u0026\u0026 [ \"$file\" != \"plugins\" ] \u0026\u0026 [ \"$file\" != \"world\" ]; then\r\n if [ -d \"$file\" ]; then\r\n rm -rf \"$file\" # Remove directories recursively\r\n else\r\n rm \"$file\" # Remove files\r\n fi\r\n fi\r\ndone\r\n\r\n# Download Minecraft BDS\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BDS_VERSION}\" ] || [ \"${BDS_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.$RANDVERSION.212 Safari/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https://www.minecraft.net/en-us/download/server/bedrock\r\n DOWNLOAD_URL=$(zgrep -o 'https://minecraft.azureedge.net/bin-win/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BDS_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https://minecraft.azureedge.net/bin-win/bedrock-server-$BDS_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"/\" -f5) # Retrieve archive name\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.$RANDVERSION.212 Safari/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\nrm versions.html.gz\r\n\r\n\r\nLATEST_JSON=$(curl --silent \"https://api.github.com/repos/LiteLDev/LiteLoaderBDS/releases/latest\")\r\nRELEASES=$(curl --silent \"https://api.github.com/repos/LiteLDev/LiteLoaderBDS/releases\")\r\n\r\nif [ -z \"${LL_VERSION}\" ] || [ \"${LL_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest LiteLoaderBDS from GitHub\"\r\n DOWNLOAD_GIT_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | head -1)\r\nelse\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${LL_VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n echo -e \"\\n Downloading ${LL_VERSION} LiteLoaderBDS from GitHub\"\r\n DOWNLOAD_GIT_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${LL_VERSION}\" '.[] | select(.tag_name==$LL_VERSION) | .assets[].browser_download_url' | head -1)\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_GIT_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | head -1)\r\n fi\r\nfi\r\n\r\ncurl -sSL -o LiteLoader.zip ${DOWNLOAD_GIT_URL}\r\nunzip -o LiteLoader.zip\r\nmv -f LiteLoaderBDS/* /mnt/server\r\nrm LiteLoader.zip\r\ntimeout 30s wine PeEditor.exe\r\nrm -rf '/root/.wine' /mnt/server/LiteLoaderBDS/\r\n\r\n# Downloading Launcher and finishing touches\r\nwget https://io.ivampiresp.com/d/Software/MCServer/BDS/LiteLoader/lae-ll-launcher\r\nchmod +x lae-ll-launcher\r\necho \"Finished Downloading Liteloader...\"" } diff --git a/bedrock/PowerNukkitX/egg-power-nukkit-x.json b/bedrock/PowerNukkitX/egg-power-nukkit-x.json index 1653f546..7d769cfb 100644 --- a/bedrock/PowerNukkitX/egg-power-nukkit-x.json +++ b/bedrock/PowerNukkitX/egg-power-nukkit-x.json @@ -24,7 +24,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\napt-get update\r\napt-get install -y git curl wget jq file tar unzip zip openssl\r\nmkdir -p \/mnt\/server\/ # Not required. Only here for parkervcp's local test setup\r\ncd \/mnt\/server || exit 1\r\nUPGRADE=\"no\"\r\nif [ -d \".\/java\" ]; then\r\nUPGRADE=\"yes\"\r\nfi\r\nwget https:\/\/github.com\/PowerNukkitX\/PNX-CLI\/releases\/download\/0.1.6\/PNX-CLI-Linux-x86.zip -O pnx.zip\r\nwget https:\/\/raw.githubusercontent.com\/PowerNukkitX\/PowerNukkitX\/master\/src\/main\/resources\/default-nukkit.yml -O nukkit.yml\r\nunzip pnx.zip\r\nrm -fr pnx.zip 2>&1 >\/dev\/null\r\nmv .\/target\/linux-x86\/pnx .\/ 2>&1 >\/dev\/null\r\nrm -fr target 2>&1 >\/dev\/null\r\nrm -fr java 2>&1 >\/dev\/null\r\nchmod +x pnx\r\n.\/pnx jvm install=GraalVM\r\nif [ \"$UPGRADE\" == \"no\" ]; then\r\nif [ \"$VERSION\" == \"latest\" ]; then\r\n.\/pnx server install --latest\r\nelse\r\n.\/pnx server install --dev\r\nfi\r\nelse\r\nrm -fr libs 2>&1 >\/dev\/null\r\nif [ \"$VERSION\" == \"latest\" ]; then\r\n.\/pnx server update --latest\r\nelse\r\n.\/pnx server update --dev\r\nfi\r\nfi\r\nrm -fr tmp-GraalVM.tar.gz 2>&1 >\/dev\/null\r\ncat <> server.properties\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json index ede8e06e..ec56e222 100644 --- a/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json +++ b/bedrock/bedrock/egg-pterodactyl-vanilla-bedrock.json @@ -25,7 +25,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/net-secondary.web.minecraft-services.net\/api\/v1.0\/download\/links\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json b/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json index 88e86cb0..da21f5e3 100644 --- a/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json +++ b/bedrock/bedrock/egg-vanilla-bedrock-a-r-m64.json @@ -26,7 +26,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/net-secondary.web.minecraft-services.net\/api\/v1.0\/download\/links\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho 'emit-server-telemetry=true' >> server.properties\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/bedrock/bedrock/egg-vanilla-bedrock.json b/bedrock/bedrock/egg-vanilla-bedrock.json index a8d2926e..4de519aa 100644 --- a/bedrock/bedrock/egg-vanilla-bedrock.json +++ b/bedrock/bedrock/egg-vanilla-bedrock.json @@ -27,7 +27,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/net-secondary.web.minecraft-services.net\/api\/v1.0\/download\/links\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/www.minecraft.net\/bedrockdedicatedserver\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp allowlist.json allowlist.json.bak\r\n\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf allowlist.json.bak allowlist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/bedrock/gomint/egg-go-mint.json b/bedrock/gomint/egg-go-mint.json index 2bbc5348..b6dda82f 100644 --- a/bedrock/gomint/egg-go-mint.json +++ b/bedrock/gomint/egg-go-mint.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#! \/bin\/bash\r\n\r\nGITHUB_PACKAGE=gomint\/gomint\r\n\r\napt update\r\napt install -y curl jq file unzip\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir -p \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\/\r\n\r\nif [ -z \"${GITHUB_USER}\" ] && [ -z \"${GITHUB_OAUTH_TOKEN}\" ] ; then\r\n echo -e \"using anon api call\"\r\nelse\r\n echo -e \"user and oauth token set\"\r\n alias curl='curl -u ${GITHUB_USER}:${GITHUB_OAUTH_TOKEN} '\r\nfi\r\n\r\n# retrieve latest tag to be used as version match, because gomint doesn't use normal releases\r\nLATEST_VERSION=$(curl -sL https:\/\/api.github.com\/repos\/gomint\/gomint\/tags | jq -r '.[-1].name')\r\n\r\nDOWNLOAD_URL=https:\/\/github.com\/gomint\/gomint\/releases\/download\/${LATEST_VERSION}\/${LATEST_VERSION}.zip\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then \r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"download link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n VALIDATED_URL=${DOWNLOAD_URL}\r\n else \r\n echo -e \"download link is invalid, something went wrong. Closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\ncurl -sSL -o ${VALIDATED_URL##*\/} ${VALIDATED_URL}\r\n\r\nFILETYPE=$(file -F ',' ${VALIDATED_URL##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${VALIDATED_URL##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip ${VALIDATED_URL##*\/} -d modules\/\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${VALIDATED_URL##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n # exit 2 \r\nfi\r\n\r\n# Move files into correct folders and remove unnecessary stuff\r\nrm ${VALIDATED_URL##*\/}\r\nmv modules\/modules\/* modules\r\nrm -rf modules\/modules\r\nrm modules\/start.*\r\n\r\n# Fetch server config\r\nif [ ! -f server.yml ]; then\r\n curl -sSL -o server.yml https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/bedrock\/gomint\/server.yml\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/bedrock/gomint/egg-pterodactyl-go-mint.json b/bedrock/gomint/egg-pterodactyl-go-mint.json index 0de70ea4..e67f31ad 100644 --- a/bedrock/gomint/egg-pterodactyl-go-mint.json +++ b/bedrock/gomint/egg-pterodactyl-go-mint.json @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#! /bin/bash\r\n\r\nGITHUB_PACKAGE=gomint/gomint\r\n\r\napt update\r\napt install -y curl jq file unzip\r\n\r\nif [ ! -d /mnt/server/ ]; then\r\n mkdir -p /mnt/server/\r\nfi\r\n\r\ncd /mnt/server/\r\n\r\nif [ -z \"${GITHUB_USER}\" ] \u0026\u0026 [ -z \"${GITHUB_OAUTH_TOKEN}\" ] ; then\r\n echo -e \"using anon api call\"\r\nelse\r\n echo -e \"user and oauth token set\"\r\n alias curl='curl -u ${GITHUB_USER}:${GITHUB_OAUTH_TOKEN} '\r\nfi\r\n\r\n# retrieve latest tag to be used as version match, because gomint doesn't use normal releases\r\nLATEST_VERSION=$(curl -sL https://api.github.com/repos/gomint/gomint/tags | jq -r '.[-1].name')\r\n\r\nDOWNLOAD_URL=https://github.com/gomint/gomint/releases/download/${LATEST_VERSION}/${LATEST_VERSION}.zip\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then \r\n if curl --output /dev/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"download link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n VALIDATED_URL=${DOWNLOAD_URL}\r\n else \r\n echo -e \"download link is invalid, something went wrong. Closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\ncurl -sSL -o ${VALIDATED_URL##*/} ${VALIDATED_URL}\r\n\r\nFILETYPE=$(file -F ',' ${VALIDATED_URL##*/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${VALIDATED_URL##*/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip ${VALIDATED_URL##*/} -d modules/\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${VALIDATED_URL##*/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n # exit 2 \r\nfi\r\n\r\n# Move files into correct folders and remove unnecessary stuff\r\nrm ${VALIDATED_URL##*/}\r\nmv modules/modules/* modules\r\nrm -rf modules/modules\r\nrm modules/start.*\r\n\r\n# Fetch server config\r\nif [ ! -f server.yml ]; then\r\n curl -sSL -o server.yml https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/bedrock/gomint/server.yml\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/bedrock/nukkit/egg-nukkit.json b/bedrock/nukkit/egg-nukkit.json index 79e78221..5db1e846 100644 --- a/bedrock/nukkit/egg-nukkit.json +++ b/bedrock/nukkit/egg-nukkit.json @@ -27,7 +27,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Nukkit Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napk add --no-cache curl openssl\r\n\r\ncd \/mnt\/server\r\n\r\n## Only download if a path is provided, otherwise continue.\r\nif [ ! -z \"${DL_PATH}\" ]; then\r\n MODIFIED_DOWNLOAD=`eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g')`\r\n wget ${MODIFIED_DOWNLOAD} -O ${SERVER_JARFILE}\r\nelif [ -z \"${NUKKIT_VERSION}\" ] || [ \"${NUKKIT_VERSION}\" == \"latest\" ]; then\r\n wget https:\/\/ci.opencollab.dev\/job\/NukkitX\/job\/Nukkit\/job\/master\/lastSuccessfulBuild\/artifact\/target\/nukkit-1.0-SNAPSHOT.jar -O ${SERVER_JARFILE}\r\nelse\r\n wget https:\/\/ci.opencollab.dev\/job\/NukkitX\/job\/Nukkit\/job\/master\/${NUKKIT_VERSION}\/artifact\/target\/nukkit-1.0-SNAPSHOT.jar -O ${SERVER_JARFILE}\r\nfi\r\n\r\nif [ ! -f nukkit.yml ]; then\r\n wget https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/bedrock\/nukkit\/nukkit.yml\r\nfi\r\n\r\nif [ ! -f server.properties ]; then\r\n wget https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/bedrock\/nukkit\/server.properties\r\nfi\r\n\r\necho -s \"Install completed!\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/bedrock/nukkit/egg-pterodactyl-nukkit.json b/bedrock/nukkit/egg-pterodactyl-nukkit.json index d6b23530..496af38c 100644 --- a/bedrock/nukkit/egg-pterodactyl-nukkit.json +++ b/bedrock/nukkit/egg-pterodactyl-nukkit.json @@ -25,7 +25,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Nukkit Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napk add --no-cache curl openssl\r\n\r\ncd /mnt/server\r\n\r\n## Only download if a path is provided, otherwise continue.\r\nif [ ! -z \"${DL_PATH}\" ]; then\r\n MODIFIED_DOWNLOAD=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\r\n wget ${MODIFIED_DOWNLOAD} -O ${SERVER_JARFILE}\r\nelif [ -z \"${NUKKIT_VERSION}\" ] || [ \"${NUKKIT_VERSION}\" == \"latest\" ]; then\r\n wget https://ci.opencollab.dev/job/NukkitX/job/Nukkit/job/master/lastSuccessfulBuild/artifact/target/nukkit-1.0-SNAPSHOT.jar -O ${SERVER_JARFILE}\r\nelse\r\n wget https://ci.opencollab.dev/job/NukkitX/job/Nukkit/job/master/${NUKKIT_VERSION}/artifact/target/nukkit-1.0-SNAPSHOT.jar -O ${SERVER_JARFILE}\r\nfi\r\n\r\nif [ ! -f nukkit.yml ]; then\r\n wget https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/bedrock/nukkit/nukkit.yml\r\nfi\r\n\r\nif [ ! -f server.properties ]; then\r\n wget https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/bedrock/nukkit/server.properties\r\nfi\r\n\r\necho -s \"Install completed!\"" } diff --git a/bedrock/pocketmine_mp/egg-pocketmine-m-p.json b/bedrock/pocketmine_mp/egg-pocketmine-m-p.json index de7de4e5..facd6abb 100644 --- a/bedrock/pocketmine_mp/egg-pocketmine-m-p.json +++ b/bedrock/pocketmine_mp/egg-pocketmine-m-p.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!/bin/bash\n\napt-get update\napt-get install -y git curl wget jq file tar unzip zip\n\nmkdir -p /mnt/server/ # Not required. Only here for parkervcp's local test setup\n\ncd /mnt/server || exit 1\n\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && printf \"x86_64\" || printf \"arm64\")\n\n# Shouldn't be possible to be empty, but default to PM5 if it is and convert to uppercase\nVERSION=\"${VERSION:-PM5}\"\nVERSION=\"${VERSION^^}\"\n\n# Helper functions\n\ndownload_php_binary() {\n local php_binary_url\n if [[ \"$VERSION\" == \"PM5\" ]]; then\n php_binary_url=\"https://github.com/pmmp/PHP-Binaries/releases/download/pm5-latest/PHP-8.2-Linux-${ARCH}-PM5.tar.gz\"\n elif [[ \"$VERSION\" == \"PM5PHP83\" ]]; then\n php_binary_url=\"https://github.com/pmmp/PHP-Binaries/releases/download/pm5-php-8.3-latest/PHP-8.3-Linux-${ARCH}-PM5.tar.gz\"\n elif [[ \"$VERSION\" == \"PM5PHP84\" ]]; then\n php_binary_url=\"https://github.com/pmmp/PHP-Binaries/releases/download/pm5-php-8.4-latest/PHP-8.4-Linux-${ARCH}-PM5.tar.gz\"\n elif [[ \"$VERSION\" == \"PM4\" ]]; then\n php_binary_url=\"https://github.com/pmmp/PHP-Binaries/releases/download/pm4-latest/PHP-8.1-Linux-${ARCH}-PM4.tar.gz\"\n else\n printf \"Unsupported version: %s\\n\" \"${VERSION}\"\n exit 1\n fi\n\n printf \"Downloading PHP binary for %s from %s\\n\" \"$VERSION\" \"$php_binary_url\"\n curl --location --progress-bar \"$php_binary_url\" | tar -xzv\n}\n\nset_php_extension_dir() {\n printf \"Configuring php.ini\\n\"\n EXTENSION_DIR=$(find \"bin\" -name '*debug-zts*')\n grep -q '^extension_dir' bin/php7/bin/php.ini && \\\n sed -i'bak' \"s{^extension_dir=.*{extension_dir=\\\"$EXTENSION_DIR\\\"{\" bin/php7/bin/php.ini || \\\n echo \"extension_dir=\\\"$EXTENSION_DIR\\\"\" >>bin/php7/bin/php.ini\n}\n\ndownload_pmmp() {\n DOWNLOAD_LINK=$(curl -sSL https://update.pmmp.io/api?channel=\"$API_CHANNEL\" | jq -r '.download_url')\n printf \"Downloading %s from %s\\n\" \"$VERSION\" \"${DOWNLOAD_LINK}\"\n curl --location --progress-bar \"${DOWNLOAD_LINK}\" --output PocketMine-MP.phar\n}\n\n# We have to convert VERSION into an API channel\nif [[ \"${VERSION}\" == \"PM4\" ]]; then\n API_CHANNEL=\"4\"\nelif [[ \"$VERSION\" == \"PM5\" ]] || [[ \"$VERSION\" == \"PM5PHP83\" ]] || [[ \"$VERSION\" == \"PM5PHP84\" ]]; then\n API_CHANNEL=\"stable\"\nelse\n printf \"Unsupported version: %s\\n\" \"${VERSION}\"\n exit 1\nfi\n\nREQUIRED_PHP_VERSION=$(curl -sSL https://update.pmmp.io/api?channel=\"$API_CHANNEL\" | jq -r '.php_version')\n\nif [[ \"${ARCH}\" == \"x86_64\" ]]; then\n download_php_binary\n\n# There are no ARM64 PHP binaries yet, so we have to compile them\nelse\n apt-get install -y make autoconf automake m4 bzip2 bison g++ cmake pkg-config re2c libtool-bin\n \n mkdir -p /mnt/server/build_cache/archives\n mkdir -p /mnt/server/build_cache/compilation\n \n # Each PHP version has its own compile script, so we have to download the correct one\n echo \"Running curl to download compile.sh for PHP version $REQUIRED_PHP_VERSION\"\n curl --location --progress-bar --remote-name https://raw.githubusercontent.com/pmmp/PHP-Binaries/latest/compile.sh\n chmod +x compile.sh\n\n cat <>bin\/php7\/bin\/php.ini\n}\n\ndownload_pmmp() {\n DOWNLOAD_LINK=$(curl -sSL https:\/\/update.pmmp.io\/api?channel=\"$API_CHANNEL\" | jq -r '.download_url')\n printf \"Downloading %s from %s\\n\" \"$VERSION\" \"${DOWNLOAD_LINK}\"\n curl --location --progress-bar \"${DOWNLOAD_LINK}\" --output PocketMine-MP.phar\n}\n\n# We have to convert VERSION into an API channel\nif [[ \"${VERSION}\" == \"PM4\" ]]; then\n API_CHANNEL=\"4\"\nelif [[ \"${VERSION}\" == \"PM5\" ]] || [[ \"${VERSION}\" == \"PM5PHP83\" ]] || [[ \"${VERSION}\" == \"PM5PHP84\" ]]; then\n API_CHANNEL=\"stable\"\nelse\n printf \"Unsupported version: %s\\n\" \"${VERSION}\"\n exit 1\nfi\n\nREQUIRED_PHP_VERSION=$(curl -sSL https:\/\/update.pmmp.io\/api?channel=\"$API_CHANNEL\" | jq -r '.php_version')\n\nif [[ \"${ARCH}\" == \"x86_64\" ]]; then\n download_php_binary\n\n# There are no ARM64 PHP binaries yet, so we have to compile them\nelse\n apt-get install -y make autoconf automake m4 bzip2 bison g++ cmake pkg-config re2c libtool-bin\n \n mkdir -p \/mnt\/server\/build_cache\/archives\n mkdir -p \/mnt\/server\/build_cache\/compilation\n \n # Each PHP version has its own compile script, so we have to download the correct one\n echo \"Running curl to download compile.sh for PHP version $REQUIRED_PHP_VERSION\"\n curl --location --progress-bar --remote-name https:\/\/raw.githubusercontent.com\/pmmp\/PHP-Binaries\/latest\/compile.sh\n chmod +x compile.sh\n\n cat < \/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 > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nCURSEFORGE_API_URL=\"https:\/\/api.curseforge.com\/v1\/mods\/\"\r\nCURSEFORGE_API_HEADERS=(\"--header=Accept: application\/json\" \"--header=x-api-key: ${API_KEY}\")\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving CurseForge project information...\"\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ 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 local IS_SERVER_PACK=false\r\n\r\n if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo file ID specified, using latest file\"\r\n VERSION_ID=$(echo \"$PROJECT_DATA\" | jq -r '.data.mainFileId \/\/ empty')\r\n\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .isServerPack')\"\r\n local VERSION_SERVER_ID=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .serverPackFileId')\"\r\n\r\n if [[ \"${VERSION_SERVER_PACK}\" == \"false\" && -n \"${VERSION_SERVER_ID}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_ID}'\"\r\n VERSION_ID=$VERSION_SERVER_ID\r\n IS_SERVER_PACK=true\r\n elif [[ \"${VERSION_SERVER_PACK}\" == \"true\" ]]; then\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n echo -e \"\\tChecking if provided file id '${VERSION_ID}' exists\"\r\n\r\n local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.serverPackFileId \/\/ empty')\"\r\n if [[ -n \"${VERSION_SERVER_PACK}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_PACK}'\"\r\n VERSION_ID=$VERSION_SERVER_PACK\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n IS_SERVER_PACK=true\r\n fi\r\n fi\r\n\r\n # Check if version id is unset or empty string\r\n if [[ -z \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No file id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n echo -e \"\\tWARNING: File id '${VERSION_ID}' is not a server pack, attempting to use client files\"\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 \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\/download-url\" -O -)\r\n\r\n if [[ -z \"${JSON_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve file data for file id '${VERSION_ID}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file ${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 \"Download failed!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nfunction get_loader {\r\n echo -e \"Retrieving loader information...\"\r\n\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ empty')\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 local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n local IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n local CLIENT_VERSION_ID;\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"true\" ]]; then\r\n CLIENT_VERSION_ID=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.parentProjectFileId \/\/ empty')\"\r\n else\r\n CLIENT_VERSION_ID=$VERSION_ID\r\n fi\r\n\r\n if [[ -z \"${CLIENT_VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tRetrieving file information for '${CLIENT_VERSION_ID}'\"\r\n local JSON_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${CLIENT_VERSION_ID}\/download-url\" -O -)\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file id ${CLIENT_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 client.zip\r\n\r\n echo -e \"\\tUnpacking client manifest\"\r\n unzip -jo client.zip manifest.json -d \"${SERVER_DIR}\"\r\n mv \"${SERVER_DIR}\/manifest.json\" \"${SERVER_DIR}\/client.manifest.json\" # rename to avoid conflicts with main manifest\r\n rm -rf client.zip\r\n\r\n echo -e \"\\tParsing client manifest\"\r\n local MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n\r\n LOADER_ID=$(jq -r '.minecraft.modLoaders[]? | select(.primary == true) | .id' \"${MANIFEST}\")\r\n LOADER_NAME=$(echo \"${LOADER_ID}\" | cut -d'-' -f1)\r\n LOADER_VERSION=$(echo \"${LOADER_ID}\" | cut -d'-' -f2)\r\n\r\n if [[ -z \"${LOADER_NAME}\" || -z \"${LOADER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No loader found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n MINECRAFT_VERSION=$(jq -r '.minecraft.version \/\/ empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MINECRAFT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No minecraft version found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tFound loader ${LOADER_NAME} ${LOADER_VERSION} for Minecraft ${MINECRAFT_VERSION}\"\r\n}\r\n\r\nfunction unzip-strip() (\r\n set -u\r\n\r\n local archive=$1\r\n local destdir=${2:-}\r\n shift; shift || :\r\n echo -e \"\\tUnpacking ${archive} to ${destdir}\"\r\n\r\n echo -e \"\\tCreating temporary directory\"\r\n local tmpdir=\/mnt\/server\/tmp\r\n if ! mkdir -p \"${tmpdir}\"; then\r\n echo -e \"\\tERROR: mkdir failed to create temporary directory\"\r\n return 1\r\n fi\r\n\r\n trap 'rm -rf -- \"$tmpdir\"' EXIT\r\n\r\n echo -e \"\\tUnpacking archive\"\r\n\r\n if ! unzip -q \"$archive\" -d \"$tmpdir\"; then\r\n echo -e \"\\tERROR: unzip failed to unpack archive\"\r\n return 1\r\n fi\r\n\r\n echo -e \"\\tSetting glob settings\"\r\n\r\n shopt -s dotglob\r\n\r\n echo -e \"\\tCleaning up directory structure\"\r\n\r\n local files=(\"$tmpdir\"\/*) name i=1\r\n\r\n if (( ${#files[@]} == 1 )) && [[ -d \"${files[0]}\" ]]; then\r\n name=$(basename \"${files[0]}\")\r\n files=(\"$tmpdir\"\/*\/*)\r\n else\r\n name=$(basename \"$archive\"); name=${archive%.*}\r\n files=(\"$tmpdir\"\/*)\r\n fi\r\n\r\n if [[ -z \"$destdir\" ]]; then\r\n destdir=.\/\"$name\"\r\n fi\r\n\r\n while [[ -f \"$destdir\" ]]; do\r\n destdir=${destdir}-$((i++));\r\n done\r\n\r\n echo -e \"\\tCopying files to ${destdir}\"\r\n\r\n mkdir -p \"$destdir\"\r\n cp -ar \"$@\" -t \"$destdir\" -- \"${files[@]}\"\r\n rm -rf \"$tmpdir\"\r\n)\r\n\r\nfunction unpack_zip {\r\n echo -e \"Unpacking server files...\"\r\n unzip-strip server.zip \"${SERVER_DIR}\"\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}\/manifest.json\"\r\n jq -c '.files[]? | select(.required == true) | {project: .projectID, file: .fileID}' \"${MANIFEST}\" | while read -r mod; do\r\n local MOD_PROJECT_ID=$(echo \"${mod}\" | jq -r '.project \/\/ empty')\r\n local MOD_FILE_ID=$(echo \"${mod}\" | jq -r '.file \/\/ empty')\r\n\r\n if [[ -z \"${MOD_PROJECT_ID}\" || -z \"${MOD_FILE_ID}\" ]]; then\r\n echo -e \"\\tERROR: Failed to parse project id or file id for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n local FILE_URL=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${MOD_PROJECT_ID}\/files\/${MOD_FILE_ID}\/download-url\" -O - | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\r\n continue\r\n fi\r\n\r\n echo -e \"\\tDownloading ${FILE_URL}\"\r\n\r\n if ! wget -q -nc \"${FILE_URL}\" -P \"${SERVER_DIR}\/mods\"; then\r\n echo -e \"\\tERROR: Failed to download mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\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 cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/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 MC_VERSION=$MINECRAFT_VERSION\r\n local FORGE_VERSION=$LOADER_VERSION\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 # Remove old Forge files so we can safely update\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 MC_VERSION=$MINECRAFT_VERSION\r\n local FABRIC_VERSION=$LOADER_VERSION\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\"\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\"\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 MC_VERSION=$MINECRAFT_VERSION\r\n local QUILT_VERSION=$LOADER_VERSION\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_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found\"\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\"\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\nNEOFORGE_DOWNLOAD_URL=\"https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/\"\r\n\r\nfunction json_download_neoforge {\r\n echo \"Downloading neoforge\"\r\n \r\n local MC_VERSION=$MINECRAFT_VERSION\r\n local NEOFORGE_VERSION=$LOADER_VERSION\r\n \r\n if [[ ! -z ${NEOFORGE_VERSION} ]]; then\r\n # The 1.20.1 release lives in a different repository and is called \"forge\" instead of \"neoforge\"\r\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\r\n DOWNLOAD_LINK=$NEOFORGE_DOWNLOAD_URL\/forge\/${NEOFORGE_VERSION}\/forge-${NEOFORGE_VERSION}\r\n ARTIFACT_NAME=\"forge\"\r\n else\r\n DOWNLOAD_LINK=$NEOFORGE_DOWNLOAD_URL\/neoforge\/${NEOFORGE_VERSION}\/neoforge-${NEOFORGE_VERSION}\r\n ARTIFACT_NAME=\"neoforge\"\r\n fi\r\n else\r\n echo \"No Neoforge version specified in manifest\"\r\n exit 1\r\n fi\r\n \r\n echo \"Downloading NeoForge version ${NEOFORGE_VERSION}\"\r\n echo \"Download link is ${DOWNLOAD_LINK}\"\r\n\r\n # Check if the download link we generated is valid\r\n if [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\r\n if wget -q --spider ${DOWNLOAD_LINK}-installer.jar; then\r\n echo -e \"Installer jar download link is valid.\"\r\n else\r\n echo -e \"Link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\n else\r\n echo -e \"No download link provided. Exiting now\"\r\n exit 3\r\n fi\r\n \r\n # If so, go ahead and download the installer\r\n wget -O installer.jar ${DOWNLOAD_LINK}-installer.jar\r\n \r\n if [[ ! -f .\/installer.jar ]]; then\r\n echo \"!!! Error downloading NeoForge version ${NEOFORGE_VERSION} !!!\"\r\n exit 4\r\n fi\r\n \r\n # Delete args to support downgrading\/upgrading\r\n rm -rf libraries\/net\/neoforged\/${ARTIFACT_NAME}\r\n rm unix_args.txt\r\n\r\n # Installing server\r\n echo -e \"Installing NeoForge server.\\n\"\r\n java -jar installer.jar --installServer || {\r\n echo -e \"\\nInstall failed using NeoForge version ${NEOFORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.\"\r\n echo -n \"Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Wings\"\r\n echo \"config or specify exact allocated memory in the server Build Configuration instead of 0!\"\r\n echo \"Otherwise, the NeoForge installer will not have enough memory.\";\r\n exit 5;\r\n }\r\n\r\n # Symlink the startup arguments to the server directory\r\n ln -sf libraries\/net\/neoforged\/${ARTIFACT_NAME}\/*\/unix_args.txt unix_args.txt\r\n\r\n # And finally clean up\r\n echo -e \"Deleting installer.jar file.\\n\"\r\n rm -rf 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\nfi\r\n\r\nget_loader\r\nunpack_zip\r\n\r\nif [[ -f \"${SERVER_DIR}\/manifest.json\" ]]; then\r\n echo \"Found manifest.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/client.manifest.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n echo -e \"\\nLoader name: ${LOADER_NAME}\"\r\n\r\n if [[ $LOADER_NAME == \"forge\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"fabric\" ]]; then\r\n json_download_fabric\r\n fi\r\n \r\n if [[ $LOADER_NAME == \"neoforge\" ]]; then\r\n json_download_neoforge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"quilt\" ]]; 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", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "bash" } }, diff --git a/java/curseforge/egg-pterodactyl-curse-forge-generic.json b/java/curseforge/egg-pterodactyl-curse-forge-generic.json index a767f638..35b190cc 100644 --- a/java/curseforge/egg-pterodactyl-curse-forge-generic.json +++ b/java/curseforge/egg-pterodactyl-curse-forge-generic.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# shellcheck disable=SC2155\r\n#\r\n# CurseForge 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: \"${API_KEY:=}\"\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 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 > \/dev\/null 2>&1 || { echo \"apt install failed!\"; exit 1; }\r\n}\r\n\r\nCURSEFORGE_API_URL=\"https:\/\/api.curseforge.com\/v1\/mods\/\"\r\nCURSEFORGE_API_HEADERS=(\"--header=Accept: application\/json\" \"--header=x-api-key: ${API_KEY}\")\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving CurseForge project information...\"\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ 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 local IS_SERVER_PACK=false\r\n\r\n if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo file ID specified, using latest file\"\r\n VERSION_ID=$(echo \"$PROJECT_DATA\" | jq -r '.data.mainFileId \/\/ empty')\r\n\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .isServerPack')\"\r\n local VERSION_SERVER_ID=\"$(echo -e \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[] | select(.id|tostring==$VERSION_ID) | .serverPackFileId')\"\r\n\r\n if [[ \"${VERSION_SERVER_PACK}\" == \"false\" && -n \"${VERSION_SERVER_ID}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_ID}'\"\r\n VERSION_ID=$VERSION_SERVER_ID\r\n IS_SERVER_PACK=true\r\n elif [[ \"${VERSION_SERVER_PACK}\" == \"true\" ]]; then\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n echo -e \"\\tChecking if provided file id '${VERSION_ID}' exists\"\r\n\r\n local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n local VERSION_SERVER_PACK=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.serverPackFileId \/\/ empty')\"\r\n if [[ -n \"${VERSION_SERVER_PACK}\" ]]; then\r\n echo -e \"\\tFound server pack file id '${VERSION_SERVER_PACK}'\"\r\n VERSION_ID=$VERSION_SERVER_PACK\r\n IS_SERVER_PACK=true\r\n fi\r\n else\r\n IS_SERVER_PACK=true\r\n fi\r\n fi\r\n\r\n # Check if version id is unset or empty string\r\n if [[ -z \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No file id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\r\n echo -e \"\\tWARNING: File id '${VERSION_ID}' is not a server pack, attempting to use client files\"\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 \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\/download-url\" -O -)\r\n\r\n if [[ -z \"${JSON_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve file data for file id '${VERSION_ID}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file ${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 \"Download failed!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nfunction get_loader {\r\n echo -e \"Retrieving loader information...\"\r\n\r\n local PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.data.name \/\/ empty')\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 local FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${FILE_DATA}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n local IS_SERVER_PACK=$(echo -e \"${FILE_DATA}\" | jq -r '.data.isServerPack \/\/ \"false\"')\r\n local CLIENT_VERSION_ID;\r\n\r\n if [[ \"${IS_SERVER_PACK}\" == \"true\" ]]; then\r\n CLIENT_VERSION_ID=\"$(echo -e \"${FILE_DATA}\" | jq -r '.data.parentProjectFileId \/\/ empty')\"\r\n else\r\n CLIENT_VERSION_ID=$VERSION_ID\r\n fi\r\n\r\n if [[ -z \"${CLIENT_VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: File id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tRetrieving file information for '${CLIENT_VERSION_ID}'\"\r\n local JSON_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\/files\/${CLIENT_VERSION_ID}\/download-url\" -O -)\r\n\r\n echo -e \"\\tParsing CurseForge pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo -e \"$JSON_DATA\" | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for file id ${CLIENT_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 client.zip\r\n\r\n echo -e \"\\tUnpacking client manifest\"\r\n unzip -jo client.zip manifest.json -d \"${SERVER_DIR}\"\r\n mv \"${SERVER_DIR}\/manifest.json\" \"${SERVER_DIR}\/client.manifest.json\" # rename to avoid conflicts with main manifest\r\n rm -rf client.zip\r\n\r\n echo -e \"\\tParsing client manifest\"\r\n local MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n\r\n LOADER_ID=$(jq -r '.minecraft.modLoaders[]? | select(.primary == true) | .id' \"${MANIFEST}\")\r\n LOADER_NAME=$(echo \"${LOADER_ID}\" | cut -d'-' -f1)\r\n LOADER_VERSION=$(echo \"${LOADER_ID}\" | cut -d'-' -f2)\r\n\r\n if [[ -z \"${LOADER_NAME}\" || -z \"${LOADER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No loader found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n MINECRAFT_VERSION=$(jq -r '.minecraft.version \/\/ empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MINECRAFT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No minecraft version found in client manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tFound loader ${LOADER_NAME} ${LOADER_VERSION} for Minecraft ${MINECRAFT_VERSION}\"\r\n}\r\n\r\nfunction unzip-strip() (\r\n set -u\r\n\r\n local archive=$1\r\n local destdir=${2:-}\r\n shift; shift || :\r\n echo -e \"\\tUnpacking ${archive} to ${destdir}\"\r\n\r\n echo -e \"\\tCreating temporary directory\"\r\n local tmpdir=\/mnt\/server\/tmp\r\n if ! mkdir -p \"${tmpdir}\"; then\r\n echo -e \"\\tERROR: mkdir failed to create temporary directory\"\r\n return 1\r\n fi\r\n\r\n trap 'rm -rf -- \"$tmpdir\"' EXIT\r\n\r\n echo -e \"\\tUnpacking archive\"\r\n\r\n if ! unzip -q \"$archive\" -d \"$tmpdir\"; then\r\n echo -e \"\\tERROR: unzip failed to unpack archive\"\r\n return 1\r\n fi\r\n\r\n echo -e \"\\tSetting glob settings\"\r\n\r\n shopt -s dotglob\r\n\r\n echo -e \"\\tCleaning up directory structure\"\r\n\r\n local files=(\"$tmpdir\"\/*) name i=1\r\n\r\n if (( ${#files[@]} == 1 )) && [[ -d \"${files[0]}\" ]]; then\r\n name=$(basename \"${files[0]}\")\r\n files=(\"$tmpdir\"\/*\/*)\r\n else\r\n name=$(basename \"$archive\"); name=${archive%.*}\r\n files=(\"$tmpdir\"\/*)\r\n fi\r\n\r\n if [[ -z \"$destdir\" ]]; then\r\n destdir=.\/\"$name\"\r\n fi\r\n\r\n while [[ -f \"$destdir\" ]]; do\r\n destdir=${destdir}-$((i++));\r\n done\r\n\r\n echo -e \"\\tCopying files to ${destdir}\"\r\n\r\n mkdir -p \"$destdir\"\r\n cp -ar \"$@\" -t \"$destdir\" -- \"${files[@]}\"\r\n rm -rf \"$tmpdir\"\r\n)\r\n\r\nfunction unpack_zip {\r\n echo -e \"Unpacking server files...\"\r\n unzip-strip server.zip \"${SERVER_DIR}\"\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}\/manifest.json\"\r\n jq -c '.files[]? | select(.required == true) | {project: .projectID, file: .fileID}' \"${MANIFEST}\" | while read -r mod; do\r\n local MOD_PROJECT_ID=$(echo \"${mod}\" | jq -r '.project \/\/ empty')\r\n local MOD_FILE_ID=$(echo \"${mod}\" | jq -r '.file \/\/ empty')\r\n\r\n if [[ -z \"${MOD_PROJECT_ID}\" || -z \"${MOD_FILE_ID}\" ]]; then\r\n echo -e \"\\tERROR: Failed to parse project id or file id for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n local FILE_URL=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${MOD_PROJECT_ID}\/files\/${MOD_FILE_ID}\/download-url\" -O - | jq -r '.data \/\/ empty')\r\n\r\n if [[ -z \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\r\n continue\r\n fi\r\n\r\n echo -e \"\\tDownloading ${FILE_URL}\"\r\n\r\n if ! wget -q -nc \"${FILE_URL}\" -P \"${SERVER_DIR}\/mods\"; then\r\n echo -e \"\\tERROR: Failed to download mod ${MOD_PROJECT_ID} ${MOD_FILE_ID}\"\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 cp -r \"${SERVER_DIR}\/overrides\/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}\/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 MC_VERSION=$MINECRAFT_VERSION\r\n local FORGE_VERSION=$LOADER_VERSION\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 # Remove old Forge files so we can safely update\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 MC_VERSION=$MINECRAFT_VERSION\r\n local FABRIC_VERSION=$LOADER_VERSION\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\"\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\"\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 MC_VERSION=$MINECRAFT_VERSION\r\n local QUILT_VERSION=$LOADER_VERSION\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_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found\"\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\"\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\nNEOFORGE_DOWNLOAD_URL=\"https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/\"\r\n\r\nfunction json_download_neoforge {\r\n echo \"Downloading neoforge\"\r\n \r\n local MC_VERSION=$MINECRAFT_VERSION\r\n local NEOFORGE_VERSION=$LOADER_VERSION\r\n \r\n if [[ ! -z ${NEOFORGE_VERSION} ]]; then\r\n # The 1.20.1 release lives in a different repository and is called \"forge\" instead of \"neoforge\"\r\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\r\n DOWNLOAD_LINK=$NEOFORGE_DOWNLOAD_URL\/forge\/${NEOFORGE_VERSION}\/forge-${NEOFORGE_VERSION}\r\n ARTIFACT_NAME=\"forge\"\r\n else\r\n DOWNLOAD_LINK=$NEOFORGE_DOWNLOAD_URL\/neoforge\/${NEOFORGE_VERSION}\/neoforge-${NEOFORGE_VERSION}\r\n ARTIFACT_NAME=\"neoforge\"\r\n fi\r\n else\r\n echo \"No Neoforge version specified in manifest\"\r\n exit 1\r\n fi\r\n \r\n echo \"Downloading NeoForge version ${NEOFORGE_VERSION}\"\r\n echo \"Download link is ${DOWNLOAD_LINK}\"\r\n\r\n # Check if the download link we generated is valid\r\n if [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\r\n if wget -q --spider ${DOWNLOAD_LINK}-installer.jar; then\r\n echo -e \"Installer jar download link is valid.\"\r\n else\r\n echo -e \"Link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\n else\r\n echo -e \"No download link provided. Exiting now\"\r\n exit 3\r\n fi\r\n \r\n # If so, go ahead and download the installer\r\n wget -O installer.jar ${DOWNLOAD_LINK}-installer.jar\r\n \r\n if [[ ! -f .\/installer.jar ]]; then\r\n echo \"!!! Error downloading NeoForge version ${NEOFORGE_VERSION} !!!\"\r\n exit 4\r\n fi\r\n \r\n # Delete args to support downgrading\/upgrading\r\n rm -rf libraries\/net\/neoforged\/${ARTIFACT_NAME}\r\n rm unix_args.txt\r\n\r\n # Installing server\r\n echo -e \"Installing NeoForge server.\\n\"\r\n java -jar installer.jar --installServer || {\r\n echo -e \"\\nInstall failed using NeoForge version ${NEOFORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.\"\r\n echo -n \"Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Wings\"\r\n echo \"config or specify exact allocated memory in the server Build Configuration instead of 0!\"\r\n echo \"Otherwise, the NeoForge installer will not have enough memory.\";\r\n exit 5;\r\n }\r\n\r\n # Symlink the startup arguments to the server directory\r\n ln -sf libraries\/net\/neoforged\/${ARTIFACT_NAME}\/*\/unix_args.txt unix_args.txt\r\n\r\n # And finally clean up\r\n echo -e \"Deleting installer.jar file.\\n\"\r\n rm -rf 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\nfi\r\n\r\nget_loader\r\nunpack_zip\r\n\r\nif [[ -f \"${SERVER_DIR}\/manifest.json\" ]]; then\r\n echo \"Found manifest.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}\/client.manifest.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}\/client.manifest.json\"\r\n echo -e \"\\nLoader name: ${LOADER_NAME}\"\r\n\r\n if [[ $LOADER_NAME == \"forge\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"fabric\" ]]; then\r\n json_download_fabric\r\n fi\r\n \r\n if [[ $LOADER_NAME == \"neoforge\" ]]; then\r\n json_download_neoforge\r\n fi\r\n\r\n if [[ $LOADER_NAME == \"quilt\" ]]; 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", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "bash" } }, diff --git a/java/fabric/egg-fabric.json b/java/fabric/egg-fabric.json index fac39115..4ca4a8fa 100644 --- a/java/fabric/egg-fabric.json +++ b/java/fabric/egg-fabric.json @@ -1,63 +1,59 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PTDL_v2", + "version": "PLCN_v3", "update_url": null }, - "exported_at": "2024-08-02T12:14:52+00:00", + "exported_at": "2025-12-19T20:55:03+00:00", "name": "Fabric", "author": "accounts@bofanodes.io", "uuid": "78b02ebb-fec8-49c5-943c-ca4aa117b693", "description": "Fabric is a modular modding toolchain targeting Minecraft 1.14 and above, including snapshots.", + "image": null, + "tags": [], "features": [ "eula", "java_version", "pid_limit" ], "docker_images": { - "Java 8": "ghcr.io\/parkervcp\/yolks:java_8", - "Java 11": "ghcr.io\/parkervcp\/yolks:java_11", - "Java 16": "ghcr.io\/parkervcp\/yolks:java_16", - "Java 17": "ghcr.io\/parkervcp\/yolks:java_17", - "Java 21": "ghcr.io\/parkervcp\/yolks:java_21" + "Java 8": "ghcr.io/parkervcp/yolks:java_8", + "Java 11": "ghcr.io/parkervcp/yolks:java_11", + "Java 16": "ghcr.io/parkervcp/yolks:java_16", + "Java 17": "ghcr.io/parkervcp/yolks:java_17", + "Java 21": "ghcr.io/parkervcp/yolks:java_21" }, "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}", + "startup_commands": { + "Default": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}" + }, "config": { - "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-ip\": \"0.0.0.0\",\r\n \"enable-query\": \"true\",\r\n \"server-port\": \"{{server.build.default.port}}\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \")! For help, type \",\r\n \"userInteraction\": [\r\n \"Go to eula.txt for more info.\"\r\n ]\r\n}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"enable-query\": \"true\",\n \"server-port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \",\n \"userInteraction\": [\n \"Go to eula.txt for more info.\"\n ]\n}", "logs": "{}", "stop": "stop" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Fabric MC Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y curl jq unzip dos2unix wget\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n# Enable snapshots\r\nif [ -z \"$MC_VERSION\" ] || [ \"$MC_VERSION\" == \"latest\" ]; then\r\n MC_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/game | jq -r '.[] | select(.stable== true )|.version' | head -n1)\r\nelif [ \"$MC_VERSION\" == \"snapshot\" ]; then\r\n MC_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/game | jq -r '.[] | select(.stable== false )|.version' | head -n1)\r\nfi\r\n\r\nif [ -z \"$FABRIC_VERSION\" ] || [ \"$FABRIC_VERSION\" == \"latest\" ]; then\r\n FABRIC_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/installer | jq -r '.[0].version')\r\nfi\r\n\r\nif [ -z \"$LOADER_VERSION\" ] || [ \"$LOADER_VERSION\" == \"latest\" ]; then\r\n LOADER_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/loader | jq -r '.[] | select(.stable== true )|.version' | head -n1)\r\nelif [ \"$LOADER_VERSION\" == \"snapshot\" ]; then\r\n LOADER_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/loader | jq -r '.[] | select(.stable== false )|.version' | head -n1)\r\nfi\r\n\r\nwget -O fabric-installer.jar https:\/\/maven.fabricmc.net\/net\/fabricmc\/fabric-installer\/$FABRIC_VERSION\/fabric-installer-$FABRIC_VERSION.jar\r\njava -jar fabric-installer.jar server -mcversion $MC_VERSION -loader $LOADER_VERSION -downloadMinecraft\r\nmv server.jar minecraft-server.jar\r\nmv fabric-server-launch.jar server.jar\r\necho \"serverJar=minecraft-server.jar\" > fabric-server-launcher.properties\r\necho -e \"Install Complete\"", - "container": "openjdk:11-jdk-slim", + "script": "#!/bin/bash\r\n# Fabric MC Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y curl jq unzip dos2unix wget\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\n# Enable snapshots\r\nif [ -z \"$MC_VERSION\" ] || [ \"$MC_VERSION\" == \"latest\" ]; then\r\n MC_VERSION=$(curl -sSL https://meta.fabricmc.net/v2/versions/game | jq -r '.[] | select(.stable== true )|.version' | head -n1)\r\nelif [ \"$MC_VERSION\" == \"snapshot\" ]; then\r\n MC_VERSION=$(curl -sSL https://meta.fabricmc.net/v2/versions/game | jq -r '.[] | select(.stable== false )|.version' | head -n1)\r\nfi\r\n\r\nif [ -z \"$FABRIC_VERSION\" ] || [ \"$FABRIC_VERSION\" == \"latest\" ]; then\r\n FABRIC_VERSION=$(curl -sSL https://meta.fabricmc.net/v2/versions/installer | jq -r '.[0].version')\r\nfi\r\n\r\nif [ -z \"$LOADER_VERSION\" ] || [ \"$LOADER_VERSION\" == \"latest\" ]; then\r\n LOADER_VERSION=$(curl -sSL https://meta.fabricmc.net/v2/versions/loader | jq -r '.[] | select(.stable== true )|.version' | head -n1)\r\nelif [ \"$LOADER_VERSION\" == \"snapshot\" ]; then\r\n LOADER_VERSION=$(curl -sSL https://meta.fabricmc.net/v2/versions/loader | jq -r '.[] | select(.stable== false )|.version' | head -n1)\r\nfi\r\n\r\nwget -O fabric-installer.jar https://maven.fabricmc.net/net/fabricmc/fabric-installer/$FABRIC_VERSION/fabric-installer-$FABRIC_VERSION.jar\r\njava -jar fabric-installer.jar server -mcversion $MC_VERSION -loader $LOADER_VERSION -downloadMinecraft\r\nmv server.jar minecraft-server.jar\r\nmv fabric-server-launch.jar server.jar\r\necho \"serverJar=minecraft-server.jar\" > fabric-server-launcher.properties\r\necho -e \"Install Complete\"", + "container": "ghcr.io/pelican-eggs/installers:java_11", "entrypoint": "bash" } }, "variables": [ { - "name": "Server Jar File", - "description": "The name of the server jarfile to run the server with.", - "env_variable": "SERVER_JARFILE", - "default_value": "server.jar", - "user_viewable": true, - "user_editable": true, - "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", - "sort": null, - "field_type": "text" - }, - { - "name": "Minecraft Version", - "description": "The version of Minecraft to install. Use \"latest\" to install the latest version, or use \"snapshot\" to install the latest snapshot.", - "env_variable": "MC_VERSION", + "name": "Fabric Loader Version", + "description": "The version of Fabric Loader to install.", + "env_variable": "LOADER_VERSION", "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|between:3,15", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "string", + "between:3,15" + ], + "sort": null }, { "name": "Fabric Version", @@ -66,20 +62,39 @@ "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|between:3,15", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "string", + "between:3,15" + ], + "sort": null }, { - "name": "Fabric Loader Version", - "description": "The version of Fabric Loader to install.", - "env_variable": "LOADER_VERSION", + "name": "Minecraft Version", + "description": "The version of Minecraft to install. Use \"latest\" to install the latest version, or use \"snapshot\" to install the latest snapshot.", + "env_variable": "MC_VERSION", "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|between:3,15", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "string", + "between:3,15" + ], + "sort": null + }, + { + "name": "Server Jar File", + "description": "The name of the server jarfile to run the server with.", + "env_variable": "SERVER_JARFILE", + "default_value": "server.jar", + "user_viewable": true, + "user_editable": true, + "rules": [ + "required", + "regex:/^([\\w\\d._-]+)(\\.jar)$/" + ], + "sort": null } ] -} +} \ No newline at end of file diff --git a/java/fabric/egg-pterodactyl-fabric.json b/java/fabric/egg-pterodactyl-fabric.json index 8cc68aef..a2f7612d 100644 --- a/java/fabric/egg-pterodactyl-fabric.json +++ b/java/fabric/egg-pterodactyl-fabric.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# Fabric MC Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y curl jq unzip dos2unix wget\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n# Enable snapshots\r\nif [ -z \"$MC_VERSION\" ] || [ \"$MC_VERSION\" == \"latest\" ]; then\r\n MC_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/game | jq -r '.[] | select(.stable== true )|.version' | head -n1)\r\nelif [ \"$MC_VERSION\" == \"snapshot\" ]; then\r\n MC_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/game | jq -r '.[] | select(.stable== false )|.version' | head -n1)\r\nfi\r\n\r\nif [ -z \"$FABRIC_VERSION\" ] || [ \"$FABRIC_VERSION\" == \"latest\" ]; then\r\n FABRIC_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/installer | jq -r '.[0].version')\r\nfi\r\n\r\nif [ -z \"$LOADER_VERSION\" ] || [ \"$LOADER_VERSION\" == \"latest\" ]; then\r\n LOADER_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/loader | jq -r '.[] | select(.stable== true )|.version' | head -n1)\r\nelif [ \"$LOADER_VERSION\" == \"snapshot\" ]; then\r\n LOADER_VERSION=$(curl -sSL https:\/\/meta.fabricmc.net\/v2\/versions\/loader | jq -r '.[] | select(.stable== false )|.version' | head -n1)\r\nfi\r\n\r\nwget -O fabric-installer.jar https:\/\/maven.fabricmc.net\/net\/fabricmc\/fabric-installer\/$FABRIC_VERSION\/fabric-installer-$FABRIC_VERSION.jar\r\njava -jar fabric-installer.jar server -mcversion $MC_VERSION -loader $LOADER_VERSION -downloadMinecraft\r\nmv server.jar minecraft-server.jar\r\nmv fabric-server-launch.jar server.jar\r\necho \"serverJar=minecraft-server.jar\" > fabric-server-launcher.properties\r\necho -e \"Install Complete\"", - "container": "openjdk:11-jdk-slim", + "container": "ghcr.io\/pelican-eggs\/installers:java_11", "entrypoint": "bash" } }, diff --git a/java/feather/egg-feather.json b/java/feather/egg-feather.json index 0c254519..2bd037ae 100644 --- a/java/feather/egg-feather.json +++ b/java/feather/egg-feather.json @@ -24,7 +24,7 @@ "scripts": { "installation": { "script": "#! \/bin\/bash\r\n\r\nGITHUB_PACKAGE=feather-rs\/feather\r\nMATCH=linux\r\n\r\napt update\r\napt install -y curl jq file unzip\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir -p \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\/\r\n\r\nif [ -z \"${GITHUB_USER}\" ] && [ -z \"${GITHUB_OAUTH_TOKEN}\" ] ; then\r\n echo -e \"using anon api call\"\r\nelse\r\n echo -e \"user and oauth token set\"\r\n alias curl='curl -u ${GITHUB_USER}:${GITHUB_OAUTH_TOKEN} '\r\nfi\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\")\r\n\r\nif [ \"$(echo ${LATEST_JSON} | jq -r '.message')\" != \"Not Found\" ] && [[ -z \"${VERSION}\" || \"${VERSION}\" == \"latest\" ]]; then\r\n echo -e \"grabbing latest version\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\nelif [ \"$(echo ${LATEST_JSON} | jq -r '.message')\" == \"Not Found\" ]; then\r\n ## emergency fallback if latest isn't found\r\n ## grabs the latest release even it it's a pre-release\r\n echo -e \"grabbing latest pre-release\"\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r '.[0].assets[].browser_download_url' | grep -i ${MATCH})\r\nelse\r\n echo -e \"grabbing version $VERSION\"\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then \r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n VALIDATED_URL=${DOWNLOAD_URL}\r\n else \r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\ncurl -sSL -o ${VALIDATED_URL##*\/} ${VALIDATED_URL}\r\n\r\nFILETYPE=$(file -F ',' ${VALIDATED_URL##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${VALIDATED_URL##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip ${VALIDATED_URL##*\/}\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${VALIDATED_URL##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n # exit 2 \r\nfi\r\n\r\nrm ${VALIDATED_URL##*\/}\r\n\r\nchmod +x feather-server", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/java/folia/egg-folia.json b/java/folia/egg-folia.json index 2b2e489a..8a897e96 100644 --- a/java/folia/egg-folia.json +++ b/java/folia/egg-folia.json @@ -30,7 +30,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Folia Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=folia\r\n\r\nif [ -n \"${DL_PATH}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_PATH}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep -m1 true`\r\n\tLATEST_VERSION=`curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Specified version not found. Defaulting to the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\r\n\tBUILD_EXISTS=`curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\r\n\tLATEST_BUILD=`curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION}\/builds\/${BUILD_NUMBER}\/downloads\/${JAR_NAME}\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/minecraft\/java\/server.properties\r\nfi", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/folia/egg-pterodactyl-folia.json b/java/folia/egg-pterodactyl-folia.json index 85e3a808..a3c44832 100644 --- a/java/folia/egg-pterodactyl-folia.json +++ b/java/folia/egg-pterodactyl-folia.json @@ -28,7 +28,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Folia Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nPROJECT=folia\r\n\r\nif [ -n \"${DL_PATH}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_PATH}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep -m1 true`\r\n\tLATEST_VERSION=`curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Specified version not found. Defaulting to the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\r\n\tBUILD_EXISTS=`curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\r\n\tLATEST_BUILD=`curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER}/downloads/${JAR_NAME}\r\nfi\r\n\r\ncd /mnt/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https://raw.githubusercontent.com/parkervcp/eggs/master/minecraft/java/server.properties\r\nfi" } diff --git a/java/forge/forge/egg-forge-enhanced.json b/java/forge/forge/egg-forge-enhanced.json index d2fb6cae..57412515 100644 --- a/java/forge/forge/egg-forge-enhanced.json +++ b/java/forge/forge/egg-forge-enhanced.json @@ -1,64 +1,47 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PTDL_v2", + "version": "PLCN_v3", "update_url": null }, - "exported_at": "2024-06-01T19:39:43+00:00", + "exported_at": "2025-12-19T20:55:21+00:00", "name": "Forge Enhanced", "author": "parker@parkervcp.com", "uuid": "d6018085-eecc-42bf-bf8c-51ea45a69ace", "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.", + "image": null, + "tags": [], "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", - "Java 18": "ghcr.io\/pterodactyl\/yolks:java_18" + "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", + "Java 18": "ghcr.io/pterodactyl/yolks:java_18", + "Java 21": "ghcr.io/pterodactyl/yolks:java_21" }, "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true $( [[ ! -f unix_args.txt ]] && printf %s \"-jar {{SERVER_JARFILE}}\" || printf %s \"@unix_args.txt\" )", + "startup_commands": { + "Default": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true $( [[ ! -f unix_args.txt ]] && printf %s \"-jar {{SERVER_JARFILE}}\" || 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}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"server-port\": \"{{server.allocations.default.port}}\",\n \"query.port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", "logs": "{}", "stop": "stop" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y curl jq\r\n\r\nif [[ ! -d \/mnt\/server ]]; then\r\n mkdir \/mnt\/server\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Remove spaces from the version number to avoid issues with curl\r\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\r\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\r\nif [ -z ${SERVER_JARFILE}]; then \r\n SERVER_JARFILE=server.jar\r\nfi\r\n\r\nif [[ ! -z ${FORGE_VERSION} ]]; then\r\n DOWNLOAD_LINK=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/${FORGE_VERSION}\/forge-${FORGE_VERSION}\r\n FORGE_JAR=forge-${FORGE_VERSION}*.jar\r\nelse\r\n JSON_DATA=$(curl -sSL https:\/\/files.minecraftforge.net\/maven\/net\/minecraftforge\/forge\/promotions_slim.json)\r\n\r\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\r\n echo -e \"getting latest version of forge.\"\r\n 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)\r\n BUILD_TYPE=latest\r\n fi\r\n\r\n if [[ \"${BUILD_TYPE}\" != \"recommended\" ]] && [[ \"${BUILD_TYPE}\" != \"latest\" ]]; then\r\n BUILD_TYPE=recommended\r\n fi\r\n\r\n echo -e \"minecraft version: ${MC_VERSION}\"\r\n echo -e \"build type: ${BUILD_TYPE}\"\r\n\r\n ## some variables for getting versions and things\r\n FILE_SITE=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/\r\n 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))')\r\n\r\n ## locating the forge version\r\n if [[ \"${VERSION_KEY}\" == \"\" ]] && [[ \"${BUILD_TYPE}\" == \"recommended\" ]]; then\r\n echo -e \"dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested.\"\r\n 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\"))')\r\n fi\r\n\r\n ## Error if the mc version set wasn't valid.\r\n if [ \"${VERSION_KEY}\" == \"\" ] || [ \"${VERSION_KEY}\" == \"null\" ]; then\r\n echo -e \"The install failed because there is no valid version of forge for the version of minecraft selected.\"\r\n exit 1\r\n fi\r\n\r\n FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY \"$VERSION_KEY\" '.promos | .[$VERSION_KEY]')\r\n\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]] || [[ \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar\r\n fi\r\n else\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}\/forge-${MC_VERSION}-${FORGE_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}*.jar\r\n fi\r\nfi\r\n\r\n#Adding .jar when not eding by SERVER_JARFILE\r\nif [[ ! $SERVER_JARFILE = *\\.jar ]]; then\r\n SERVER_JARFILE=\"$SERVER_JARFILE.jar\"\r\nfi\r\n\r\n#Downloading jars\r\necho -e \"Downloading forge version ${FORGE_VERSION}\"\r\necho -e \"Download link is ${DOWNLOAD_LINK}\"\r\n\r\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\r\n if curl -sSL --output \/dev\/null --head --fail ${DOWNLOAD_LINK}-installer.jar; then\r\n echo -e \"installer jar download link is valid.\"\r\n else\r\n echo -e \"link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\nelse\r\n echo -e \"no download link provided. Exiting now\"\r\n exit 3\r\nfi\r\n\r\ncurl -sSL -o installer.jar ${DOWNLOAD_LINK}-installer.jar\r\n\r\n#Checking if downloaded jars exist\r\nif [[ ! -f .\/installer.jar ]]; then\r\n echo \"!!! Error downloading forge version ${FORGE_VERSION} !!!\"\r\n exit\r\nfi\r\n\r\nfunction unix_args {\r\n echo -e \"Detected Forge 1.17 or newer version. Setting up forge unix args.\"\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n}\r\n\r\n# Delete args to support downgrading\/upgrading\r\nrm -rf libraries\/net\/minecraftforge\/forge\r\nrm unix_args.txt\r\n\r\n#Installing server\r\necho -e \"Installing forge server.\\n\"\r\njava -jar installer.jar --installServer || { echo -e \"install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}\"; exit 4; }\r\n\r\nif [ -f ${FORGE_JAR} ]; then\r\n # For versions below 1.17 that ship with jar\r\n mv $FORGE_JAR $SERVER_JARFILE\r\nelse\r\n # Check if we need a symlink for 1.17+ Forge JPMS args\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 unix_args\r\n\r\n # Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives\r\n elif [[ $MC_VERSION == \"latest\" && $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n unix_args\r\n fi\r\nfi\r\n\r\necho -e \"Deleting installer.jar file.\\n\"\r\nrm -rf installer.jar\r\n\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "openjdk:8-jdk-slim", + "script": "#!/bin/bash\n# Forge Installation Script\n#\n# Server Files: /mnt/server\napt update\napt install -y curl jq\n\nif [[ ! -d /mnt/server ]]; then\n mkdir /mnt/server\nfi\n\ncd /mnt/server\n\n# Remove spaces from the version number to avoid issues with curl\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\nif [ -z ${SERVER_JARFILE}]; then \n SERVER_JARFILE=server.jar\nfi\n\nif [[ ! -z ${FORGE_VERSION} ]]; then\n DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}\n FORGE_JAR=forge-${FORGE_VERSION}*.jar\nelse\n JSON_DATA=$(curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json)\n\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\n echo -e \"getting latest version of forge.\"\n 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)\n BUILD_TYPE=latest\n fi\n\n if [[ \"${BUILD_TYPE}\" != \"recommended\" ]] && [[ \"${BUILD_TYPE}\" != \"latest\" ]]; then\n BUILD_TYPE=recommended\n fi\n\n echo -e \"minecraft version: ${MC_VERSION}\"\n echo -e \"build type: ${BUILD_TYPE}\"\n\n ## some variables for getting versions and things\n FILE_SITE=https://maven.minecraftforge.net/net/minecraftforge/forge/\n 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))')\n\n ## locating the forge version\n if [[ \"${VERSION_KEY}\" == \"\" ]] && [[ \"${BUILD_TYPE}\" == \"recommended\" ]]; then\n echo -e \"dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested.\"\n 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\"))')\n fi\n\n ## Error if the mc version set wasn't valid.\n if [ \"${VERSION_KEY}\" == \"\" ] || [ \"${VERSION_KEY}\" == \"null\" ]; then\n echo -e \"The install failed because there is no valid version of forge for the version of minecraft selected.\"\n exit 1\n fi\n\n FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY \"$VERSION_KEY\" '.promos | .[$VERSION_KEY]')\n\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]] || [[ \"${MC_VERSION}\" == \"1.8.9\" ]]; then\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar\n fi\n else\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}*.jar\n fi\nfi\n\n#Adding .jar when not eding by SERVER_JARFILE\nif [[ ! $SERVER_JARFILE = *\\.jar ]]; then\n SERVER_JARFILE=\"$SERVER_JARFILE.jar\"\nfi\n\n#Downloading jars\necho -e \"Downloading forge version ${FORGE_VERSION}\"\necho -e \"Download link is ${DOWNLOAD_LINK}\"\n\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\n if curl -sSL --output /dev/null --head --fail ${DOWNLOAD_LINK}-installer.jar; then\n echo -e \"installer jar download link is valid.\"\n else\n echo -e \"link is invalid. Exiting now\"\n exit 2\n fi\nelse\n echo -e \"no download link provided. Exiting now\"\n exit 3\nfi\n\ncurl -sSL -o installer.jar ${DOWNLOAD_LINK}-installer.jar\n\n#Checking if downloaded jars exist\nif [[ ! -f ./installer.jar ]]; then\n echo \"!!! Error downloading forge version ${FORGE_VERSION} !!!\"\n exit\nfi\n\nfunction unix_args {\n echo -e \"Detected Forge 1.17 or newer version. Setting up forge unix args.\"\n ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt\n}\n\n# Delete args to support downgrading/upgrading\nrm -rf libraries/net/minecraftforge/forge\nrm unix_args.txt\n\n#Installing server\necho -e \"Installing forge server.\\n\"\nif ! java -Xmx512m -jar installer.jar --installServer; then\n echo -e \"install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}\"\n exit 4\nfi\n\nif [ -f ${FORGE_JAR} ]; then\n # For versions below 1.17 that ship with jar\n mv $FORGE_JAR $SERVER_JARFILE\nelse\n # Check if we need a symlink for 1.17+ Forge JPMS args\n if [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\n unix_args\n\n # Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives\n elif [[ $MC_VERSION == \"latest\" && $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\n unix_args\n fi\nfi\n\necho -e \"Deleting installer.jar file.\\n\"\nrm -rf installer.jar\n\necho \"-----------------------------------------\"\necho \"Installation completed...\"\necho \"-----------------------------------------\"", + "container": "ghcr.io/pelican-eggs/installers:java_8", "entrypoint": "bash" } }, "variables": [ - { - "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": null, - "field_type": "text" - }, - { - "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": null, - "field_type": "text" - }, { "name": "Build Type", "description": "The type of server jar to download from forge.\r\n\r\nValid types are \"recommended\" and \"latest\".", @@ -66,9 +49,12 @@ "default_value": "recommended", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:recommended,latest", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "string", + "in:recommended,latest" + ], + "sort": 1 }, { "name": "Forge Version", @@ -77,9 +63,39 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "nullable|string|max:32", - "sort": null, - "field_type": "text" + "rules": [ + "nullable", + "string", + "max:32" + ], + "sort": 2 + }, + { + "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": 3 + }, + { + "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": 4 } ] } \ No newline at end of file diff --git a/java/forge/forge/egg-pterodactyl-forge-enhanced.json b/java/forge/forge/egg-pterodactyl-forge-enhanced.json index 2de6f7c6..a19f680a 100644 --- a/java/forge/forge/egg-pterodactyl-forge-enhanced.json +++ b/java/forge/forge/egg-pterodactyl-forge-enhanced.json @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "container": "openjdk:8-jdk-slim", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "bash", "script": "#!/bin/bash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y curl jq\r\n\r\nif [[ ! -d /mnt/server ]]; then\r\n mkdir /mnt/server\r\nfi\r\n\r\ncd /mnt/server\r\n\r\n# Remove spaces from the version number to avoid issues with curl\r\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\r\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\r\nif [ -z ${SERVER_JARFILE}]; then \r\n SERVER_JARFILE=server.jar\r\nfi\r\n\r\nif [[ ! -z ${FORGE_VERSION} ]]; then\r\n DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}\r\n FORGE_JAR=forge-${FORGE_VERSION}*.jar\r\nelse\r\n JSON_DATA=$(curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json)\r\n\r\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\r\n echo -e \"getting latest version of forge.\"\r\n 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)\r\n BUILD_TYPE=latest\r\n fi\r\n\r\n if [[ \"${BUILD_TYPE}\" != \"recommended\" ]] \u0026\u0026 [[ \"${BUILD_TYPE}\" != \"latest\" ]]; then\r\n BUILD_TYPE=recommended\r\n fi\r\n\r\n echo -e \"minecraft version: ${MC_VERSION}\"\r\n echo -e \"build type: ${BUILD_TYPE}\"\r\n\r\n ## some variables for getting versions and things\r\n FILE_SITE=https://maven.minecraftforge.net/net/minecraftforge/forge/\r\n 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))')\r\n\r\n ## locating the forge version\r\n if [[ \"${VERSION_KEY}\" == \"\" ]] \u0026\u0026 [[ \"${BUILD_TYPE}\" == \"recommended\" ]]; then\r\n echo -e \"dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested.\"\r\n 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\"))')\r\n fi\r\n\r\n ## Error if the mc version set wasn't valid.\r\n if [ \"${VERSION_KEY}\" == \"\" ] || [ \"${VERSION_KEY}\" == \"null\" ]; then\r\n echo -e \"The install failed because there is no valid version of forge for the version of minecraft selected.\"\r\n exit 1\r\n fi\r\n\r\n FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY \"$VERSION_KEY\" '.promos | .[$VERSION_KEY]')\r\n\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]] || [[ \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar\r\n fi\r\n else\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}*.jar\r\n fi\r\nfi\r\n\r\n#Adding .jar when not eding by SERVER_JARFILE\r\nif [[ ! $SERVER_JARFILE = *\\.jar ]]; then\r\n SERVER_JARFILE=\"$SERVER_JARFILE.jar\"\r\nfi\r\n\r\n#Downloading jars\r\necho -e \"Downloading forge version ${FORGE_VERSION}\"\r\necho -e \"Download link is ${DOWNLOAD_LINK}\"\r\n\r\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\r\n if curl -sSL --output /dev/null --head --fail ${DOWNLOAD_LINK}-installer.jar; then\r\n echo -e \"installer jar download link is valid.\"\r\n else\r\n echo -e \"link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\nelse\r\n echo -e \"no download link provided. Exiting now\"\r\n exit 3\r\nfi\r\n\r\ncurl -sSL -o installer.jar ${DOWNLOAD_LINK}-installer.jar\r\n\r\n#Checking if downloaded jars exist\r\nif [[ ! -f ./installer.jar ]]; then\r\n echo \"!!! Error downloading forge version ${FORGE_VERSION} !!!\"\r\n exit\r\nfi\r\n\r\nfunction unix_args {\r\n echo -e \"Detected Forge 1.17 or newer version. Setting up forge unix args.\"\r\n ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt\r\n}\r\n\r\n# Delete args to support downgrading/upgrading\r\nrm -rf libraries/net/minecraftforge/forge\r\nrm unix_args.txt\r\n\r\n#Installing server\r\necho -e \"Installing forge server.\\n\"\r\njava -jar installer.jar --installServer || { echo -e \"install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}\"; exit 4; }\r\n\r\nif [ -f ${FORGE_JAR} ]; then\r\n # For versions below 1.17 that ship with jar\r\n mv $FORGE_JAR $SERVER_JARFILE\r\nelse\r\n # Check if we need a symlink for 1.17+ Forge JPMS args\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 unix_args\r\n\r\n # Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives\r\n elif [[ $MC_VERSION == \"latest\" \u0026\u0026 $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n unix_args\r\n fi\r\nfi\r\n\r\necho -e \"Deleting installer.jar file.\\n\"\r\nrm -rf installer.jar\r\n\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/ftb/egg-f-t-b-server.json b/java/ftb/egg-f-t-b-server.json index cf76bbf3..2e44761e 100644 --- a/java/ftb/egg-f-t-b-server.json +++ b/java/ftb/egg-f-t-b-server.json @@ -1,94 +1,98 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PLCN_v1", + "version": "PLCN_v3", "update_url": null }, - "exported_at": "2025-02-18T18:08:44+00:00", + "exported_at": "2025-12-19T20:55:40+00:00", "name": "FTB Server", "author": "runemaster580@gmail.com", "uuid": "e60a9de8-a0b1-4d97-b4e2-6568f048668d", "description": "This egg was developed to easily set up a server from FTB.", + "image": null, + "tags": [], "features": [ "eula", "java_version", "pid_limit" ], "docker_images": { - "Java 21": "ghcr.io\/parkervcp\/yolks:java_21", - "Java 19": "ghcr.io\/parkervcp\/yolks:java_19", - "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" + "Java 21": "ghcr.io/parkervcp/yolks:java_21", + "Java 19": "ghcr.io/parkervcp/yolks:java_19", + "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 start-server.jar\" || printf %s \"@unix_args.txt\" )", + "startup_commands": { + "Default": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true $( [[ ! -f unix_args.txt ]] && printf %s \"-jar start-server.jar\" || 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.allocations.default.port}}\",\r\n \"query.port\": \"{{server.allocations.default.port}}\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \")! For help, type \"\r\n}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"server-port\": \"{{server.allocations.default.port}}\",\n \"query.port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", "logs": "{}", "stop": "stop" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# FTB Pack Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nif [ ! -d \/mnt\/server ]; then\r\n mkdir -p \/mnt\/server\r\nfi\r\ncd \/mnt\/server\r\n\r\n\r\n# Download needed software.\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq\r\n}\r\n\r\nfunction get_modpack_id {\r\n urlencode() {\r\n local string=\"${1\/\/ \/%20}\"\r\n echo \"$string\"\r\n }\r\n \r\n # if no modpack id is set and modpack search term is set.\r\n if [ -z ${FTB_MODPACK_ID} ] && [ ! -z \"${FTB_SEARCH_TERM}\" ]; then\r\n encoded_search_term=$(urlencode \"$FTB_SEARCH_TERM\")\r\n JSON_DATA=$(curl -sSL https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/search\/8?term=\"${encoded_search_term}\")\r\n \r\n # grabs the first modpack in array.\r\n FTB_MODPACK_ID=$(echo -e ${JSON_DATA} | jq -r \".packs[0]\")\r\n fi\r\n\r\n if [ -z ${FTB_MODPACK_VERSION_ID} ] && [ ! -z ${FTB_VERSION_STRING} ]; then\r\n # grabs the correct version id matching the string.\r\n FTB_MODPACK_VERSION_ID=$(curl -sSL https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/${FTB_MODPACK_ID} | jq -r --arg VSTRING ${FTB_VERSION_STRING} '.versions[] | select(.name == $VSTRING) | .id')\r\n fi\r\n}\r\n\r\nfunction run_installer {\r\n # get architecture for installer\r\n INSTALLER_TYPE=$([ \"$(uname -m)\" == \"x86_64\" ] && echo \"linux\" || echo \"arm\/linux\")\r\n echo \"ModpackID: ${FTB_MODPACK_ID} VersionID: ${FTB_MODPACK_VERSION_ID} InstallerType: ${INSTALLER_TYPE}\"\r\n\r\n # download installer\r\n curl -L https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/0\/0\/server\/${INSTALLER_TYPE} --output serversetup\r\n chmod +x .\/serversetup\r\n \r\n # remove old forge files (to allow updating)\r\n rm -rf libraries\/net\/minecraftforge\/forge\r\n rm -rf libraries\/net\/neoforged\/forge\r\n rm -f unix_args.txt\r\n \r\n # run installer\r\n .\/serversetup --pack ${FTB_MODPACK_ID} --version ${FTB_MODPACK_VERSION_ID} --auto --no-java\r\n}\r\n\r\n# allows startup command to work\r\nfunction move_startup_files {\r\n # create symlink for forge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # create symlink for neoforge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/neoforged\/neoforge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/neoforged\/neoforge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # move forge\/neoforge\/fabric jar file to start-server.jar if exists\r\n if compgen -G \"forge-*.jar\"; then\r\n mv -f forge-*.jar start-server.jar\r\n elif compgen -G \"fabric-*.jar\"; then\r\n mv -f fabric-*.jar start-server.jar\r\n fi\r\n}\r\n\r\n# installer cleanup\r\nfunction installer_cleanup {\r\n rm serversetup\r\n rm -f run.bat\r\n rm -f run.sh\r\n}\r\n\r\n# run installation steps\r\ninstall_required\r\nget_modpack_id\r\nrun_installer\r\nmove_startup_files\r\ninstaller_cleanup\r\n\r\necho \"Finished installing FTB modpack\"", - "container": "openjdk:21-jdk-slim", + "script": "#!/bin/bash\r\n# FTB Pack Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nif [ ! -d /mnt/server ]; then\r\n mkdir -p /mnt/server\r\nfi\r\ncd /mnt/server\r\n\r\n\r\n# Download needed software.\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq\r\n}\r\n\r\nfunction get_modpack_id {\r\n urlencode() {\r\n local string=\"${1// /%20}\"\r\n echo \"$string\"\r\n }\r\n \r\n # if no modpack id is set and modpack search term is set.\r\n if [ -z ${FTB_MODPACK_ID} ] && [ ! -z \"${FTB_SEARCH_TERM}\" ]; then\r\n encoded_search_term=$(urlencode \"$FTB_SEARCH_TERM\")\r\n JSON_DATA=$(curl -sSL https://api.feed-the-beast.com/v1/modpacks/public/modpack/search/8?term=\"${encoded_search_term}\")\r\n \r\n # grabs the first modpack in array.\r\n FTB_MODPACK_ID=$(echo -e ${JSON_DATA} | jq -r \".packs[0]\")\r\n fi\r\n\r\n if [ -z ${FTB_MODPACK_VERSION_ID} ] && [ ! -z ${FTB_VERSION_STRING} ]; then\r\n # grabs the correct version id matching the string.\r\n FTB_MODPACK_VERSION_ID=$(curl -sSL https://api.feed-the-beast.com/v1/modpacks/public/modpack/${FTB_MODPACK_ID} | jq -r --arg VSTRING ${FTB_VERSION_STRING} '.versions[] | select(.name == $VSTRING) | .id')\r\n fi\r\n}\r\n\r\nfunction run_installer {\r\n # get architecture for installer\r\n INSTALLER_TYPE=$([ \"$(uname -m)\" == \"x86_64\" ] && echo \"linux\" || echo \"arm/linux\")\r\n echo \"ModpackID: ${FTB_MODPACK_ID} VersionID: ${FTB_MODPACK_VERSION_ID} InstallerType: ${INSTALLER_TYPE}\"\r\n\r\n # download installer\r\n curl -L https://api.feed-the-beast.com/v1/modpacks/public/modpack/0/0/server/${INSTALLER_TYPE} --output serversetup\r\n chmod +x ./serversetup\r\n \r\n # remove old forge files (to allow updating)\r\n rm -rf libraries/net/minecraftforge/forge\r\n rm -rf libraries/net/neoforged/forge\r\n rm -f unix_args.txt\r\n \r\n # run installer\r\n ./serversetup --pack ${FTB_MODPACK_ID} --version ${FTB_MODPACK_VERSION_ID} --auto --no-java\r\n}\r\n\r\n# allows startup command to work\r\nfunction move_startup_files {\r\n # create symlink for forge unix_args.txt if exists\r\n if compgen -G \"libraries/net/minecraftforge/forge/*/unix_args.txt\"; then\r\n ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # create symlink for neoforge unix_args.txt if exists\r\n if compgen -G \"libraries/net/neoforged/neoforge/*/unix_args.txt\"; then\r\n ln -sf libraries/net/neoforged/neoforge/*/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # move forge/neoforge/fabric jar file to start-server.jar if exists\r\n if compgen -G \"forge-*.jar\"; then\r\n mv -f forge-*.jar start-server.jar\r\n elif compgen -G \"fabric-*.jar\"; then\r\n mv -f fabric-*.jar start-server.jar\r\n fi\r\n}\r\n\r\n# installer cleanup\r\nfunction installer_cleanup {\r\n rm serversetup\r\n rm -f run.bat\r\n rm -f run.sh\r\n}\r\n\r\n# run installation steps\r\ninstall_required\r\nget_modpack_id\r\nrun_installer\r\nmove_startup_files\r\ninstaller_cleanup\r\n\r\necho \"Finished installing FTB modpack\"", + "container": "ghcr.io/pelican-eggs/installers:java_21", "entrypoint": "bash" } }, "variables": [ { - "sort": null, - "name": "FTB Pack search term", - "description": "the search term for finding the modpack. needs to be at least 4 characters long.\r\nFind out what term is needed by using the ftb app and searching with the term. make sure it only returns 1 result.\r\ncan also be searched for via: https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/search\/8?term={SEARCHTERM}\r\n\r\nonly needed if the modpack id and modpack version id is unknown.", - "env_variable": "FTB_SEARCH_TERM", + "name": "FTB Pack Version", + "description": "what version of the modpack to install. leave empty if using the modpack version id variable.", + "env_variable": "FTB_VERSION_STRING", "default_value": "", "user_viewable": true, "user_editable": true, "rules": [ "nullable", "string" - ] + ], + "sort": 1 }, { - "sort": null, - "name": "FTB modpack ID", - "description": "The FTB Api modpack ID.\r\nNeeded if not using the search variable\r\n\r\nExample: FTB Interactions ID is 5.\r\nhttps:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/5", - "env_variable": "FTB_MODPACK_ID", + "name": "FTB Pack Version ID", + "description": "The modpack api version ID.\r\nneeded if not using the string for the version.\r\n\r\nExample FTB Revelations version id for version \"2.0.2\" is 86.\r\nwhich would come out as: https://api.feed-the-beast.com/v1/modpacks/public/modpack/5/86", + "env_variable": "FTB_MODPACK_VERSION_ID", "default_value": "", "user_viewable": true, "user_editable": true, "rules": [ "nullable", "integer" - ] + ], + "sort": 2 }, { - "sort": null, - "name": "FTB Pack Version", - "description": "what version of the modpack to install. leave empty if using the modpack version id variable.", - "env_variable": "FTB_VERSION_STRING", + "name": "FTB Pack search term", + "description": "the search term for finding the modpack. needs to be at least 4 characters long.\r\nFind out what term is needed by using the ftb app and searching with the term. make sure it only returns 1 result.\r\ncan also be searched for via: https://api.feed-the-beast.com/v1/modpacks/public/modpack/search/8?term={SEARCHTERM}\r\n\r\nonly needed if the modpack id and modpack version id is unknown.", + "env_variable": "FTB_SEARCH_TERM", "default_value": "", "user_viewable": true, "user_editable": true, "rules": [ "nullable", "string" - ] + ], + "sort": 3 }, { - "sort": null, - "name": "FTB Pack Version ID", - "description": "The modpack api version ID.\r\nneeded if not using the string for the version.\r\n\r\nExample FTB Revelations version id for version \"2.0.2\" is 86.\r\nwhich would come out as: https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/5\/86", - "env_variable": "FTB_MODPACK_VERSION_ID", + "name": "FTB modpack ID", + "description": "The FTB Api modpack ID.\r\nNeeded if not using the search variable\r\n\r\nExample: FTB Interactions ID is 5.\r\nhttps://api.feed-the-beast.com/v1/modpacks/public/modpack/5", + "env_variable": "FTB_MODPACK_ID", "default_value": "", "user_viewable": true, "user_editable": true, "rules": [ "nullable", "integer" - ] + ], + "sort": 4 } ] } \ No newline at end of file diff --git a/java/ftb/egg-pterodactyl-f-t-b-server.json b/java/ftb/egg-pterodactyl-f-t-b-server.json index 1a7647b5..ae0ba943 100644 --- a/java/ftb/egg-pterodactyl-f-t-b-server.json +++ b/java/ftb/egg-pterodactyl-f-t-b-server.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# FTB Pack Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nif [ ! -d \/mnt\/server ]; then\r\n mkdir -p \/mnt\/server\r\nfi\r\ncd \/mnt\/server\r\n\r\n\r\n# Download needed software.\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq\r\n}\r\n\r\nfunction get_modpack_id {\r\n urlencode() {\r\n local string=\"${1\/\/ \/%20}\"\r\n echo \"$string\"\r\n }\r\n \r\n # if no modpack id is set and modpack search term is set.\r\n if [ -z ${FTB_MODPACK_ID} ] && [ ! -z \"${FTB_SEARCH_TERM}\" ]; then\r\n encoded_search_term=$(urlencode \"$FTB_SEARCH_TERM\")\r\n JSON_DATA=$(curl -sSL https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/search\/8?term=\"${encoded_search_term}\")\r\n \r\n # grabs the first modpack in array.\r\n FTB_MODPACK_ID=$(echo -e ${JSON_DATA} | jq -r \".packs[0]\")\r\n fi\r\n\r\n if [ -z ${FTB_MODPACK_VERSION_ID} ] && [ ! -z ${FTB_VERSION_STRING} ]; then\r\n # grabs the correct version id matching the string.\r\n FTB_MODPACK_VERSION_ID=$(curl -sSL https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/${FTB_MODPACK_ID} | jq -r --arg VSTRING ${FTB_VERSION_STRING} '.versions[] | select(.name == $VSTRING) | .id')\r\n fi\r\n}\r\n\r\nfunction run_installer {\r\n # get architecture for installer\r\n INSTALLER_TYPE=$([ \"$(uname -m)\" == \"x86_64\" ] && echo \"linux\" || echo \"arm\/linux\")\r\n echo \"ModpackID: ${FTB_MODPACK_ID} VersionID: ${FTB_MODPACK_VERSION_ID} InstallerType: ${INSTALLER_TYPE}\"\r\n\r\n # download installer\r\n curl -L https:\/\/api.feed-the-beast.com\/v1\/modpacks\/public\/modpack\/0\/0\/server\/${INSTALLER_TYPE} --output serversetup\r\n chmod +x .\/serversetup\r\n \r\n # remove old forge files (to allow updating)\r\n rm -rf libraries\/net\/minecraftforge\/forge\r\n rm -rf libraries\/net\/neoforged\/forge\r\n rm -f unix_args.txt\r\n \r\n # run installer\r\n .\/serversetup --pack ${FTB_MODPACK_ID} --version ${FTB_MODPACK_VERSION_ID} --auto --no-java\r\n}\r\n\r\n# allows startup command to work\r\nfunction move_startup_files {\r\n # create symlink for forge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # create symlink for neoforge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/neoforged\/neoforge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/neoforged\/neoforge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # move forge\/neoforge\/fabric jar file to start-server.jar if exists\r\n if compgen -G \"forge-*.jar\"; then\r\n mv -f forge-*.jar start-server.jar\r\n elif compgen -G \"fabric-*.jar\"; then\r\n mv -f fabric-*.jar start-server.jar\r\n fi\r\n}\r\n\r\n# installer cleanup\r\nfunction installer_cleanup {\r\n rm serversetup\r\n rm -f run.bat\r\n rm -f run.sh\r\n}\r\n\r\n# run installation steps\r\ninstall_required\r\nget_modpack_id\r\nrun_installer\r\nmove_startup_files\r\ninstaller_cleanup\r\n\r\necho \"Finished installing FTB modpack\"", - "container": "openjdk:21-jdk-slim", + "container": "ghcr.io\/pelican-eggs\/yolks:java_21", "entrypoint": "bash" } }, diff --git a/java/ftb/outdated/egg-f-t-b-modpacks-ch-server.json b/java/ftb/outdated/egg-f-t-b-modpacks-ch-server.json index f92ac4ce..7c90414c 100644 --- a/java/ftb/outdated/egg-f-t-b-modpacks-ch-server.json +++ b/java/ftb/outdated/egg-f-t-b-modpacks-ch-server.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# FTB Pack Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nif [ ! -d \/mnt\/server ]; then\r\n mkdir -p \/mnt\/server\r\nfi\r\ncd \/mnt\/server\r\n\r\n\r\n# Download needed software.\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq\r\n}\r\n\r\nfunction get_modpack_id {\r\n urlencode() {\r\n local string=\"${1\/\/ \/%20}\"\r\n echo \"$string\"\r\n }\r\n \r\n # if no modpack id is set and modpack search term is set.\r\n if [ -z ${FTB_MODPACK_ID} ] && [ ! -z \"${FTB_SEARCH_TERM}\" ]; then\r\n encoded_search_term=$(urlencode \"$FTB_SEARCH_TERM\")\r\n JSON_DATA=$(curl -sSL https:\/\/api.modpacks.ch\/public\/modpack\/search\/8?term=\"${encoded_search_term}\")\r\n \r\n # grabs the first modpack in array.\r\n FTB_MODPACK_ID=$(echo -e ${JSON_DATA} | jq -r \".packs[0]\")\r\n fi\r\n \r\n if [ -z ${FTB_MODPACK_VERSION_ID} ] && [ ! -z ${FTB_VERSION_STRING} ]; then\r\n # grabs the correct version id matching the string.\r\n FTB_MODPACK_VERSION_ID=$(curl -sSL https:\/\/api.modpacks.ch\/public\/modpack\/${FTB_MODPACK_ID} | jq -r --arg VSTRING ${FTB_VERSION_STRING} '.versions[] | select(.name == $VSTRING) | .id')\r\n fi\r\n}\r\n\r\nfunction run_installer {\r\n # get architecture for installer\r\n INSTALLER_TYPE=$([ \"$(uname -m)\" == \"x86_64\" ] && echo \"linux\" || echo \"arm\/linux\")\r\n echo \"ModpackID: ${FTB_MODPACK_ID} VersionID: ${FTB_MODPACK_VERSION_ID} InstallerType: ${INSTALLER_TYPE}\"\r\n\r\n # download installer\r\n curl -L https:\/\/api.modpacks.ch\/public\/modpack\/0\/0\/server\/${INSTALLER_TYPE} --output serversetup\r\n chmod +x .\/serversetup\r\n \r\n # remove old forge files (to allow updating)\r\n rm -rf libraries\/net\/minecraftforge\/forge\r\n rm -rf libraries\/net\/neoforged\/forge\r\n rm -f unix_args.txt\r\n \r\n # run installer\r\n .\/serversetup ${FTB_MODPACK_ID} ${FTB_MODPACK_VERSION_ID} --auto --noscript --nojava\r\n}\r\n\r\n# allows startup command to work\r\nfunction move_startup_files {\r\n # create symlink for forge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # create symlink for neoforge unix_args.txt if exists\r\n if compgen -G \"libraries\/net\/neoforged\/forge\/*\/unix_args.txt\"; then\r\n ln -sf libraries\/net\/neoforged\/forge\/*\/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # move forge\/neoforge\/fabric jar file to start-server.jar if exists\r\n if compgen -G \"forge-*.jar\"; then\r\n mv -f forge-*.jar start-server.jar\r\n elif compgen -G \"fabric-*.jar\"; then\r\n mv -f fabric-*.jar start-server.jar\r\n fi\r\n}\r\n\r\n# installer cleanup\r\nfunction installer_cleanup {\r\n rm serversetup\r\n rm -f run.bat\r\n rm -f run.sh\r\n}\r\n\r\n# run installation steps\r\ninstall_required\r\nget_modpack_id\r\nrun_installer\r\nmove_startup_files\r\ninstaller_cleanup\r\n\r\necho \"Finished installing FTB modpack\"", - "container": "openjdk:8-jdk-slim", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "bash" } }, diff --git a/java/ftb/outdated/egg-f-t-b-revelation.json b/java/ftb/outdated/egg-f-t-b-revelation.json index 0905c947..8c2fc5e1 100644 --- a/java/ftb/outdated/egg-f-t-b-revelation.json +++ b/java/ftb/outdated/egg-f-t-b-revelation.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\nBASEURL=https:\/\/www.feed-the-beast.com\/projects\/ftb-revelation\/files\r\nPATTERN=\"(projects\\\/ftb-revelation\\\/files\\\/\\d{7,})\"\r\nID=`curl -sl ${BASEURL}| grep -A2 ${MODPACK_VERSION} | grep -oE \"${PATTERN}\"`\r\nSECONDURL=https:\/\/www.feed-the-beast.com\/${ID}\r\nGOOD_ID=`curl -sl ${SECONDURL} | grep -B2 Server_${MODPACK_VERSION}.zip | grep -oE \"${PATTERN}\"`\r\n\r\nDL_URL=https:\/\/www.feed-the-beast.com\/${GOOD_ID}\/download\r\n\r\ncd \/mnt\/server\r\n\r\ncurl -L ${DL_URL} -o ftbrevelations-${MODPACK_VERSION}.zip\r\n\r\nunzip ftbrevelations-${MODPACK_VERSION}.zip\r\n\r\nrm -rf ftbrevelations-${MODPACK_VERSION}.zip\r\n\r\nsh .\/FTBInstall.sh\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/ftb/outdated/egg-feed-the-beast.json b/java/ftb/outdated/egg-feed-the-beast.json index 59693fe5..4650865c 100644 --- a/java/ftb/outdated/egg-feed-the-beast.json +++ b/java/ftb/outdated/egg-feed-the-beast.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Generic FTB Server Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n# MODPACK_VERSION = version of the modpack, set in variables\r\n# i.e MODPACK_VERSION=1.5.0\r\n# MODPACK_URL = url base of the pack, set in variables, hardcoded\r\n# i.e https:\/\/www.feed-the-beast.com\/projects\/ftb-revelation\/files\r\n# MODPACK_URL=ftb-revelation\r\n\r\n## Correcting for bad variables\r\nGETPACK=$(echo ${MODPACK_URL} | cut -d \"\/\" -f 5 )\r\necho -e \"\\n The pack being downloaded is $GETPACK \\n\"\r\n\r\n## Getting the Base URL\r\nBASEURL=https:\/\/www.feed-the-beast.com\/projects\/${GETPACK}\/files\r\necho \"The base URL is ${BASEURL}\"\r\n\r\n## This is meant to get the pack ID that is unique and not exactly clear \r\n\r\n\r\nif [ -z \"${MODPACK_VERSION}\" ] || [ \"${MODPACK_VERSION}\" == \"latest\" ]; then\r\n ID=`curl -sl ${BASEURL} | grep -i -A9 'title=\"release\"' | grep -i -o 'href=\".*\"' | cut -d \"\/\" -f5 | sed s\/\\\"\/\/g`\r\n echo \"ID: ${ID}\"\r\nelse \r\n ID=`curl -sl ${BASEURL} | grep -i -A9 \"${MODPACK_VERSION}\" | grep -m1 -oE 'href=\"[^\\\"]+\"' | cut -d \"\/\" -f5 | grep -oE [0-9]+`\r\n echo \"ID: ${ID}\"\r\nfi\r\n\r\nSECONDURL=${BASEURL}\/${ID}\r\necho \"SECONDURL: ${SECONDURL}\"\r\n\r\nGOOD_ID=`curl -sl ${SECONDURL} | grep -i server | grep -Eo 'href=\"[^\\\"]+\"' | grep -o -E \"[0-9]+\" | tail -1`\r\necho \"GOOD_ID: ${GOOD_ID}\"\r\n\r\nDL_URL=${BASEURL}\/${GOOD_ID}\/download\r\necho \"Download_URL: ${DL_URL}\"\r\n\r\ncd \/mnt\/server\r\n\r\necho \"Executing curl -L ${DL_URL} -o $GETPACK.zip\"\r\ncurl -L ${DL_URL} -o $GETPACK.zip\r\n\r\nunzip ${GETPACK}.zip\r\n\r\nrm -rf ${GETPACK}.zip\r\n\r\necho \"Running FTBInstall.sh\"\r\nif [ -f .\/FTBInstall.sh ]; then\r\n sh .\/FTBInstall.sh\r\nelse\r\n echo -e \"No FTBInstall script found. Assumeing it's not needed.\"\r\nfi\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/ftb/outdated/egg-pterodactyl-f-t-b-modpacks-ch-server.json b/java/ftb/outdated/egg-pterodactyl-f-t-b-modpacks-ch-server.json index e1066b6f..5c5da6c5 100644 --- a/java/ftb/outdated/egg-pterodactyl-f-t-b-modpacks-ch-server.json +++ b/java/ftb/outdated/egg-pterodactyl-f-t-b-modpacks-ch-server.json @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "container": "openjdk:8-jdk-slim", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "bash", "script": "#!/bin/bash\r\n# FTB Pack Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nif [ ! -d /mnt/server ]; then\r\n mkdir -p /mnt/server\r\nfi\r\ncd /mnt/server\r\n\r\n\r\n# Download needed software.\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq\r\n}\r\n\r\nfunction get_modpack_id {\r\n urlencode() {\r\n local string=\"${1// /%20}\"\r\n echo \"$string\"\r\n }\r\n \r\n # if no modpack id is set and modpack search term is set.\r\n if [ -z ${FTB_MODPACK_ID} ] \u0026\u0026 [ ! -z \"${FTB_SEARCH_TERM}\" ]; then\r\n encoded_search_term=$(urlencode \"$FTB_SEARCH_TERM\")\r\n JSON_DATA=$(curl -sSL https://api.modpacks.ch/public/modpack/search/8?term=\"${encoded_search_term}\")\r\n \r\n # grabs the first modpack in array.\r\n FTB_MODPACK_ID=$(echo -e ${JSON_DATA} | jq -r \".packs[0]\")\r\n fi\r\n \r\n if [ -z ${FTB_MODPACK_VERSION_ID} ] \u0026\u0026 [ ! -z ${FTB_VERSION_STRING} ]; then\r\n # grabs the correct version id matching the string.\r\n FTB_MODPACK_VERSION_ID=$(curl -sSL https://api.modpacks.ch/public/modpack/${FTB_MODPACK_ID} | jq -r --arg VSTRING ${FTB_VERSION_STRING} '.versions[] | select(.name == $VSTRING) | .id')\r\n fi\r\n}\r\n\r\nfunction run_installer {\r\n # get architecture for installer\r\n INSTALLER_TYPE=$([ \"$(uname -m)\" == \"x86_64\" ] \u0026\u0026 echo \"linux\" || echo \"arm/linux\")\r\n echo \"ModpackID: ${FTB_MODPACK_ID} VersionID: ${FTB_MODPACK_VERSION_ID} InstallerType: ${INSTALLER_TYPE}\"\r\n\r\n # download installer\r\n curl -L https://api.modpacks.ch/public/modpack/0/0/server/${INSTALLER_TYPE} --output serversetup\r\n chmod +x ./serversetup\r\n \r\n # remove old forge files (to allow updating)\r\n rm -rf libraries/net/minecraftforge/forge\r\n rm -rf libraries/net/neoforged/forge\r\n rm -f unix_args.txt\r\n \r\n # run installer\r\n ./serversetup ${FTB_MODPACK_ID} ${FTB_MODPACK_VERSION_ID} --auto --noscript --nojava\r\n}\r\n\r\n# allows startup command to work\r\nfunction move_startup_files {\r\n # create symlink for forge unix_args.txt if exists\r\n if compgen -G \"libraries/net/minecraftforge/forge/*/unix_args.txt\"; then\r\n ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # create symlink for neoforge unix_args.txt if exists\r\n if compgen -G \"libraries/net/neoforged/forge/*/unix_args.txt\"; then\r\n ln -sf libraries/net/neoforged/forge/*/unix_args.txt unix_args.txt\r\n fi\r\n \r\n # move forge/neoforge/fabric jar file to start-server.jar if exists\r\n if compgen -G \"forge-*.jar\"; then\r\n mv -f forge-*.jar start-server.jar\r\n elif compgen -G \"fabric-*.jar\"; then\r\n mv -f fabric-*.jar start-server.jar\r\n fi\r\n}\r\n\r\n# installer cleanup\r\nfunction installer_cleanup {\r\n rm serversetup\r\n rm -f run.bat\r\n rm -f run.sh\r\n}\r\n\r\n# run installation steps\r\ninstall_required\r\nget_modpack_id\r\nrun_installer\r\nmove_startup_files\r\ninstaller_cleanup\r\n\r\necho \"Finished installing FTB modpack\"" } diff --git a/java/ftb/outdated/egg-pterodactyl-f-t-b-revelation.json b/java/ftb/outdated/egg-pterodactyl-f-t-b-revelation.json index d69e8fdd..3511eb3d 100644 --- a/java/ftb/outdated/egg-pterodactyl-f-t-b-revelation.json +++ b/java/ftb/outdated/egg-pterodactyl-f-t-b-revelation.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\nBASEURL=https://www.feed-the-beast.com/projects/ftb-revelation/files\r\nPATTERN=\"(projects\\/ftb-revelation\\/files\\/\\d{7,})\"\r\nID=`curl -sl ${BASEURL}| grep -A2 ${MODPACK_VERSION} | grep -oE \"${PATTERN}\"`\r\nSECONDURL=https://www.feed-the-beast.com/${ID}\r\nGOOD_ID=`curl -sl ${SECONDURL} | grep -B2 Server_${MODPACK_VERSION}.zip | grep -oE \"${PATTERN}\"`\r\n\r\nDL_URL=https://www.feed-the-beast.com/${GOOD_ID}/download\r\n\r\ncd /mnt/server\r\n\r\ncurl -L ${DL_URL} -o ftbrevelations-${MODPACK_VERSION}.zip\r\n\r\nunzip ftbrevelations-${MODPACK_VERSION}.zip\r\n\r\nrm -rf ftbrevelations-${MODPACK_VERSION}.zip\r\n\r\nsh ./FTBInstall.sh\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/ftb/outdated/egg-pterodactyl-feed-the-beast.json b/java/ftb/outdated/egg-pterodactyl-feed-the-beast.json index 19f2dcb6..af12e1ea 100644 --- a/java/ftb/outdated/egg-pterodactyl-feed-the-beast.json +++ b/java/ftb/outdated/egg-pterodactyl-feed-the-beast.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Generic FTB Server Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n# MODPACK_VERSION = version of the modpack, set in variables\r\n# i.e MODPACK_VERSION=1.5.0\r\n# MODPACK_URL = url base of the pack, set in variables, hardcoded\r\n# i.e https://www.feed-the-beast.com/projects/ftb-revelation/files\r\n# MODPACK_URL=ftb-revelation\r\n\r\n## Correcting for bad variables\r\nGETPACK=$(echo ${MODPACK_URL} | cut -d \"/\" -f 5 )\r\necho -e \"\\n The pack being downloaded is $GETPACK \\n\"\r\n\r\n## Getting the Base URL\r\nBASEURL=https://www.feed-the-beast.com/projects/${GETPACK}/files\r\necho \"The base URL is ${BASEURL}\"\r\n\r\n## This is meant to get the pack ID that is unique and not exactly clear \r\n\r\n\r\nif [ -z \"${MODPACK_VERSION}\" ] || [ \"${MODPACK_VERSION}\" == \"latest\" ]; then\r\n ID=`curl -sl ${BASEURL} | grep -i -A9 'title=\"release\"' | grep -i -o 'href=\".*\"' | cut -d \"/\" -f5 | sed s/\\\"//g`\r\n echo \"ID: ${ID}\"\r\nelse \r\n ID=`curl -sl ${BASEURL} | grep -i -A9 \"${MODPACK_VERSION}\" | grep -m1 -oE 'href=\"[^\\\"]+\"' | cut -d \"/\" -f5 | grep -oE [0-9]+`\r\n echo \"ID: ${ID}\"\r\nfi\r\n\r\nSECONDURL=${BASEURL}/${ID}\r\necho \"SECONDURL: ${SECONDURL}\"\r\n\r\nGOOD_ID=`curl -sl ${SECONDURL} | grep -i server | grep -Eo 'href=\"[^\\\"]+\"' | grep -o -E \"[0-9]+\" | tail -1`\r\necho \"GOOD_ID: ${GOOD_ID}\"\r\n\r\nDL_URL=${BASEURL}/${GOOD_ID}/download\r\necho \"Download_URL: ${DL_URL}\"\r\n\r\ncd /mnt/server\r\n\r\necho \"Executing curl -L ${DL_URL} -o $GETPACK.zip\"\r\ncurl -L ${DL_URL} -o $GETPACK.zip\r\n\r\nunzip ${GETPACK}.zip\r\n\r\nrm -rf ${GETPACK}.zip\r\n\r\necho \"Running FTBInstall.sh\"\r\nif [ -f ./FTBInstall.sh ]; then\r\n sh ./FTBInstall.sh\r\nelse\r\n echo -e \"No FTBInstall script found. Assumeing it's not needed.\"\r\nfi\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/glowstone/egg-glowstone.json b/java/glowstone/egg-glowstone.json index 6e667ae4..1943f926 100644 --- a/java/glowstone/egg-glowstone.json +++ b/java/glowstone/egg-glowstone.json @@ -1,59 +1,67 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PTDL_v2", + "version": "PLCN_v3", "update_url": null }, - "exported_at": "2024-06-01T19:39:45+00:00", + "exported_at": "2025-12-19T20:56:01+00:00", "name": "Glowstone", "author": "support@pterodactyl.io", "uuid": "0b0b94ea-aff2-49c0-80a0-736c1717f82e", "description": "Glowstone is an open-source server implementation for Minecraft: Java Edition 1.12.2 and up.", + "image": null, + "tags": [], "features": null, "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", - "Java 18": "ghcr.io\/pterodactyl\/yolks:java_18" + "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", + "Java 18": "ghcr.io/pterodactyl/yolks:java_18" }, "file_denylist": [], - "startup": "java -Xms768M -Xmx{{SERVER_MEMORY}}M -XX:+UseG1GC -jar {{SERVER_JARFILE}}", + "startup_commands": { + "Default": "java -Xms768M -Xmx{{SERVER_MEMORY}}M -XX:+UseG1GC -jar {{SERVER_JARFILE}}" + }, "config": { - "files": "{\r\n \"config\/glowstone.yml\": {\r\n \"parser\": \"yaml\",\r\n \"find\": {\r\n \"server.port\": \"{{server.build.default.port}}\",\r\n \"console.prompt\": \"\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \"Ready for connections.\"\r\n}", - "logs": "{\r\n \"custom\": false,\r\n \"location\": \"logs\/latest.log\"\r\n}", + "files": "{\n \"config\\/glowstone.yml\": {\n \"parser\": \"yaml\",\n \"find\": {\n \"server.port\": \"{{server.allocations.default.port}}\",\n \"console.prompt\": \"\"\n }\n }\n}", + "startup": "{\n \"done\": \"Ready for connections.\"\n}", + "logs": "{\n \"custom\": false,\n \"location\": \"logs\\/latest.log\"\n}", "stop": "stop" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y jq curl\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ $VERSION == *SNAPSHOT ]; then\r\n echo -e \"Using Maven\"\r\n \r\n DOWNLOAD_URL=\"https:\/\/repo.glowstone.net\/service\/rest\/v1\/search\/assets\/download?group=net.glowstone&name=glowstone&sort=version&repository=snapshots&maven.baseVersion=${VERSION}&direction=desc&maven.classifier=\"\r\nelse \r\n echo -e \"Using GitHub.\"\r\n\r\n if [ -z \"${GITHUB_USER}\" ] && [ -z \"${GITHUB_OAUTH_TOKEN}\" ] ; then\r\n echo -e \"using anon api call\"\r\n else\r\n echo -e \"user and oauth token set\"\r\n alias curl='curl -u ${GITHUB_USER}:${GITHUB_OAUTH_TOKEN} '\r\n fi\r\n \r\n ## get release info and download links\r\n LATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\/latest\")\r\n RELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\")\r\n\r\n if [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\n else\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\n fi\r\nfi\r\n\r\necho -e \"Downloading...\"\r\ncurl --silent -L -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\necho -e \"Generating configuration...\"\r\njava -jar ${SERVER_JARFILE} --generate-config\r\n\r\necho -e \"Install Complete\"", - "container": "eclipse-temurin:8-jdk", + "script": "#!/bin/bash\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y jq curl\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nif [ $VERSION == *SNAPSHOT ]; then\r\n echo -e \"Using Maven\"\r\n \r\n DOWNLOAD_URL=\"https://repo.glowstone.net/service/rest/v1/search/assets/download?group=net.glowstone&name=glowstone&sort=version&repository=snapshots&maven.baseVersion=${VERSION}&direction=desc&maven.classifier=\"\r\nelse \r\n echo -e \"Using GitHub.\"\r\n\r\n if [ -z \"${GITHUB_USER}\" ] && [ -z \"${GITHUB_OAUTH_TOKEN}\" ] ; then\r\n echo -e \"using anon api call\"\r\n else\r\n echo -e \"user and oauth token set\"\r\n alias curl='curl -u ${GITHUB_USER}:${GITHUB_OAUTH_TOKEN} '\r\n fi\r\n \r\n ## get release info and download links\r\n LATEST_JSON=$(curl --silent \"https://api.github.com/repos/${GITHUB_PACKAGE}/releases/latest\")\r\n RELEASES=$(curl --silent \"https://api.github.com/repos/${GITHUB_PACKAGE}/releases\")\r\n\r\n if [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\n else\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\n fi\r\nfi\r\n\r\necho -e \"Downloading...\"\r\ncurl --silent -L -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\necho -e \"Generating configuration...\"\r\njava -jar ${SERVER_JARFILE} --generate-config\r\n\r\necho -e \"Install Complete\"", + "container": "ghcr.io/pelican-eggs/installers:java_8", "entrypoint": "bash" } }, "variables": [ { - "name": "Server Jar File", - "description": "The name of the server jarfile to run the server with.", - "env_variable": "SERVER_JARFILE", - "default_value": "glowstone.jar", - "user_viewable": true, - "user_editable": true, - "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", - "sort": null, - "field_type": "text" + "name": "GitHub OAuth Token", + "description": "This can be either an OAuth or a Personal Access Token.\r\n\r\nThis is required for the install is you set a user.", + "env_variable": "GITHUB_OAUTH_TOKEN", + "default_value": "", + "user_viewable": false, + "user_editable": false, + "rules": [ + "string", + "nullable" + ], + "sort": null }, { - "name": "Glowstone Version", - "description": "The version of Glowstone to download. If it ends in SNAPSHOT, it will attempt to download from the maven repository.", - "env_variable": "VERSION", - "default_value": "latest", + "name": "GitHub Package", + "description": "The repository to download from.", + "env_variable": "GITHUB_PACKAGE", + "default_value": "GlowstoneMC/Glowstone", "user_viewable": true, - "user_editable": true, - "rules": "required|string|max:20", - "sort": null, - "field_type": "text" + "user_editable": false, + "rules": [ + "required", + "string" + ], + "sort": null }, { "name": "GitHub User", @@ -62,31 +70,25 @@ "default_value": "", "user_viewable": false, "user_editable": false, - "rules": "string|nullable", - "sort": null, - "field_type": "text" + "rules": [ + "string", + "nullable" + ], + "sort": null }, { - "name": "GitHub OAuth Token", - "description": "This can be either an OAuth or a Personal Access Token.\r\n\r\nThis is required for the install is you set a user.", - "env_variable": "GITHUB_OAUTH_TOKEN", - "default_value": "", - "user_viewable": false, - "user_editable": false, - "rules": "string|nullable", - "sort": null, - "field_type": "text" - }, - { - "name": "GitHub Package", - "description": "The repository to download from.", - "env_variable": "GITHUB_PACKAGE", - "default_value": "GlowstoneMC\/Glowstone", + "name": "Glowstone Version", + "description": "The version of Glowstone to download. If it ends in SNAPSHOT, it will attempt to download from the maven repository.", + "env_variable": "VERSION", + "default_value": "latest", "user_viewable": true, - "user_editable": false, - "rules": "required|string", - "sort": null, - "field_type": "text" + "user_editable": true, + "rules": [ + "required", + "string", + "max:20" + ], + "sort": null }, { "name": "Match", @@ -95,9 +97,24 @@ "default_value": "glowstone.jar", "user_viewable": false, "user_editable": false, - "rules": "required|string", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "string" + ], + "sort": null + }, + { + "name": "Server Jar File", + "description": "The name of the server jarfile to run the server with.", + "env_variable": "SERVER_JARFILE", + "default_value": "glowstone.jar", + "user_viewable": true, + "user_editable": true, + "rules": [ + "required", + "regex:/^([\\w\\d._-]+)(\\.jar)$/" + ], + "sort": null } ] } \ No newline at end of file diff --git a/java/glowstone/egg-pterodactyl-glowstone.json b/java/glowstone/egg-pterodactyl-glowstone.json index 6f22a96d..28192c19 100644 --- a/java/glowstone/egg-pterodactyl-glowstone.json +++ b/java/glowstone/egg-pterodactyl-glowstone.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "eclipse-temurin:8-jdk", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "bash", "script": "#!/bin/bash\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y jq curl\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nif [ $VERSION == *SNAPSHOT ]; then\r\n echo -e \"Using Maven\"\r\n \r\n DOWNLOAD_URL=\"https://repo.glowstone.net/service/rest/v1/search/assets/download?group=net.glowstone\u0026name=glowstone\u0026sort=version\u0026repository=snapshots\u0026maven.baseVersion=${VERSION}\u0026direction=desc\u0026maven.classifier=\"\r\nelse \r\n echo -e \"Using GitHub.\"\r\n\r\n if [ -z \"${GITHUB_USER}\" ] \u0026\u0026 [ -z \"${GITHUB_OAUTH_TOKEN}\" ] ; then\r\n echo -e \"using anon api call\"\r\n else\r\n echo -e \"user and oauth token set\"\r\n alias curl='curl -u ${GITHUB_USER}:${GITHUB_OAUTH_TOKEN} '\r\n fi\r\n \r\n ## get release info and download links\r\n LATEST_JSON=$(curl --silent \"https://api.github.com/repos/${GITHUB_PACKAGE}/releases/latest\")\r\n RELEASES=$(curl --silent \"https://api.github.com/repos/${GITHUB_PACKAGE}/releases\")\r\n\r\n if [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\n else\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\n fi\r\nfi\r\n\r\necho -e \"Downloading...\"\r\ncurl --silent -L -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\necho -e \"Generating configuration...\"\r\njava -jar ${SERVER_JARFILE} --generate-config\r\n\r\necho -e \"Install Complete\"" } diff --git a/java/krypton/egg-krypton.json b/java/krypton/egg-krypton.json index 513296e7..2bb9cce2 100644 --- a/java/krypton/egg-krypton.json +++ b/java/krypton/egg-krypton.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n#\r\n# Krypton installation script for Pelican\r\n# Created by BomBardyGamer\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\napt-get update\r\napt-get install -y curl jq unzip\r\n\r\ncd \/mnt\/server\r\nif [ -z \"${KRYPTON_VERSION}\" ] || [ \"${KRYPTON_VERSION}\" == \"latest\" ]; then\r\n KRYPTON_VERSION=\"lastSuccessfulBuild\"\r\nfi\r\n\r\nBASE_URL=\"https:\/\/ci.kryptonmc.org\/job\/Krypton\/${KRYPTON_VERSION}\"\r\nARTIFACT=`curl \"${BASE_URL}\/api\/json?tree=artifacts%5BrelativePath%5D\" | jq '.artifacts[0].relativePath' | sed 's\/\"\/\/g'`\r\n\r\ncurl -o ${SERVER_JAR} ${BASE_URL}\/artifact\/${ARTIFACT}\r\nunzip ${SERVER_JAR} \"config.conf\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/java/krypton/egg-pterodactyl-krypton.json b/java/krypton/egg-pterodactyl-krypton.json index 40bf32d3..6165ddcf 100644 --- a/java/krypton/egg-pterodactyl-krypton.json +++ b/java/krypton/egg-pterodactyl-krypton.json @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/bash\r\n#\r\n# Krypton installation script for Pterodactyl\r\n# Created by BomBardyGamer\r\n#\r\n# Server Files: /mnt/server\r\n\r\napt-get update\r\napt-get install -y curl jq unzip\r\n\r\ncd /mnt/server\r\nif [ -z \"${KRYPTON_VERSION}\" ] || [ \"${KRYPTON_VERSION}\" == \"latest\" ]; then\r\n KRYPTON_VERSION=\"lastSuccessfulBuild\"\r\nfi\r\n\r\nBASE_URL=\"https://ci.kryptonmc.org/job/Krypton/${KRYPTON_VERSION}\"\r\nARTIFACT=`curl \"${BASE_URL}/api/json?tree=artifacts%5BrelativePath%5D\" | jq '.artifacts[0].relativePath' | sed 's/\"//g'`\r\n\r\ncurl -o ${SERVER_JAR} ${BASE_URL}/artifact/${ARTIFACT}\r\nunzip ${SERVER_JAR} \"config.conf\"" } diff --git a/java/limbo/egg-limbo.json b/java/limbo/egg-limbo.json index 044d3c69..dcd047d1 100644 --- a/java/limbo/egg-limbo.json +++ b/java/limbo/egg-limbo.json @@ -24,7 +24,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Limbo Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nmkdir -p \/mnt\/server\r\n\r\nLATEST_LIMBO_NAME=$(curl -s https:\/\/ci.loohpjames.com\/job\/Limbo\/lastSuccessfulBuild\/api\/json | jq -r .artifacts[1].displayPath)\r\n\r\ncd \/mnt\/server || exit\r\n\r\nif [ -f \"${SERVER_JARFILE}\" ]; then\r\n\tmv \"${SERVER_JARFILE}\" \"${SERVER_JARFILE}\".old\r\nfi\r\n\r\necho \"Downloading Limbo server jar...\"\r\ncurl -o \"${SERVER_JARFILE}\" https:\/\/ci.loohpjames.com\/job\/Limbo\/lastSuccessfulBuild\/artifact\/target\/$LATEST_LIMBO_NAME\r\n\r\nif [ ! -f server.properties ]; then\r\n echo \"Downloading Limbo server.properties\"\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/LOOHP\/Limbo\/master\/src\/main\/resources\/server.properties\r\nfi", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/limbo/egg-pterodactyl-limbo.json b/java/limbo/egg-pterodactyl-limbo.json index ce447adc..37ea6754 100644 --- a/java/limbo/egg-pterodactyl-limbo.json +++ b/java/limbo/egg-pterodactyl-limbo.json @@ -22,7 +22,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Limbo Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nmkdir -p /mnt/server\r\n\r\nLATEST_LIMBO_NAME=$(curl -s https://ci.loohpjames.com/job/Limbo/lastSuccessfulBuild/api/json | jq -r .artifacts[1].displayPath)\r\n\r\ncd /mnt/server || exit\r\n\r\nif [ -f \"${SERVER_JARFILE}\" ]; then\r\n\tmv \"${SERVER_JARFILE}\" \"${SERVER_JARFILE}\".old\r\nfi\r\n\r\necho \"Downloading Limbo server jar...\"\r\ncurl -o \"${SERVER_JARFILE}\" https://ci.loohpjames.com/job/Limbo/lastSuccessfulBuild/artifact/target/$LATEST_LIMBO_NAME\r\n\r\nif [ ! -f server.properties ]; then\r\n echo \"Downloading Limbo server.properties\"\r\n curl -o server.properties https://raw.githubusercontent.com/LOOHP/Limbo/master/src/main/resources/server.properties\r\nfi" } diff --git a/java/magma/egg-magma.json b/java/magma/egg-magma.json index 59f28844..d02db8ce 100644 --- a/java/magma/egg-magma.json +++ b/java/magma/egg-magma.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/magmamaintained\/Magma-${MC_VERSION}\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/magmamaintained\/Magma-${MC_VERSION}\/releases\")\r\n\r\nif [ -z \"${TAG_VERSION}\" ] || [ \"${TAG_VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_LINK=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url )\r\nelse\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${TAG_VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${TAG_VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_LINK=$(echo ${RELEASES} | jq -r --arg VERSION \"${TAG_VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url')\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_LINK}\" ]; then \r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_LINK}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_LINK}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_LINK}\r\n else \r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\n\r\necho \"Download Link: '${DOWNLOAD_LINK}'\"\r\n\r\n# Check we found a download link\r\n\r\n# Download server.jar\r\necho -e \"running: curl -sSL -o ${SERVER_JARFILE} ${DOWNLOAD_LINK}\"\r\ncurl -sSL -o ${SERVER_JARFILE} -sSL ${DOWNLOAD_LINK}\r\necho -e \"Install Complete\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/java/magma/egg-pterodactyl-magma.json b/java/magma/egg-pterodactyl-magma.json index a75631f8..42fe6412 100644 --- a/java/magma/egg-pterodactyl-magma.json +++ b/java/magma/egg-pterodactyl-magma.json @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/bash\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https://api.github.com/repos/magmamaintained/Magma-${MC_VERSION}/releases/latest\")\r\nRELEASES=$(curl --silent \"https://api.github.com/repos/magmamaintained/Magma-${MC_VERSION}/releases\")\r\n\r\nif [ -z \"${TAG_VERSION}\" ] || [ \"${TAG_VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_LINK=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url )\r\nelse\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${TAG_VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${TAG_VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_LINK=$(echo ${RELEASES} | jq -r --arg VERSION \"${TAG_VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url')\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_LINK}\" ]; then \r\n if curl --output /dev/null --silent --head --fail ${DOWNLOAD_LINK}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_LINK}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_LINK}\r\n else \r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\n\r\necho \"Download Link: '${DOWNLOAD_LINK}'\"\r\n\r\n# Check we found a download link\r\n\r\n# Download server.jar\r\necho -e \"running: curl -sSL -o ${SERVER_JARFILE} ${DOWNLOAD_LINK}\"\r\ncurl -sSL -o ${SERVER_JARFILE} -sSL ${DOWNLOAD_LINK}\r\necho -e \"Install Complete\"" } diff --git a/java/modrinth/egg-modrinth-generic.json b/java/modrinth/egg-modrinth-generic.json index 5c1adc32..5a38ab5d 100644 --- a/java/modrinth/egg-modrinth-generic.json +++ b/java/modrinth/egg-modrinth-generic.json @@ -1,14 +1,15 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PLCN_v1", + "version": "PLCN_v3", "update_url": null }, - "exported_at": "2025-08-10T01:41:42+00:00", + "exported_at": "2025-12-19T20:53:27+00:00", "name": "Modrinth Generic", "author": "contact@chromozone.dev", "uuid": "04befa18-37cf-41e9-b04d-89b3578bba6d", "description": "A generic egg for a Modrinth modpack.", + "image": null, "tags": [], "features": [ "eula", @@ -16,32 +17,34 @@ "pid_limit" ], "docker_images": { - "Java 8": "ghcr.io\/parkervcp\/yolks:java_8", - "Java 11": "ghcr.io\/parkervcp\/yolks:java_11", - "Java 16": "ghcr.io\/parkervcp\/yolks:java_16", - "Java 17": "ghcr.io\/parkervcp\/yolks:java_17", - "Java 21": "ghcr.io\/parkervcp\/yolks:java_21", - "Java 22": "ghcr.io\/parkervcp\/yolks:java_22" + "Java 8": "ghcr.io/parkervcp/yolks:java_8", + "Java 11": "ghcr.io/parkervcp/yolks:java_11", + "Java 16": "ghcr.io/parkervcp/yolks:java_16", + "Java 17": "ghcr.io/parkervcp/yolks:java_17", + "Java 21": "ghcr.io/parkervcp/yolks:java_21", + "Java 22": "ghcr.io/parkervcp/yolks:java_22" }, "file_denylist": [], - "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\")", + "startup_commands": { + "Default": "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.allocations.default.port}}\",\r\n \"query.port\": \"{{server.allocations.default.port}}\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \")! For help, type \"\r\n}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"server-port\": \"{{server.allocations.default.port}}\",\n \"query.port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", "logs": "{}", "stop": "stop" }, "scripts": { "installation": { - "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 chmod -R 755 \"${SERVER_DIR}\/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 chmod -R 755 \"${SERVER_DIR}\/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\nNEOFORGE_INSTALLER_URL=\"https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/\"\r\n\r\nfunction json_download_neoforge {\r\n echo \"Downloading NeoForge...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}\/modrinth.index.json\"\r\n\r\n # Extract Minecraft and NeoForge versions from the manifest\r\n local MC_VERSION=$(jq -r '.dependencies.minecraft \/\/ empty' \"${MANIFEST}\")\r\n local NEOFORGE_VERSION=$(jq -r '.dependencies.neoforge \/\/ empty' \"${MANIFEST}\")\r\n\r\n # Validate extracted versions\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 \"${NEOFORGE_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No NeoForge version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n # Determine the download link and artifact name based on the version\r\n local DOWNLOAD_LINK=\"\"\r\n local ARTIFACT_NAME=\"\"\r\n\r\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\r\n DOWNLOAD_LINK=\"${NEOFORGE_INSTALLER_URL}forge\/${NEOFORGE_VERSION}\/forge-${NEOFORGE_VERSION}-installer.jar\"\r\n ARTIFACT_NAME=\"forge\"\r\n else\r\n DOWNLOAD_LINK=\"${NEOFORGE_INSTALLER_URL}neoforge\/${NEOFORGE_VERSION}\/neoforge-${NEOFORGE_VERSION}-installer.jar\"\r\n ARTIFACT_NAME=\"neoforge\"\r\n fi\r\n\r\n # Download the installer\r\n echo -e \"\\tUsing NeoForge version ${NEOFORGE_VERSION} from ${DOWNLOAD_LINK}\"\r\n if ! wget -q -O neoforge-installer.jar \"${DOWNLOAD_LINK}\"; then\r\n echo -e \"\\tERROR: Failed to download NeoForge installer ${NEOFORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n # Install the server using the installer\r\n echo -e \"\\tInstalling NeoForge Server ${NEOFORGE_VERSION}\"\r\n if ! java -jar neoforge-installer.jar --installServer > \/dev\/null 2>&1; then\r\n echo -e \"\\tERROR: Failed to install NeoForge Server ${NEOFORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n # Create a symlink for the startup arguments\r\n ln -sf libraries\/net\/neoforged\/${ARTIFACT_NAME}\/*\/unix_args.txt unix_args.txt\r\n\r\n # Clean up\r\n rm -f neoforge-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.neoforge' \"${MANIFEST}\") != \"null\" ]]; then\r\n json_download_neoforge\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": "eclipse-temurin:17-jdk", + "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 chmod -R 755 \"${SERVER_DIR}/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 chmod -R 755 \"${SERVER_DIR}/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\nNEOFORGE_INSTALLER_URL=\"https://maven.neoforged.net/releases/net/neoforged/\"\r\n\r\nfunction json_download_neoforge {\r\n echo \"Downloading NeoForge...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}/modrinth.index.json\"\r\n\r\n # Extract Minecraft and NeoForge versions from the manifest\r\n local MC_VERSION=$(jq -r '.dependencies.minecraft // empty' \"${MANIFEST}\")\r\n local NEOFORGE_VERSION=$(jq -r '.dependencies.neoforge // empty' \"${MANIFEST}\")\r\n\r\n # Validate extracted versions\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 \"${NEOFORGE_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No NeoForge version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n # Determine the download link and artifact name based on the version\r\n local DOWNLOAD_LINK=\"\"\r\n local ARTIFACT_NAME=\"\"\r\n\r\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\r\n DOWNLOAD_LINK=\"${NEOFORGE_INSTALLER_URL}forge/${NEOFORGE_VERSION}/forge-${NEOFORGE_VERSION}-installer.jar\"\r\n ARTIFACT_NAME=\"forge\"\r\n else\r\n DOWNLOAD_LINK=\"${NEOFORGE_INSTALLER_URL}neoforge/${NEOFORGE_VERSION}/neoforge-${NEOFORGE_VERSION}-installer.jar\"\r\n ARTIFACT_NAME=\"neoforge\"\r\n fi\r\n\r\n # Download the installer\r\n echo -e \"\\tUsing NeoForge version ${NEOFORGE_VERSION} from ${DOWNLOAD_LINK}\"\r\n if ! wget -q -O neoforge-installer.jar \"${DOWNLOAD_LINK}\"; then\r\n echo -e \"\\tERROR: Failed to download NeoForge installer ${NEOFORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n # Install the server using the installer\r\n echo -e \"\\tInstalling NeoForge Server ${NEOFORGE_VERSION}\"\r\n if ! java -jar neoforge-installer.jar --installServer > /dev/null 2>&1; then\r\n echo -e \"\\tERROR: Failed to install NeoForge Server ${NEOFORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n # Create a symlink for the startup arguments\r\n ln -sf libraries/net/neoforged/${ARTIFACT_NAME}/*/unix_args.txt unix_args.txt\r\n\r\n # Clean up\r\n rm -f neoforge-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.neoforge' \"${MANIFEST}\") != \"null\" ]]; then\r\n json_download_neoforge\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": "ghcr.io/pelican-eggs/installers:java_17", "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", + "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, @@ -55,7 +58,7 @@ }, { "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", + "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, diff --git a/java/modrinth/egg-pterodactyl-modrinth-generic.json b/java/modrinth/egg-pterodactyl-modrinth-generic.json index 683364c8..ffd874c7 100644 --- a/java/modrinth/egg-pterodactyl-modrinth-generic.json +++ b/java/modrinth/egg-pterodactyl-modrinth-generic.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "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 chmod -R 755 \"${SERVER_DIR}\/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 chmod -R 755 \"${SERVER_DIR}\/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": "eclipse-temurin:17-jdk", + "container": "ghcr.io\/pelican-eggs\/installers:java_17", "entrypoint": "bash" } }, diff --git a/java/nanolimbo/egg-nano-limbo.json b/java/nanolimbo/egg-nano-limbo.json index 81dd1089..eb9bf805 100644 --- a/java/nanolimbo/egg-nano-limbo.json +++ b/java/nanolimbo/egg-nano-limbo.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# NanoLimbo Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\napt update\r\napt install -y curl jq git openssl bash bc apt-transport-https gnupg software-properties-common\r\n\r\nif [ -z \"${DOWNLOAD_URL}\" ]; then\r\n GITHUB_PACKAGE=\"Nan1t\/NanoLimbo\"\r\n MATCH=\"NanoLimbo-\"\r\n\r\n ## get release info and download links\r\n LATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\/latest\")\r\n RELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\")\r\n \r\n if [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\n else\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\n fi\r\nelse\r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}.jar; then\r\n echo -e \"Provided download link is valid. Proceeding to download\"\r\n else\r\n echo -e \"Provided download link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\necho \"Downloading server file...\"\r\necho -e \"performing curl -sSL ${DOWNLOAD_URL}\"\r\ncurl -sSL -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f \"settings.yml\" ]; then\r\necho \"Creating settings file...\"\r\ncurl -sSL -o settings.yml https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/nanolimbo\/settings.yml\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/java/nanolimbo/egg-pterodactyl-nano-limbo.json b/java/nanolimbo/egg-pterodactyl-nano-limbo.json index 6e9bd77f..280e372c 100644 --- a/java/nanolimbo/egg-pterodactyl-nano-limbo.json +++ b/java/nanolimbo/egg-pterodactyl-nano-limbo.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/bash\r\n# NanoLimbo Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\napt update\r\napt install -y curl jq git openssl bash bc apt-transport-https gnupg software-properties-common\r\n\r\nif [ -z \"${DOWNLOAD_URL}\" ]; then\r\n GITHUB_PACKAGE=\"Nan1t/NanoLimbo\"\r\n MATCH=\"NanoLimbo-\"\r\n\r\n ## get release info and download links\r\n LATEST_JSON=$(curl --silent \"https://api.github.com/repos/${GITHUB_PACKAGE}/releases/latest\")\r\n RELEASES=$(curl --silent \"https://api.github.com/repos/${GITHUB_PACKAGE}/releases\")\r\n \r\n if [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\n else\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\n fi\r\nelse\r\n if curl --output /dev/null --silent --head --fail ${DOWNLOAD_URL}.jar; then\r\n echo -e \"Provided download link is valid. Proceeding to download\"\r\n else\r\n echo -e \"Provided download link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\nfi\r\n\r\ncd /mnt/server\r\n\r\necho \"Downloading server file...\"\r\necho -e \"performing curl -sSL ${DOWNLOAD_URL}\"\r\ncurl -sSL -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f \"settings.yml\" ]; then\r\necho \"Creating settings file...\"\r\ncurl -sSL -o settings.yml https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/java/nanolimbo/settings.yml\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/neoforge/egg-neo-forge.json b/java/neoforge/egg-neo-forge.json index f01de25c..7fd7136e 100644 --- a/java/neoforge/egg-neo-forge.json +++ b/java/neoforge/egg-neo-forge.json @@ -36,7 +36,7 @@ "scripts": { "installation": { "script": "#!/bin/bash\n# NeoForge Installation Script\n#\n# Server Files: /mnt/server\n\napt-get update\napt-get install -y curl xq openjdk-17-jdk\n\nif [[ ! -d /mnt/server ]]; then\n mkdir /mnt/server\nfi\n\ncd /mnt/server\n\n# Remove spaces from the version number to avoid issues with curl\nNEOFORGE_VERSION=\"$(echo \"$NEOFORGE_VERSION\" | tr -d ' ')\"\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\n\n# If we have a specific NeoForge version set, use that\nif [[ ! -z ${NEOFORGE_VERSION} ]]; then\n # The 1.20.1 release lives in a different repository and is called \"forge\" instead of \"neoforge\"\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\n DOWNLOAD_LINK=https://maven.neoforged.net/releases/net/neoforged/forge/${NEOFORGE_VERSION}/forge-${NEOFORGE_VERSION}\n ARTIFACT_NAME=\"forge\"\n else\n DOWNLOAD_LINK=https://maven.neoforged.net/releases/net/neoforged/neoforge/${NEOFORGE_VERSION}/neoforge-${NEOFORGE_VERSION}\n ARTIFACT_NAME=\"neoforge\"\n fi\nelse\n # For NeoForge, downloading based on a Minecraft version is done by using the Maven metadata.\n # 1.20.1 is also handled differently here, because it's in a different repository and is called\n # \"forge\" instead of \"neoforge\".\n if [[ \"${MC_VERSION}\" == \"1.20.1\" ]]; then\n XML_DATA=$(curl -sSL https://maven.neoforged.net/releases/net/neoforged/forge/maven-metadata.xml)\n ARTIFACT_NAME=\"forge\"\n NEOFORGE_OLD=1\n else\n XML_DATA=$(curl -sSL https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml)\n ARTIFACT_NAME=\"neoforge\"\n fi\n\n REPO_URL=\"https://maven.neoforged.net/releases/net/neoforged/${ARTIFACT_NAME}/\"\n\n # Get the latest version of Minecraft NeoForge supports. Here XML_DATA contains the metadata for\n # the new, \"neoforge\" repository, which is good since 1.20.1 will never be the latest anymore.\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\n echo \"Getting latest version of NeoForge.\"\n MC_VERSION=\"1.$(echo -e ${XML_DATA} | xq -x '/metadata/versioning/release' | cut -d'.' -f1-2)\"\n fi\n\n echo \"Minecraft version: ${MC_VERSION}\"\n\n if [[ -z \"${NEOFORGE_OLD}\" ]]; then\n # For modern artifacts we cut the \"1.\" from the Minecraft version, and search for that\n VERSION_KEY=$(echo -n ${MC_VERSION} | cut -d'.' -f2-)\n else\n # For 1.20.1, it uses the same naming scheme as Forge, so we just append a dash\n VERSION_KEY=\"${MC_VERSION}-\"\n fi\n\n # Then we extract the latest the latest NeoForge version available based on the Maven metadata\n NEOFORGE_VERSION=$(echo -e ${XML_DATA} | xq -x \"(/metadata/versioning/versions/*[starts-with(text(), '${VERSION_KEY}')])\" | tail -n1)\n if [[ -z \"${NEOFORGE_VERSION}\" ]]; then\n echo \"The install failed, because there is no valid version of NeoForge for the version of Minecraft selected.\"\n exit 1\n fi\n\n echo \"NeoForge version: ${NEOFORGE_VERSION}\"\n\n DOWNLOAD_LINK=\"${REPO_URL}${NEOFORGE_VERSION}/${ARTIFACT_NAME}-${NEOFORGE_VERSION}\"\nfi\n\necho \"Downloading NeoForge version ${NEOFORGE_VERSION}\"\necho \"Download link is ${DOWNLOAD_LINK}\"\n\n# Check if the download link we generated is valid\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\n if curl --output /dev/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then\n echo -e \"Installer jar download link is valid.\"\n else\n echo -e \"Link is invalid. Exiting now\"\n exit 2\n fi\nelse\n echo -e \"No download link provided. Exiting now\"\n exit 3\nfi\n\n# If so, go ahead and download the installer\ncurl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar\n\nif [[ ! -f ./installer.jar ]]; then\n echo \"!!! Error downloading NeoForge version ${NEOFORGE_VERSION} !!!\"\n exit 4\nfi\n\n# Delete args to support downgrading/upgrading\nrm -rf libraries/net/neoforged/${ARTIFACT_NAME}\nrm unix_args.txt\n\n# Installing server\necho -e \"Installing NeoForge server.\\n\"\njava -jar installer.jar --installServer || {\n echo -e \"\\nInstall failed using NeoForge version ${NEOFORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.\"\n echo -n \"Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Wings\"\n echo \"config or specify exact allocated memory in the server Build Configuration instead of 0!\"\n echo \"Otherwise, the NeoForge installer will not have enough memory.\";\n exit 5;\n}\n\n# Symlink the startup arguments to the server directory\nln -sf libraries/net/neoforged/${ARTIFACT_NAME}/*/unix_args.txt unix_args.txt\n\n# And finally clean up\necho -e \"Deleting installer.jar file.\\n\"\nrm -rf installer.jar\n\necho \"Installation process is completed!\"", - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io/pelican-eggs/installers:debian", "entrypoint": "bash" } }, diff --git a/java/neoforge/egg-pterodactyl-neo-forge.json b/java/neoforge/egg-pterodactyl-neo-forge.json index 642b97aa..e71671b2 100644 --- a/java/neoforge/egg-pterodactyl-neo-forge.json +++ b/java/neoforge/egg-pterodactyl-neo-forge.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\n# NeoForge Installation Script\n#\n# Server Files: \/mnt\/server\n\napt-get update\napt-get install -y curl xq openjdk-17-jdk\n\nif [[ ! -d \/mnt\/server ]]; then\n mkdir \/mnt\/server\nfi\n\ncd \/mnt\/server\n\n# Remove spaces from the version number to avoid issues with curl\nNEOFORGE_VERSION=\"$(echo \"$NEOFORGE_VERSION\" | tr -d ' ')\"\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\n\n# If we have a specific NeoForge version set, use that\nif [[ ! -z ${NEOFORGE_VERSION} ]]; then\n # The 1.20.1 release lives in a different repository and is called \"forge\" instead of \"neoforge\"\n if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\n DOWNLOAD_LINK=https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/forge\/${NEOFORGE_VERSION}\/forge-${NEOFORGE_VERSION}\n ARTIFACT_NAME=\"forge\"\n else\n DOWNLOAD_LINK=https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/neoforge\/${NEOFORGE_VERSION}\/neoforge-${NEOFORGE_VERSION}\n ARTIFACT_NAME=\"neoforge\"\n fi\nelse\n # For NeoForge, downloading based on a Minecraft version is done by using the Maven metadata.\n # 1.20.1 is also handled differently here, because it's in a different repository and is called\n # \"forge\" instead of \"neoforge\".\n if [[ \"${MC_VERSION}\" == \"1.20.1\" ]]; then\n XML_DATA=$(curl -sSL https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/forge\/maven-metadata.xml)\n ARTIFACT_NAME=\"forge\"\n NEOFORGE_OLD=1\n else\n XML_DATA=$(curl -sSL https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/neoforge\/maven-metadata.xml)\n ARTIFACT_NAME=\"neoforge\"\n fi\n\n REPO_URL=\"https:\/\/maven.neoforged.net\/releases\/net\/neoforged\/${ARTIFACT_NAME}\/\"\n\n # Get the latest version of Minecraft NeoForge supports. Here XML_DATA contains the metadata for\n # the new, \"neoforge\" repository, which is good since 1.20.1 will never be the latest anymore.\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\n echo \"Getting latest version of NeoForge.\"\n MC_VERSION=\"1.$(echo -e ${XML_DATA} | xq -x '\/metadata\/versioning\/release' | cut -d'.' -f1-2)\"\n fi\n\n echo \"Minecraft version: ${MC_VERSION}\"\n\n if [[ -z \"${NEOFORGE_OLD}\" ]]; then\n # For modern artifacts we cut the \"1.\" from the Minecraft version, and search for that\n VERSION_KEY=$(echo -n ${MC_VERSION} | cut -d'.' -f2-)\n else\n # For 1.20.1, it uses the same naming scheme as Forge, so we just append a dash\n VERSION_KEY=\"${MC_VERSION}-\"\n fi\n\n # Then we extract the latest the latest NeoForge version available based on the Maven metadata\n NEOFORGE_VERSION=$(echo -e ${XML_DATA} | xq -x \"(\/metadata\/versioning\/versions\/*[starts-with(text(), '${VERSION_KEY}')])\" | tail -n1)\n if [[ -z \"${NEOFORGE_VERSION}\" ]]; then\n echo \"The install failed, because there is no valid version of NeoForge for the version of Minecraft selected.\"\n exit 1\n fi\n\n echo \"NeoForge version: ${NEOFORGE_VERSION}\"\n\n DOWNLOAD_LINK=\"${REPO_URL}${NEOFORGE_VERSION}\/${ARTIFACT_NAME}-${NEOFORGE_VERSION}\"\nfi\n\necho \"Downloading NeoForge version ${NEOFORGE_VERSION}\"\necho \"Download link is ${DOWNLOAD_LINK}\"\n\n# Check if the download link we generated is valid\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then\n echo -e \"Installer jar download link is valid.\"\n else\n echo -e \"Link is invalid. Exiting now\"\n exit 2\n fi\nelse\n echo -e \"No download link provided. Exiting now\"\n exit 3\nfi\n\n# If so, go ahead and download the installer\ncurl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar\n\nif [[ ! -f .\/installer.jar ]]; then\n echo \"!!! Error downloading NeoForge version ${NEOFORGE_VERSION} !!!\"\n exit 4\nfi\n\n# Delete args to support downgrading\/upgrading\nrm -rf libraries\/net\/neoforged\/${ARTIFACT_NAME}\nrm unix_args.txt\n\n# Installing server\necho -e \"Installing NeoForge server.\\n\"\njava -jar installer.jar --installServer || {\n echo -e \"\\nInstall failed using NeoForge version ${NEOFORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.\"\n echo -n \"Should you be using unlimited memory value of 0, make sure to increase the default install resource limits in the Wings\"\n echo \"config or specify exact allocated memory in the server Build Configuration instead of 0!\"\n echo \"Otherwise, the NeoForge installer will not have enough memory.\";\n exit 5;\n}\n\n# Symlink the startup arguments to the server directory\nln -sf libraries\/net\/neoforged\/${ARTIFACT_NAME}\/*\/unix_args.txt unix_args.txt\n\n# And finally clean up\necho -e \"Deleting installer.jar file.\\n\"\nrm -rf installer.jar\n\necho \"Installation process is completed!\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/java/paper/egg-pterodactyl-paper.json b/java/paper/egg-pterodactyl-paper.json index 5a7624c6..dc7659ef 100644 --- a/java/paper/egg-pterodactyl-paper.json +++ b/java/paper/egg-pterodactyl-paper.json @@ -14,11 +14,11 @@ "pid_limit" ], "docker_images": { - "Java 8": "ghcr.io\/pelican-eggs\/yolks:java_8", - "Java 11": "ghcr.io\/pelican-eggs\/yolks:java_11", - "Java 16": "ghcr.io\/pelican-eggs\/yolks:java_16", - "Java 17": "ghcr.io\/pelican-eggs\/yolks:java_17", - "Java 21": "ghcr.io\/pelican-eggs\/yolks:java_21" + "Java 8": "ghcr.io\/parkervcp\/yolks:java_8", + "Java 11": "ghcr.io\/parkervcp\/yolks:java_11", + "Java 16": "ghcr.io\/parkervcp\/yolks:java_16", + "Java 17": "ghcr.io\/parkervcp\/yolks:java_17", + "Java 21": "ghcr.io\/parkervcp\/yolks:java_21" }, "file_denylist": [], "startup": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}", diff --git a/java/purpur/egg-pterodactyl-purpur.json b/java/purpur/egg-pterodactyl-purpur.json index 91b1cf2e..322b3d59 100644 --- a/java/purpur/egg-pterodactyl-purpur.json +++ b/java/purpur/egg-pterodactyl-purpur.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Paper Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=purpur\r\n\r\nif [ -n \"${DL_PATH}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_PATH}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https:\/\/api.purpurmc.org\/v2\/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep true`\r\n\tLATEST_VERSION=`curl -s https:\/\/api.purpurmc.org\/v2\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\t\r\n\tBUILD_EXISTS=`curl -s https:\/\/api.purpurmc.org\/v2\/${PROJECT}\/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds.all | tostring | contains($BUILD)' | grep true`\r\n\tLATEST_BUILD=`curl -s https:\/\/api.purpurmc.org\/v2\/${PROJECT}\/${MINECRAFT_VERSION} | jq -r '.builds.latest'`\r\n\t\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\t\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\t\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https:\/\/api.purpurmc.org\/v2\/${PROJECT}\/${MINECRAFT_VERSION}\/${BUILD_NUMBER}\/download\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/minecraft\/java\/server.properties\r\nfi", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/purpur/egg-purpur.json b/java/purpur/egg-purpur.json index 7601f550..cb622e30 100644 --- a/java/purpur/egg-purpur.json +++ b/java/purpur/egg-purpur.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Paper Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=purpur\r\n\r\nif [ -n \"${DL_PATH}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_PATH}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https:\/\/api.purpurmc.org\/v2\/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep true`\r\n\tLATEST_VERSION=`curl -s https:\/\/api.purpurmc.org\/v2\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\t\r\n\tBUILD_EXISTS=`curl -s https:\/\/api.purpurmc.org\/v2\/${PROJECT}\/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds.all | tostring | contains($BUILD)' | grep true`\r\n\tLATEST_BUILD=`curl -s https:\/\/api.purpurmc.org\/v2\/${PROJECT}\/${MINECRAFT_VERSION} | jq -r '.builds.latest'`\r\n\t\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\t\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\t\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https:\/\/api.purpurmc.org\/v2\/${PROJECT}\/${MINECRAFT_VERSION}\/${BUILD_NUMBER}\/download\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/minecraft\/java\/server.properties\r\nfi", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/quilt/egg-pterodactyl-quilt.json b/java/quilt/egg-pterodactyl-quilt.json index 06c5fc98..b2cf2ebd 100644 --- a/java/quilt/egg-pterodactyl-quilt.json +++ b/java/quilt/egg-pterodactyl-quilt.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "eclipse-temurin:18-jdk-jammy", + "container": "ghcr.io\/pelican-eggs\/installers:java_21", "entrypoint": "bash", "script": "#!/bin/bash\r\n# Quilt Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y wget\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nwget -O quilt.jar https://quiltmc.org/api/v1/download-latest-installer/java-universal\r\njava -jar quilt.jar \\\r\n install server $MC_VERSION \\\r\n --download-server\r\ncd /mnt/server/server\r\nmv * /mnt/server\r\ncd ..\r\nrm quilt.jar\r\nrmdir /mnt/server/server\r\nmv server.jar minecraft.jar\r\nmv quilt-server-launch.jar server.jar\r\necho \"serverJar=minecraft.jar\" \u003e quilt-server-launcher.properties\r\necho -e \"Server is Ready!\"" } diff --git a/java/quilt/egg-quilt.json b/java/quilt/egg-quilt.json index 5d6192d5..91dd1ac8 100644 --- a/java/quilt/egg-quilt.json +++ b/java/quilt/egg-quilt.json @@ -1,34 +1,38 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PTDL_v2", + "version": "PLCN_v3", "update_url": null }, - "exported_at": "2024-06-01T19:39:59+00:00", + "exported_at": "2025-12-19T20:56:18+00:00", "name": "Quilt", "author": "diedyesterdaywashere@gmail.com", "uuid": "dff33655-6e6a-4430-accf-e5aea04c2912", "description": "The Quilt project is an open-source, community-driven modding toolchain designed primarily for Minecraft. By focusing on speed, ease of use and modularity, Quilt aims to provide a sleek and modern modding toolchain with an open ecosystem.", + "image": null, + "tags": [], "features": null, "docker_images": { - "Java 17": "ghcr.io\/pterodactyl\/yolks:java_17", - "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 18": "ghcr.io\/pterodactyl\/yolks:java_18" + "Java 17": "ghcr.io/pterodactyl/yolks:java_17", + "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 18": "ghcr.io/pterodactyl/yolks:java_18" }, "file_denylist": [], - "startup": "java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}} nogui", + "startup_commands": { + "Default": "java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}} nogui" + }, "config": { - "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-ip\": \"0.0.0.0\",\r\n \"enable-query\": \"true\",\r\n \"server-port\": \"{{server.build.default.port}}\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \")! For help, type \",\r\n \"userInteraction\": [\r\n \"Go to eula.txt for more info.\"\r\n ]\r\n}", - "logs": "{\r\n \"custom\": false,\r\n \"location\": \"logs\/latest.log\"\r\n}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"enable-query\": \"true\",\n \"server-port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \",\n \"userInteraction\": [\n \"Go to eula.txt for more info.\"\n ]\n}", + "logs": "{\n \"custom\": false,\n \"location\": \"logs\\/latest.log\"\n}", "stop": "stop" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Quilt Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y wget\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nwget -O quilt.jar https:\/\/quiltmc.org\/api\/v1\/download-latest-installer\/java-universal\r\njava -jar quilt.jar \\\r\n install server $MC_VERSION \\\r\n --download-server\r\ncd \/mnt\/server\/server\r\nmv * \/mnt\/server\r\ncd ..\r\nrm quilt.jar\r\nrmdir \/mnt\/server\/server\r\nmv server.jar minecraft.jar\r\nmv quilt-server-launch.jar server.jar\r\necho \"serverJar=minecraft.jar\" > quilt-server-launcher.properties\r\necho -e \"Server is Ready!\"", - "container": "eclipse-temurin:18-jdk-jammy", + "script": "#!/bin/bash\r\n# Quilt Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y wget\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\nwget -O quilt.jar https://quiltmc.org/api/v1/download-latest-installer/java-universal\r\njava -jar quilt.jar \\\r\n install server $MC_VERSION \\\r\n --download-server\r\ncd /mnt/server/server\r\nmv * /mnt/server\r\ncd ..\r\nrm quilt.jar\r\nrmdir /mnt/server/server\r\nmv server.jar minecraft.jar\r\nmv quilt-server-launch.jar server.jar\r\necho \"serverJar=minecraft.jar\" > quilt-server-launcher.properties\r\necho -e \"Server is Ready!\"", + "container": "ghcr.io/pelican-eggs/installers:java_21", "entrypoint": "bash" } }, @@ -40,9 +44,12 @@ "default_value": "1.20.2", "user_viewable": true, "user_editable": true, - "rules": "required|string|between:3,15", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "string", + "between:3,15" + ], + "sort": null }, { "name": "Server Jar File", @@ -51,9 +58,11 @@ "default_value": "server.jar", "user_viewable": true, "user_editable": true, - "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", - "sort": null, - "field_type": "text" + "rules": [ + "required", + "regex:/^([\\w\\d._-]+)(\\.jar)$/" + ], + "sort": null } ] } \ No newline at end of file diff --git a/java/spigot/egg-pterodactyl-spigot.json b/java/spigot/egg-pterodactyl-spigot.json index 985dae59..829c3c3a 100644 --- a/java/spigot/egg-pterodactyl-spigot.json +++ b/java/spigot/egg-pterodactyl-spigot.json @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/bash\r\n# Spigot Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\nmkdir -p /usr/share/man/man1\r\n\r\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] \u0026\u0026 echo \"x64\" || echo \"aarch64\")\r\n \r\nfunction install_java() {\r\n echo \"ARCH: ${ARCH}\\nDownload URl: $1\"\r\n curl -L $1 -o java.tar.gz\r\n tar xzf java.tar.gz\r\n export PATH=$PWD/$2/bin:$PATH\r\n java -version\r\n}\r\n\r\nfunction build_spigot()\r\n{\r\n java -Xms$1M -jar BuildTools.jar --rev ${DL_VERSION} || { echo -e \"\\n install failed! Attempted to install ${DL_VERSION} with memory of ${SERVER_MEMORY} and Java version of:\"; java -version; exit 1; }\r\n}\r\n\r\n# Detect the required Java version for building Spigot. Currently temurin only provides archives of their releases, and adoptopenjdk is deprecated. Update this when packages are released.\r\nif [[ $DL_VERSION =~ ^1\\.(20.5|20.6) || $DL_VERSION == \"latest\" ]]; then\r\n install_java \"https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.3%2B9/OpenJDK21U-jdk_x64_linux_hotspot_21.0.3_9.tar.gz\" jdk-21.0.3+9\r\nelif [[ $DL_VERSION =~ ^1\\.(18|19|20|20.1|20.2|20.3|20.4) ]]; then\r\n install_java \"https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_x64_linux_hotspot_17.0.1_12.tar.gz\" jdk-17.0.1+12\r\nelif [[ $DL_VERSION =~ ^1\\.(17) ]]; then\r\n install_java \"https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_x64_linux_hotspot_16.0.2_7.tar.gz\" jdk-16.0.2+7\r\nelse\r\n install_java \"https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_x64_linux_hotspot_8u312b07.tar.gz\" jdk8u312-b07\r\nfi\r\n\r\n\r\n## Only download if a path is provided, otherwise continue.\r\nif [ ! -z \"${DL_PATH}\" ]; then\r\n cd /mnt/server\r\n MODIFIED_DOWNLOAD=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\r\n echo -e \"Using custom provided download link ${MODIFIED_DOWNLOAD}\"\r\n curl -L ${MODIFIED_DOWNLOAD} -o ${SERVER_JARFILE}\r\nelse\r\n mkdir -p /srv/\r\n cd /srv/\r\n curl -L https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar -o BuildTools.jar\r\n\r\n # Force the minimum Wings install container memory should someone provide less or 0 as it will break the Java build process\r\n if [ $SERVER_MEMORY -lt 1024 ]; then\r\n echo -e \"Do not use 0 for memory with Java applications. Defaulting to 1024MB.\\n WARNING! 1024MB might not be enough to build 1.17+ releases.\"\r\n SERVER_MEMORY=1024\r\n build_spigot ${SERVER_MEMORY}\r\n else\r\n build_spigot ${SERVER_MEMORY}\r\n fi\r\n mv spigot-*.jar /mnt/server/${SERVER_JARFILE}\r\nfi\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/spigot/egg-spigot.json b/java/spigot/egg-spigot.json index 2ec5911e..bbcb2bbb 100644 --- a/java/spigot/egg-spigot.json +++ b/java/spigot/egg-spigot.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# Spigot Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\nmkdir -p \/usr\/share\/man\/man1\r\n\r\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && echo \"x64\" || echo \"aarch64\")\r\n \r\nfunction install_java() {\r\n echo \"ARCH: ${ARCH}\\nDownload URl: $1\"\r\n curl -L $1 -o java.tar.gz\r\n tar xzf java.tar.gz\r\n export PATH=$PWD\/$2\/bin:$PATH\r\n java -version\r\n}\r\n\r\nfunction build_spigot()\r\n{\r\n java -Xms$1M -jar BuildTools.jar --rev ${DL_VERSION} || { echo -e \"\\n install failed! Attempted to install ${DL_VERSION} with memory of ${SERVER_MEMORY} and Java version of:\"; java -version; exit 1; }\r\n}\r\n\r\n# Detect the required Java version for building Spigot. Currently temurin only provides archives of their releases, and adoptopenjdk is deprecated. Update this when packages are released.\r\nif [[ $DL_VERSION =~ ^1\\.(20.5|20.6) || $DL_VERSION == \"latest\" ]]; then\r\n install_java \"https:\/\/github.com\/adoptium\/temurin21-binaries\/releases\/download\/jdk-21.0.3%2B9\/OpenJDK21U-jdk_x64_linux_hotspot_21.0.3_9.tar.gz\" jdk-21.0.3+9\r\nelif [[ $DL_VERSION =~ ^1\\.(18|19|20|20.1|20.2|20.3|20.4) ]]; then\r\n install_java \"https:\/\/github.com\/adoptium\/temurin17-binaries\/releases\/download\/jdk-17.0.1%2B12\/OpenJDK17U-jdk_x64_linux_hotspot_17.0.1_12.tar.gz\" jdk-17.0.1+12\r\nelif [[ $DL_VERSION =~ ^1\\.(17) ]]; then\r\n install_java \"https:\/\/github.com\/adoptium\/temurin16-binaries\/releases\/download\/jdk-16.0.2%2B7\/OpenJDK16U-jdk_x64_linux_hotspot_16.0.2_7.tar.gz\" jdk-16.0.2+7\r\nelse\r\n install_java \"https:\/\/github.com\/adoptium\/temurin8-binaries\/releases\/download\/jdk8u312-b07\/OpenJDK8U-jdk_x64_linux_hotspot_8u312b07.tar.gz\" jdk8u312-b07\r\nfi\r\n\r\n\r\n## Only download if a path is provided, otherwise continue.\r\nif [ ! -z \"${DL_PATH}\" ]; then\r\n cd \/mnt\/server\r\n MODIFIED_DOWNLOAD=`eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g')`\r\n echo -e \"Using custom provided download link ${MODIFIED_DOWNLOAD}\"\r\n curl -L ${MODIFIED_DOWNLOAD} -o ${SERVER_JARFILE}\r\nelse\r\n mkdir -p \/srv\/\r\n cd \/srv\/\r\n curl -L https:\/\/hub.spigotmc.org\/jenkins\/job\/BuildTools\/lastSuccessfulBuild\/artifact\/target\/BuildTools.jar -o BuildTools.jar\r\n\r\n # Force the minimum Wings install container memory should someone provide less or 0 as it will break the Java build process\r\n if [ $SERVER_MEMORY -lt 1024 ]; then\r\n echo -e \"Do not use 0 for memory with Java applications. Defaulting to 1024MB.\\n WARNING! 1024MB might not be enough to build 1.17+ releases.\"\r\n SERVER_MEMORY=1024\r\n build_spigot ${SERVER_MEMORY}\r\n else\r\n build_spigot ${SERVER_MEMORY}\r\n fi\r\n mv spigot-*.jar \/mnt\/server\/${SERVER_JARFILE}\r\nfi\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/java/spongeforge/egg-pterodactyl-sponge-forge.json b/java/spongeforge/egg-pterodactyl-sponge-forge.json index 6893e76f..5fcf4efa 100644 --- a/java/spongeforge/egg-pterodactyl-sponge-forge.json +++ b/java/spongeforge/egg-pterodactyl-sponge-forge.json @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "container": "openjdk:8-jre-slim", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "bash", "script": "#!/bin/bash\r\n# SpongeForge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y jq curl\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\n#Function to Compare Strings in Dot-Separated Version Format (can comapre Versions with unequal lengths)\r\n#returns 1 if version 1 is less than version 2, and 0 if version 1 is greater than version 2\r\nvercomp() {\r\n if [[ $1 == $2 ]]\r\n then\r\n return 1\r\n fi\r\n local IFS=.\r\n local i ver1=($1) ver2=($2)\r\n # fill empty fields in ver1 with zeros\r\n for ((i=${#ver1[@]}; i\u003c${#ver2[@]}; i++))\r\n do\r\n ver1[i]=0\r\n done\r\n for ((i=0; i\u003c${#ver1[@]}; i++))\r\n do\r\n if [[ -z ${ver2[i]} ]]\r\n then\r\n # fill empty fields in ver2 with zeros\r\n ver2[i]=0\r\n fi\r\n if ((10#${ver1[i]} \u003e 10#${ver2[i]}))\r\n then\r\n return 0\r\n fi\r\n if ((10#${ver1[i]} \u003c 10#${ver2[i]}))\r\n then\r\n return 1\r\n fi\r\n done\r\n return 1\r\n}\r\n\r\n# Remove spaces from the version number to avoid issues with curl\r\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\r\n\r\n#Adding .jar when not ending by SERVER_JARFILE\r\nif [[ ! ${SERVER_JARFILE} = *\\.jar ]]; then\r\n SERVER_JARFILE=\"${SERVER_JARFILE}.jar\"\r\nfi\r\n\r\n\r\nif [ -z ${SF_VERSION} ] || [ \"$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/${SF_VERSION})\" == \"Unknown version\" ]; then\r\n echo -e \"defaulting to recommended\"\r\n SF_VERSION=\"recommended\"\r\nfi\r\n\r\nif [ \"${SF_VERSION}\" == \"recommended\" ]; then\r\n echo -e \"using recommended SpongeForge version\"\r\n SF_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/recommended | jq -r '.version')\r\n echo -e \"found SpongeForge Version ${SF_VERSION}\"\r\n SF_DL_LINK=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/recommended | jq -r '.artifacts.\"\".url')\r\n FORGE_DOWNLOAD_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/recommended | jq -r '.dependencies.forge')\r\n echo -e \"found Forge Version ${FORGE_DOWNLOAD_VERSION}\"\r\n MC_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/${SF_VERSION} | jq -r '.dependencies.minecraft')\r\nelif [ \"${SF_VERSION}\" == \"latest\" ]; then\r\n echo -e \"using latest SpongForge version\"\r\n SF_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge | jq -r '.buildTypes.stable.latest.version')\r\n echo -e \"found SpongeForge Version ${SF_VERSION}\"\r\n SF_DL_LINK=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/${SF_VERSION} | jq -r '.artifacts.\"\".url')\r\n FORGE_DOWNLOAD_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/${SF_VERSION} | jq -r '.dependencies.forge')\r\n MC_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/${SF_VERSION} | jq -r '.dependencies.minecraft')\r\nelse\r\n echo -e \"found SpongeForge Version ${SF_VERSION}\"\r\n SF_DL_LINK=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/${SF_VERSION} | jq -r '.artifacts.\"\".url')\r\n FORGE_DOWNLOAD_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/${SF_VERSION} | jq -r '.dependencies.forge')\r\n echo -e \"found Forge Version ${FORGE_DOWNLOAD_VERSION}\"\r\n MC_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads/${SF_VERSION} | jq -r '.dependencies.minecraft')\r\nfi\r\n\r\nif [[ ! -z ${FORGE_VERSION} ]]; then\r\n if curl --output /dev/null --silent --head --fail https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}-installer.jar; then\r\n echo -e \"Custom Forge Version found.\"\r\n if [ ${MC_VERSION} != ${FORGE_VERSION%%-*} ]; then\r\n echo -e \"You need Forge Minecraft Version ${MC_VERSION}. Exiting now!\"\r\n exit 1\r\n elif vercomp ${FORGE_DOWNLOAD_VERSION} ${FORGE_VERSION##*-}; then\r\n echo -e \"Forge Build Version must be greater than ${FORGE_DOWNLOAD_VERSION}. Exiting now!\"\r\n exit 1\r\n else\r\n FORGE_DOWNLOAD_VERSION=${FORGE_VERSION##*-}\r\n fi\r\n else\r\n echo -e \"Forge Version not found. Check if Version is spelled right. Exiting now!\"\r\n exit 1\r\n fi\r\nfi\r\n\r\nFORGE_DL_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${MC_VERSION}-${FORGE_DOWNLOAD_VERSION}/forge-${MC_VERSION}-${FORGE_DOWNLOAD_VERSION}\r\n\r\nif [ -f server.jar ] \u0026\u0026 [ $(sha1sum server.jar | awk '{ print $1 }') == $(curl -s ${FORGE_DL_LINK}-universal.jar.sha1) ]; then\r\n echo -e \"Already have the correct forge version\"\r\nelse\r\n echo -e \"Downloading forge version ${MC_VERSION} - ${FORGE_DOWNLOAD_VERSION}\"\r\n echo -e \"running: curl -s -o installer.jar -o ${FORGE_DL_LINK}-installer.jar\"\r\n curl -s -o installer.jar ${FORGE_DL_LINK}-installer.jar\r\n echo -e \"running: curl -s -o ${SERVER_JARFILE} -o ${FORGE_DL_LINK}-universal.jar\"\r\n curl -s -o ${SERVER_JARFILE} ${FORGE_DL_LINK}-universal.jar\r\n java -jar installer.jar --installServer\r\n rm installer.jar forge-${MC_VERSION}-${FORGE_DOWNLOAD_VERSION}-universal.jar forge-${MC_VERSION}-${FORGE_DOWNLOAD_VERSION}.jar\r\nfi\r\n\r\nif [ ! -d /mnt/server/mods/ ]; then\r\n echo -e \"making mods directory\"\r\n mkdir -p /mnt/server/mods/\r\nfi\r\n\r\nif [ -f /mnt/server/mods/spongeforge*.jar ]; then\r\n mkdir -p /mnt/server/mods/old/\r\n mv -f /mnt/server/mods/spongeforge*.jar /mnt/server/mods/old/spongeforge*.jar\r\nfi \r\n\r\necho -e \"running: curl -s ${SF_DL_LINK} -o /mnt/server/mods/spongeforge-${SF_VERSION}.jar\"\r\ncurl -s ${SF_DL_LINK} -o /mnt/server/mods/spongeforge-${SF_VERSION}.jar\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/java/server.properties\r\nfi\r\n\r\necho -e \"Install for SpongeForge is complete\"" } diff --git a/java/spongeforge/egg-sponge-forge.json b/java/spongeforge/egg-sponge-forge.json index fcd7d3c3..b1283d44 100644 --- a/java/spongeforge/egg-sponge-forge.json +++ b/java/spongeforge/egg-sponge-forge.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# SpongeForge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y jq curl\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n#Function to Compare Strings in Dot-Separated Version Format (can comapre Versions with unequal lengths)\r\n#returns 1 if version 1 is less than version 2, and 0 if version 1 is greater than version 2\r\nvercomp() {\r\n if [[ $1 == $2 ]]\r\n then\r\n return 1\r\n fi\r\n local IFS=.\r\n local i ver1=($1) ver2=($2)\r\n # fill empty fields in ver1 with zeros\r\n for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))\r\n do\r\n ver1[i]=0\r\n done\r\n for ((i=0; i<${#ver1[@]}; i++))\r\n do\r\n if [[ -z ${ver2[i]} ]]\r\n then\r\n # fill empty fields in ver2 with zeros\r\n ver2[i]=0\r\n fi\r\n if ((10#${ver1[i]} > 10#${ver2[i]}))\r\n then\r\n return 0\r\n fi\r\n if ((10#${ver1[i]} < 10#${ver2[i]}))\r\n then\r\n return 1\r\n fi\r\n done\r\n return 1\r\n}\r\n\r\n# Remove spaces from the version number to avoid issues with curl\r\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\r\n\r\n#Adding .jar when not ending by SERVER_JARFILE\r\nif [[ ! ${SERVER_JARFILE} = *\\.jar ]]; then\r\n SERVER_JARFILE=\"${SERVER_JARFILE}.jar\"\r\nfi\r\n\r\n\r\nif [ -z ${SF_VERSION} ] || [ \"$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/${SF_VERSION})\" == \"Unknown version\" ]; then\r\n echo -e \"defaulting to recommended\"\r\n SF_VERSION=\"recommended\"\r\nfi\r\n\r\nif [ \"${SF_VERSION}\" == \"recommended\" ]; then\r\n echo -e \"using recommended SpongeForge version\"\r\n SF_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/recommended | jq -r '.version')\r\n echo -e \"found SpongeForge Version ${SF_VERSION}\"\r\n SF_DL_LINK=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/recommended | jq -r '.artifacts.\"\".url')\r\n FORGE_DOWNLOAD_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/recommended | jq -r '.dependencies.forge')\r\n echo -e \"found Forge Version ${FORGE_DOWNLOAD_VERSION}\"\r\n MC_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/${SF_VERSION} | jq -r '.dependencies.minecraft')\r\nelif [ \"${SF_VERSION}\" == \"latest\" ]; then\r\n echo -e \"using latest SpongForge version\"\r\n SF_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge | jq -r '.buildTypes.stable.latest.version')\r\n echo -e \"found SpongeForge Version ${SF_VERSION}\"\r\n SF_DL_LINK=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/${SF_VERSION} | jq -r '.artifacts.\"\".url')\r\n FORGE_DOWNLOAD_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/${SF_VERSION} | jq -r '.dependencies.forge')\r\n MC_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/${SF_VERSION} | jq -r '.dependencies.minecraft')\r\nelse\r\n echo -e \"found SpongeForge Version ${SF_VERSION}\"\r\n SF_DL_LINK=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/${SF_VERSION} | jq -r '.artifacts.\"\".url')\r\n FORGE_DOWNLOAD_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/${SF_VERSION} | jq -r '.dependencies.forge')\r\n echo -e \"found Forge Version ${FORGE_DOWNLOAD_VERSION}\"\r\n MC_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongeforge\/downloads\/${SF_VERSION} | jq -r '.dependencies.minecraft')\r\nfi\r\n\r\nif [[ ! -z ${FORGE_VERSION} ]]; then\r\n if curl --output \/dev\/null --silent --head --fail https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/${FORGE_VERSION}\/forge-${FORGE_VERSION}-installer.jar; then\r\n echo -e \"Custom Forge Version found.\"\r\n if [ ${MC_VERSION} != ${FORGE_VERSION%%-*} ]; then\r\n echo -e \"You need Forge Minecraft Version ${MC_VERSION}. Exiting now!\"\r\n exit 1\r\n elif vercomp ${FORGE_DOWNLOAD_VERSION} ${FORGE_VERSION##*-}; then\r\n echo -e \"Forge Build Version must be greater than ${FORGE_DOWNLOAD_VERSION}. Exiting now!\"\r\n exit 1\r\n else\r\n FORGE_DOWNLOAD_VERSION=${FORGE_VERSION##*-}\r\n fi\r\n else\r\n echo -e \"Forge Version not found. Check if Version is spelled right. Exiting now!\"\r\n exit 1\r\n fi\r\nfi\r\n\r\nFORGE_DL_LINK=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/${MC_VERSION}-${FORGE_DOWNLOAD_VERSION}\/forge-${MC_VERSION}-${FORGE_DOWNLOAD_VERSION}\r\n\r\nif [ -f server.jar ] && [ $(sha1sum server.jar | awk '{ print $1 }') == $(curl -s ${FORGE_DL_LINK}-universal.jar.sha1) ]; then\r\n echo -e \"Already have the correct forge version\"\r\nelse\r\n echo -e \"Downloading forge version ${MC_VERSION} - ${FORGE_DOWNLOAD_VERSION}\"\r\n echo -e \"running: curl -s -o installer.jar -o ${FORGE_DL_LINK}-installer.jar\"\r\n curl -s -o installer.jar ${FORGE_DL_LINK}-installer.jar\r\n echo -e \"running: curl -s -o ${SERVER_JARFILE} -o ${FORGE_DL_LINK}-universal.jar\"\r\n curl -s -o ${SERVER_JARFILE} ${FORGE_DL_LINK}-universal.jar\r\n java -jar installer.jar --installServer\r\n rm installer.jar forge-${MC_VERSION}-${FORGE_DOWNLOAD_VERSION}-universal.jar forge-${MC_VERSION}-${FORGE_DOWNLOAD_VERSION}.jar\r\nfi\r\n\r\nif [ ! -d \/mnt\/server\/mods\/ ]; then\r\n echo -e \"making mods directory\"\r\n mkdir -p \/mnt\/server\/mods\/\r\nfi\r\n\r\nif [ -f \/mnt\/server\/mods\/spongeforge*.jar ]; then\r\n mkdir -p \/mnt\/server\/mods\/old\/\r\n mv -f \/mnt\/server\/mods\/spongeforge*.jar \/mnt\/server\/mods\/old\/spongeforge*.jar\r\nfi \r\n\r\necho -e \"running: curl -s ${SF_DL_LINK} -o \/mnt\/server\/mods\/spongeforge-${SF_VERSION}.jar\"\r\ncurl -s ${SF_DL_LINK} -o \/mnt\/server\/mods\/spongeforge-${SF_VERSION}.jar\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/server.properties\r\nfi\r\n\r\necho -e \"Install for SpongeForge is complete\"", - "container": "openjdk:8-jre-slim", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "bash" } }, diff --git a/java/spongevanilla/egg-pterodactyl-sponge-vanilla.json b/java/spongevanilla/egg-pterodactyl-sponge-vanilla.json index db1474d4..13766d2c 100644 --- a/java/spongevanilla/egg-pterodactyl-sponge-vanilla.json +++ b/java/spongevanilla/egg-pterodactyl-sponge-vanilla.json @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/bash\r\n# spongeVanilla Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y jq curl\r\n\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\n#Adding .jar when not eding by SERVER_JARFILE\r\nif [[ ! ${SERVER_JARFILE} = *\\.jar ]]; then\r\n SERVER_JARFILE=\"${SERVER_JARFILE}.jar\"\r\nfi\r\n\r\n## check spongevanilla version and default to recommended if it's invalid\r\nif [ -z ${SV_VERSION} ] || [ \"$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongevanilla/downloads/${SV_VERSION})\" == \"Unknown version\" ]; then\r\n echo -e \"defaulting to recommended\"\r\n SV_VERSION=\"recommended\"\r\nfi\r\n\r\n## handle getting download linsk for sponge\r\nif [ \"${SV_VERSION}\" == \"recommended\" ]; then\r\n echo -e \"using recommended spongevanilla version\"\r\n SV_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongevanilla/downloads/recommended | jq -r '.version')\r\n echo -e \"found spongevanilla Version ${SV_VERSION}\"\r\n SV_DL_LINK=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongevanilla/downloads/recommended | jq -r '.artifacts.\"\".url')\r\nelif [ \"${SV_VERSION}\" == \"latest\" ]; then\r\n echo -e \"using latest SpongForge version\"\r\n SV_VERSION=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongevanilla | jq -r '.buildTypes.stable.latest.version')\r\n echo -e \"found spongevanilla Version ${SV_VERSION}\"\r\nelse\r\n echo -e \"found spongevanilla Version ${SV_VERSION}\"\r\n SV_DL_LINK=$(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongevanilla/downloads/${SV_VERSION} | jq -r '.artifacts.\"\".url')\r\nfi\r\n\r\nif [ -f ${SERVER_JARFILE} ] \u0026\u0026 [ $(sha1sum server.jar | awk '{ print $1 }') == $(curl -s https://dl-api.spongepowered.org/v1/org.spongepowered/spongevanilla/downloads/recommended | jq -r '.artifacts.\"\".sha1') ]; then\r\n echo -e \"Already have the correct spongevanilla version\"\r\nelse\r\n echo -e \"Downloading spongevanilla version ${SV_VERSION}\"\r\n echo -e \"running: curl -s ${SV_DL_LINK} -o /mnt/server/mods/spongevanilla-${SV_VERSION}.jar\"\r\n curl -s ${SV_DL_LINK} -o /mnt/server/${SERVER_JARFILE}\r\nfi\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -s -o server.properties https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/java/server.properties\r\nfi\r\n\r\necho -e \"Install for spongevanilla is complete\"" } diff --git a/java/spongevanilla/egg-sponge-vanilla.json b/java/spongevanilla/egg-sponge-vanilla.json index 5b7c5357..3e864f52 100644 --- a/java/spongevanilla/egg-sponge-vanilla.json +++ b/java/spongevanilla/egg-sponge-vanilla.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# spongeVanilla Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y jq curl\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n#Adding .jar when not eding by SERVER_JARFILE\r\nif [[ ! ${SERVER_JARFILE} = *\\.jar ]]; then\r\n SERVER_JARFILE=\"${SERVER_JARFILE}.jar\"\r\nfi\r\n\r\n## check spongevanilla version and default to recommended if it's invalid\r\nif [ -z ${SV_VERSION} ] || [ \"$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/${SV_VERSION})\" == \"Unknown version\" ]; then\r\n echo -e \"defaulting to recommended\"\r\n SV_VERSION=\"recommended\"\r\nfi\r\n\r\n## handle getting download linsk for sponge\r\nif [ \"${SV_VERSION}\" == \"recommended\" ]; then\r\n echo -e \"using recommended spongevanilla version\"\r\n SV_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/recommended | jq -r '.version')\r\n echo -e \"found spongevanilla Version ${SV_VERSION}\"\r\n SV_DL_LINK=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/recommended | jq -r '.artifacts.\"\".url')\r\nelif [ \"${SV_VERSION}\" == \"latest\" ]; then\r\n echo -e \"using latest SpongForge version\"\r\n SV_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla | jq -r '.buildTypes.stable.latest.version')\r\n echo -e \"found spongevanilla Version ${SV_VERSION}\"\r\nelse\r\n echo -e \"found spongevanilla Version ${SV_VERSION}\"\r\n SV_DL_LINK=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/${SV_VERSION} | jq -r '.artifacts.\"\".url')\r\nfi\r\n\r\nif [ -f ${SERVER_JARFILE} ] && [ $(sha1sum server.jar | awk '{ print $1 }') == $(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/recommended | jq -r '.artifacts.\"\".sha1') ]; then\r\n echo -e \"Already have the correct spongevanilla version\"\r\nelse\r\n echo -e \"Downloading spongevanilla version ${SV_VERSION}\"\r\n echo -e \"running: curl -s ${SV_DL_LINK} -o \/mnt\/server\/mods\/spongevanilla-${SV_VERSION}.jar\"\r\n curl -s ${SV_DL_LINK} -o \/mnt\/server\/${SERVER_JARFILE}\r\nfi\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -s -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/server.properties\r\nfi\r\n\r\necho -e \"Install for spongevanilla is complete\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/java/technic/Tekkit-2/egg-pterodactyl-tekkit2.json b/java/technic/Tekkit-2/egg-pterodactyl-tekkit2.json index 8aa4ca2a..3651297b 100644 --- a/java/technic/Tekkit-2/egg-pterodactyl-tekkit2.json +++ b/java/technic/Tekkit-2/egg-pterodactyl-tekkit2.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/ash\r\n# Tekkit Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt -y install curl zip unzip\r\n\r\nmkdir -p /mnt/server\r\n\r\ncd /mnt/server\r\n\r\ncurl -sSL https://servers.technicpack.net/Technic/servers/tekkit-2/Tekkit-2_Server_$MODPACK_VERSION.zip -o Tekkit-2_Server_$MODPACK_VERSION.zip\r\n\r\nunzip -o Tekkit-2_Server_$MODPACK_VERSION.zip\r\n\r\nrm -rf Tekkit-2_Server_$MODPACK_VERSION.zip\r\n\r\nrm RestoreBackup.bat\r\n\r\nrm LaunchServer.bat\r\n\r\nrm LaunchServer.sh\r\n\r\nrm RestoreBackup.sh\r\n\r\nmv forge-1.12.2-*.jar forge.jar\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/java/server.properties\r\nfi\r\n\r\necho \"done\"" } diff --git a/java/technic/Tekkit-2/egg-tekkit2.json b/java/technic/Tekkit-2/egg-tekkit2.json index 2066b19b..f4336f58 100644 --- a/java/technic/Tekkit-2/egg-tekkit2.json +++ b/java/technic/Tekkit-2/egg-tekkit2.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Tekkit Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt -y install curl zip unzip\r\n\r\nmkdir -p \/mnt\/server\r\n\r\ncd \/mnt\/server\r\n\r\ncurl -sSL https:\/\/servers.technicpack.net\/Technic\/servers\/tekkit-2\/Tekkit-2_Server_$MODPACK_VERSION.zip -o Tekkit-2_Server_$MODPACK_VERSION.zip\r\n\r\nunzip -o Tekkit-2_Server_$MODPACK_VERSION.zip\r\n\r\nrm -rf Tekkit-2_Server_$MODPACK_VERSION.zip\r\n\r\nrm RestoreBackup.bat\r\n\r\nrm LaunchServer.bat\r\n\r\nrm LaunchServer.sh\r\n\r\nrm RestoreBackup.sh\r\n\r\nmv forge-1.12.2-*.jar forge.jar\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/server.properties\r\nfi\r\n\r\necho \"done\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/java/technic/Tekkit/egg-pterodactyl-tekkit.json b/java/technic/Tekkit/egg-pterodactyl-tekkit.json index 6f30f70b..c97343a2 100644 --- a/java/technic/Tekkit/egg-pterodactyl-tekkit.json +++ b/java/technic/Tekkit/egg-pterodactyl-tekkit.json @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\ncd /mnt/server\r\n\r\ncurl -sSL https://servers.technicpack.net/Technic/servers/tekkitmain/Tekkit_Server_$MODPACK_VERSION.zip -o Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nunzip Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nrm -rf Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nrm launch.bat\r\n\r\nrm launch.sh\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/java/server.properties\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/technic/Tekkit/egg-tekkit.json b/java/technic/Tekkit/egg-tekkit.json index 7a837347..03777e46 100644 --- a/java/technic/Tekkit/egg-tekkit.json +++ b/java/technic/Tekkit/egg-tekkit.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\ncd \/mnt\/server\r\n\r\ncurl -sSL https:\/\/servers.technicpack.net\/Technic\/servers\/tekkitmain\/Tekkit_Server_$MODPACK_VERSION.zip -o Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nunzip Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nrm -rf Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nrm launch.bat\r\n\r\nrm launch.sh\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/server.properties\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/technic/attack-of-the-bteam/egg-attack-of-the-b--team.json b/java/technic/attack-of-the-bteam/egg-attack-of-the-b--team.json index 6bea1169..119f018b 100644 --- a/java/technic/attack-of-the-bteam/egg-attack-of-the-b--team.json +++ b/java/technic/attack-of-the-bteam/egg-attack-of-the-b--team.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n\r\ncd \/mnt\/server\r\n\r\ncurl -sS https:\/\/servers.technicpack.net\/Technic\/servers\/bteam\/BTeam_Server_v$MODPACK_VERSION.zip -o BTeam_Server_v$MODPACK_VERSION.zip\r\n\r\nunzip -o BTeam_Server_v$MODPACK_VERSION.zip\r\n\r\nrm -rf BTeam_Server_v$MODPACK_VERSION.zip\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/technic/attack-of-the-bteam/egg-pterodactyl-attack-of-the-b--team.json b/java/technic/attack-of-the-bteam/egg-pterodactyl-attack-of-the-b--team.json index ccccb0c2..be023798 100644 --- a/java/technic/attack-of-the-bteam/egg-pterodactyl-attack-of-the-b--team.json +++ b/java/technic/attack-of-the-bteam/egg-pterodactyl-attack-of-the-b--team.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\n\r\ncd /mnt/server\r\n\r\ncurl -sS https://servers.technicpack.net/Technic/servers/bteam/BTeam_Server_v$MODPACK_VERSION.zip -o BTeam_Server_v$MODPACK_VERSION.zip\r\n\r\nunzip -o BTeam_Server_v$MODPACK_VERSION.zip\r\n\r\nrm -rf BTeam_Server_v$MODPACK_VERSION.zip\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/technic/blightfall/egg-blightfall.json b/java/technic/blightfall/egg-blightfall.json index 1e7cc9e8..eb38880b 100644 --- a/java/technic/blightfall/egg-blightfall.json +++ b/java/technic/blightfall/egg-blightfall.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\ncd \/mnt\/server\r\n\r\ncurl -sS https:\/\/servers.technicpack.net\/Technic\/servers\/blightfall\/Blightfall_Server_$MODPACK_VERSION.zip -o Blightfall_$MODPACK_VERSION.zip\r\n\r\nunzip Blightfall_$MODPACK_VERSION.zip\r\n\r\nrm -rf Blightfall_$MODPACK_VERSION.zip\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/technic/blightfall/egg-pterodactyl-blightfall.json b/java/technic/blightfall/egg-pterodactyl-blightfall.json index 32b8ca93..83745146 100644 --- a/java/technic/blightfall/egg-pterodactyl-blightfall.json +++ b/java/technic/blightfall/egg-pterodactyl-blightfall.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\ncd /mnt/server\r\n\r\ncurl -sS https://servers.technicpack.net/Technic/servers/blightfall/Blightfall_Server_$MODPACK_VERSION.zip -o Blightfall_$MODPACK_VERSION.zip\r\n\r\nunzip Blightfall_$MODPACK_VERSION.zip\r\n\r\nrm -rf Blightfall_$MODPACK_VERSION.zip\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/technic/hexxit/egg-hexxit.json b/java/technic/hexxit/egg-hexxit.json index 6fe5e2c3..39b18a9d 100644 --- a/java/technic/hexxit/egg-hexxit.json +++ b/java/technic/hexxit/egg-hexxit.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\ncd \/mnt\/server\r\n\r\ncurl -sS https:\/\/servers.technicpack.net\/Technic\/servers\/hexxit\/Hexxit_Server_v$MODPACK_VERSION.zip -o Hexxit_$MODPACK_VERSION.zip\r\n\r\nunzip Hexxit_$MODPACK_VERSION.zip\r\n\r\nrm -rf Hexxit_$MODPACK_VERSION.zip\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/technic/hexxit/egg-pterodactyl-hexxit.json b/java/technic/hexxit/egg-pterodactyl-hexxit.json index 293adde1..3ade1692 100644 --- a/java/technic/hexxit/egg-pterodactyl-hexxit.json +++ b/java/technic/hexxit/egg-pterodactyl-hexxit.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\ncd /mnt/server\r\n\r\ncurl -sS https://servers.technicpack.net/Technic/servers/hexxit/Hexxit_Server_v$MODPACK_VERSION.zip -o Hexxit_$MODPACK_VERSION.zip\r\n\r\nunzip Hexxit_$MODPACK_VERSION.zip\r\n\r\nrm -rf Hexxit_$MODPACK_VERSION.zip\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/technic/tekkit-classic/egg-pterodactyl-tekkit-classic.json b/java/technic/tekkit-classic/egg-pterodactyl-tekkit-classic.json index 583f1ce9..46e07641 100644 --- a/java/technic/tekkit-classic/egg-pterodactyl-tekkit-classic.json +++ b/java/technic/tekkit-classic/egg-pterodactyl-tekkit-classic.json @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\ncd /mnt/server\r\n\r\ncurl -sS https://servers.technicpack.net/Technic/servers/tekkit/Tekkit_Server_$MODPACK_VERSION.zip -o Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nunzip Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nrm -rf Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nrm launch.bat\r\n\r\nrm launch.sh\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/java/server.properties\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/technic/tekkit-classic/egg-tekkit-classic.json b/java/technic/tekkit-classic/egg-tekkit-classic.json index 1d0f49d4..6ad3aea7 100644 --- a/java/technic/tekkit-classic/egg-tekkit-classic.json +++ b/java/technic/tekkit-classic/egg-tekkit-classic.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\ncd \/mnt\/server\r\n\r\ncurl -sS https:\/\/servers.technicpack.net\/Technic\/servers\/tekkit\/Tekkit_Server_$MODPACK_VERSION.zip -o Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nunzip Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nrm -rf Tekkit_Server_$MODPACK_VERSION.zip\r\n\r\nrm launch.bat\r\n\r\nrm launch.sh\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/server.properties\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/technic/tekkit-legends/egg-pterodactyl-tekkit-legends.json b/java/technic/tekkit-legends/egg-pterodactyl-tekkit-legends.json index 3420e0d0..c3521a16 100644 --- a/java/technic/tekkit-legends/egg-pterodactyl-tekkit-legends.json +++ b/java/technic/tekkit-legends/egg-pterodactyl-tekkit-legends.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\ncd /mnt/server\r\n\r\ncurl -sS https://servers.technicpack.net/Technic/servers/tekkit-legends/Tekkit_Legends_Server_v$MODPACK_VERSION.zip -o TekkitLegends_$MODPACK_VERSION.zip\r\n\r\nunzip TekkitLegends_$MODPACK_VERSION.zip\r\n\r\nrm -rf TekkitLegends_$MODPACK_VERSION.zip\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/technic/tekkit-legends/egg-tekkit-legends.json b/java/technic/tekkit-legends/egg-tekkit-legends.json index 0073b2dc..9515ff14 100644 --- a/java/technic/tekkit-legends/egg-tekkit-legends.json +++ b/java/technic/tekkit-legends/egg-tekkit-legends.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\ncd \/mnt\/server\r\n\r\ncurl -sS https:\/\/servers.technicpack.net\/Technic\/servers\/tekkit-legends\/Tekkit_Legends_Server_v$MODPACK_VERSION.zip -o TekkitLegends_$MODPACK_VERSION.zip\r\n\r\nunzip TekkitLegends_$MODPACK_VERSION.zip\r\n\r\nrm -rf TekkitLegends_$MODPACK_VERSION.zip\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/technic/tekkit-smp/egg-pterodactyl-tekkit-smp.json b/java/technic/tekkit-smp/egg-pterodactyl-tekkit-smp.json index 80af895f..f7570696 100644 --- a/java/technic/tekkit-smp/egg-pterodactyl-tekkit-smp.json +++ b/java/technic/tekkit-smp/egg-pterodactyl-tekkit-smp.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Tekkit SMP Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\napk update\r\napk add --no-cache curl zip unzip jq\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBUILD_TYPE=${BUILD_TYPE:-\"recommended\"}\r\n\r\nif [ -z \"$MODPACK_VERSION\" ]; then\r\n MODPACK_VERSION=v$(curl -s https:\/\/solder.technicpack.net\/api\/modpack\/tekkit-smp | jq -r \".${BUILD_TYPE}\")\r\nfi\r\n\r\necho \"Downloading Tekkit SMP version ${MODPACK_VERSION} (This may take a while!)\"\r\ncurl -sSL \"https:\/\/servers.technicpack.net\/Technic\/servers\/tekkit-smp\/Tekkit-SMP_Server_${MODPACK_VERSION}.zip\" -o \"Tekkit-SMP_Server_${MODPACK_VERSION}.zip\"\r\nunzip -o \"Tekkit-SMP_Server_${MODPACK_VERSION}.zip\"\r\n\r\nrm -rf \"Tekkit-SMP_Server_${MODPACK_VERSION}.zip\"\r\nrm -f RestoreBackup.bat LaunchServer.bat LaunchServer.sh RestoreBackup.sh\r\n\r\nmv forge-1.12.2-*.jar forge.jar\r\n\r\nif [ ! -f server.properties ]; then\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/server.properties\r\nfi\r\n\r\necho \"Done\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/technic/tekkit-smp/egg-tekkit-smp.json b/java/technic/tekkit-smp/egg-tekkit-smp.json index 5c31f99c..5355c89c 100644 --- a/java/technic/tekkit-smp/egg-tekkit-smp.json +++ b/java/technic/tekkit-smp/egg-tekkit-smp.json @@ -29,7 +29,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Tekkit SMP Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\napk update\r\napk add --no-cache curl zip unzip jq\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBUILD_TYPE=${BUILD_TYPE:-\"recommended\"}\r\n\r\nif [ -z \"$MODPACK_VERSION\" ]; then\r\n MODPACK_VERSION=v$(curl -s https:\/\/solder.technicpack.net\/api\/modpack\/tekkit-smp | jq -r \".${BUILD_TYPE}\")\r\nfi\r\n\r\necho \"Downloading Tekkit SMP version ${MODPACK_VERSION} (This may take a while!)\"\r\ncurl -sSL \"https:\/\/servers.technicpack.net\/Technic\/servers\/tekkit-smp\/Tekkit-SMP_Server_${MODPACK_VERSION}.zip\" -o \"Tekkit-SMP_Server_${MODPACK_VERSION}.zip\"\r\nunzip -o \"Tekkit-SMP_Server_${MODPACK_VERSION}.zip\"\r\n\r\nrm -rf \"Tekkit-SMP_Server_${MODPACK_VERSION}.zip\"\r\nrm -f RestoreBackup.bat LaunchServer.bat LaunchServer.sh RestoreBackup.sh\r\n\r\nmv forge-1.12.2-*.jar forge.jar\r\n\r\nif [ ! -f server.properties ]; then\r\n curl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/server.properties\r\nfi\r\n\r\necho \"Done\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/technic/the-1-12-2-pack/egg-pterodactyl-the1-12-2-pack.json b/java/technic/the-1-12-2-pack/egg-pterodactyl-the1-12-2-pack.json index 55709c23..9ba6676a 100644 --- a/java/technic/the-1-12-2-pack/egg-pterodactyl-the1-12-2-pack.json +++ b/java/technic/the-1-12-2-pack/egg-pterodactyl-the1-12-2-pack.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\ncd /mnt/server\r\n\r\ncurl -sS http://solder.endermedia.com/repository/downloads/the-1122-pack/the-1122-pack_$MODPACK_VERSION.zip -o the-1122-pack_$MODPACK_VERSION.zip\r\n\r\nunzip the-1122-pack_$MODPACK_VERSION.zip\r\n\r\nrm -rf the-1122-pack_$MODPACK_VERSION.zip\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/technic/the-1-12-2-pack/egg-the1-12-2-pack.json b/java/technic/the-1-12-2-pack/egg-the1-12-2-pack.json index 5dccd54d..485985ce 100644 --- a/java/technic/the-1-12-2-pack/egg-the1-12-2-pack.json +++ b/java/technic/the-1-12-2-pack/egg-the1-12-2-pack.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\ncd \/mnt\/server\r\n\r\ncurl -sS http:\/\/solder.endermedia.com\/repository\/downloads\/the-1122-pack\/the-1122-pack_$MODPACK_VERSION.zip -o the-1122-pack_$MODPACK_VERSION.zip\r\n\r\nunzip the-1122-pack_$MODPACK_VERSION.zip\r\n\r\nrm -rf the-1122-pack_$MODPACK_VERSION.zip\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/technic/the-1-7-10-pack/egg-pterodactyl-the1-7-10-pack.json b/java/technic/the-1-7-10-pack/egg-pterodactyl-the1-7-10-pack.json index 11561065..e1050054 100644 --- a/java/technic/the-1-7-10-pack/egg-pterodactyl-the1-7-10-pack.json +++ b/java/technic/the-1-7-10-pack/egg-pterodactyl-the1-7-10-pack.json @@ -26,7 +26,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\ncd /mnt/server\r\n\r\ncurl -sS http://solder.endermedia.com/repository/downloads/the-1710-pack/the-1710-pack_$MODPACK_VERSION.zip -o the-1710-pack_$MODPACK_VERSION.zip\r\n\r\nunzip the-1710-pack_$MODPACK_VERSION.zip\r\n\r\nrm -rf the-1710-pack_$MODPACK_VERSION.zip\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/java/technic/the-1-7-10-pack/egg-the1-7-10-pack.json b/java/technic/the-1-7-10-pack/egg-the1-7-10-pack.json index c9e8f8d0..58a97146 100644 --- a/java/technic/the-1-7-10-pack/egg-the1-7-10-pack.json +++ b/java/technic/the-1-7-10-pack/egg-the1-7-10-pack.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\ncd \/mnt\/server\r\n\r\ncurl -sS http:\/\/solder.endermedia.com\/repository\/downloads\/the-1710-pack\/the-1710-pack_$MODPACK_VERSION.zip -o the-1710-pack_$MODPACK_VERSION.zip\r\n\r\nunzip the-1710-pack_$MODPACK_VERSION.zip\r\n\r\nrm -rf the-1710-pack_$MODPACK_VERSION.zip\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/java/vanillacord/egg-pterodactyl-vanilla-cord.json b/java/vanillacord/egg-pterodactyl-vanilla-cord.json index b5ffd680..760d7dfd 100644 --- a/java/vanillacord/egg-pterodactyl-vanilla-cord.json +++ b/java/vanillacord/egg-pterodactyl-vanilla-cord.json @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "container": "openjdk:8-jre-alpine", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "ash", "script": "#!/bin/ash\r\n\r\napk --no-cache --update add curl jq\r\n\r\ncd /mnt/server\r\n\r\necho $VANILLA_VERSION\r\n\r\nLATEST_VERSION=`curl https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r '.latest.release'`\r\n\r\nif { [ -z \"$VANILLA_VERSION\" ] || [ \"$VANILLA_VERSION\" == \"latest\" ]; } then\r\n INSTALLING_VERSION=$LATEST_VERSION\r\nelse\r\n INSTALLING_VERSION=$VANILLA_VERSION\r\nfi\r\n\r\nMAJOR_VERSION=$(echo $INSTALLING_VERSION | sed -En 's/^([0-9]*)\\.[0-9]*\\.[0-9]*$/\\1/p')\r\nMINOR_VERSION=$(echo $INSTALLING_VERSION | sed -En 's/^[0-9]*\\.([0-9]*)\\.[0-9]*$/\\1/p')\r\nPATCH_VERSION=$(echo $INSTALLING_VERSION | sed -En 's/^[0-9]*\\.[0-9]*\\.([0-9]*)$/\\1/p')\r\n\r\nVANILLACORD_URL=https://src.me1312.net/jenkins/job/VanillaCord/job/1.12/lastSuccessfulBuild/artifact/artifacts/VanillaCord.jar\r\nif [ $MAJOR_VERSION -eq 1 ] \u0026\u0026 [ $MINOR_VERSION -lt 12 ]; then\r\n VANILLACORD_URL=https://src.me1312.net/jenkins/job/VanillaCord/job/1.7.10/lastSuccessfulBuild/artifact/artifacts/VanillaCord.jar\r\nfi\r\n\r\nif { [ $MAJOR_VERSION -eq 1 ] \u0026\u0026 [ $MINOR_VERSION -eq 7 ] \u0026\u0026 [ $PATCH_VERSION -lt 10 ]; } || { [ $MAJOR_VERSION -eq 1 ] \u0026\u0026 [ $MINOR_VERSION -lt 7 ]; } then\r\n echo \"VanillaCord is only supported on Minecraft 1.7.10 or higher! You cannot use it with $INSTALLING_VERSION.\"\r\n exit 1\r\nfi\r\n\r\ncurl -o vanillacord.jar $VANILLACORD_URL\r\njava -jar vanillacord.jar $INSTALLING_VERSION\r\n\r\nrm -f vanillacord.jar\r\nrm -rf in\r\nmv out/*.jar $SERVER_JARFILE\r\nrm -rf out" } diff --git a/java/vanillacord/egg-vanilla-cord.json b/java/vanillacord/egg-vanilla-cord.json index 24d89d92..7ab6a2f2 100644 --- a/java/vanillacord/egg-vanilla-cord.json +++ b/java/vanillacord/egg-vanilla-cord.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n\r\napk --no-cache --update add curl jq\r\n\r\ncd \/mnt\/server\r\n\r\necho $VANILLA_VERSION\r\n\r\nLATEST_VERSION=`curl https:\/\/launchermeta.mojang.com\/mc\/game\/version_manifest.json | jq -r '.latest.release'`\r\n\r\nif { [ -z \"$VANILLA_VERSION\" ] || [ \"$VANILLA_VERSION\" == \"latest\" ]; } then\r\n INSTALLING_VERSION=$LATEST_VERSION\r\nelse\r\n INSTALLING_VERSION=$VANILLA_VERSION\r\nfi\r\n\r\nMAJOR_VERSION=$(echo $INSTALLING_VERSION | sed -En 's\/^([0-9]*)\\.[0-9]*\\.[0-9]*$\/\\1\/p')\r\nMINOR_VERSION=$(echo $INSTALLING_VERSION | sed -En 's\/^[0-9]*\\.([0-9]*)\\.[0-9]*$\/\\1\/p')\r\nPATCH_VERSION=$(echo $INSTALLING_VERSION | sed -En 's\/^[0-9]*\\.[0-9]*\\.([0-9]*)$\/\\1\/p')\r\n\r\nVANILLACORD_URL=https:\/\/src.me1312.net\/jenkins\/job\/VanillaCord\/job\/1.12\/lastSuccessfulBuild\/artifact\/artifacts\/VanillaCord.jar\r\nif [ $MAJOR_VERSION -eq 1 ] && [ $MINOR_VERSION -lt 12 ]; then\r\n VANILLACORD_URL=https:\/\/src.me1312.net\/jenkins\/job\/VanillaCord\/job\/1.7.10\/lastSuccessfulBuild\/artifact\/artifacts\/VanillaCord.jar\r\nfi\r\n\r\nif { [ $MAJOR_VERSION -eq 1 ] && [ $MINOR_VERSION -eq 7 ] && [ $PATCH_VERSION -lt 10 ]; } || { [ $MAJOR_VERSION -eq 1 ] && [ $MINOR_VERSION -lt 7 ]; } then\r\n echo \"VanillaCord is only supported on Minecraft 1.7.10 or higher! You cannot use it with $INSTALLING_VERSION.\"\r\n exit 1\r\nfi\r\n\r\ncurl -o vanillacord.jar $VANILLACORD_URL\r\njava -jar vanillacord.jar $INSTALLING_VERSION\r\n\r\nrm -f vanillacord.jar\r\nrm -rf in\r\nmv out\/*.jar $SERVER_JARFILE\r\nrm -rf out", - "container": "openjdk:8-jre-alpine", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", "entrypoint": "ash" } }, diff --git a/proxy/bedrock/waterdog_pe/egg-pterodactyl-waterdog-p-e.json b/proxy/bedrock/waterdog_pe/egg-pterodactyl-waterdog-p-e.json index bc1a7858..81f5e328 100644 --- a/proxy/bedrock/waterdog_pe/egg-pterodactyl-waterdog-p-e.json +++ b/proxy/bedrock/waterdog_pe/egg-pterodactyl-waterdog-p-e.json @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/bash\r\n\r\n\r\nif [ ! -d /mnt/server ]; then\r\n mkdir /mnt/server\r\nfi\r\n\r\ncd /mnt/server\r\n\r\n# Adding '.jar' if it isn't part of the file name\r\nif [[ \"${SERVER_JARFILE}\" == \"*\\.jar\" ]]; then\r\n echo -e \"adding.jar to server file name\"\r\n SERVER_JARFILE=\"${SERVER_JARFILE}.jar\"\r\nfi\r\n\r\nif [ -z \"${WATERDOG_VERSION}\" ] || [ \"${WATERDOG_VERSION}\" == \"latest\" ]; then\r\n echo -e \"downloading latest waterdog pe build\\n\"\r\n curl -sSL -o ${SERVER_JARFILE} https://jenkins.waterdog.dev/job/Waterdog/job/WaterdogPE/job/release/lastSuccessfulBuild/artifact/target/Waterdog.jar\r\nelse \r\n echo -e \"downloading waterdog pe build ${WATERDOG_VERSION}\\n\"\r\n curl -sSL -o ${SERVER_JARFILE} https://jenkins.waterdog.dev/job/Waterdog/job/WaterdogPE/job/release/${WATERDOG_VERSION}/artifact/target/Waterdog.jar\r\nfi\r\n\r\nif [ ! -f config.yml ]; then\r\n echo -e \"Downloading waterdog pe config.yml\"\r\n curl -o config.yml https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/proxy/bedrock/waterdog_pe/config.yml\r\nelse\r\n echo -e \"Waterfall config.yml exists. Will not pull a new file\"\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/proxy/bedrock/waterdog_pe/egg-waterdog-p-e.json b/proxy/bedrock/waterdog_pe/egg-waterdog-p-e.json index 45f72c9a..10f6acfa 100644 --- a/proxy/bedrock/waterdog_pe/egg-waterdog-p-e.json +++ b/proxy/bedrock/waterdog_pe/egg-waterdog-p-e.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n\r\n\r\nif [ ! -d \/mnt\/server ]; then\r\n mkdir \/mnt\/server\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Adding '.jar' if it isn't part of the file name\r\nif [[ \"${SERVER_JARFILE}\" == \"*\\.jar\" ]]; then\r\n echo -e \"adding.jar to server file name\"\r\n SERVER_JARFILE=\"${SERVER_JARFILE}.jar\"\r\nfi\r\n\r\nif [ -z \"${WATERDOG_VERSION}\" ] || [ \"${WATERDOG_VERSION}\" == \"latest\" ]; then\r\n echo -e \"downloading latest waterdog pe build\\n\"\r\n curl -sSL -o ${SERVER_JARFILE} https:\/\/jenkins.waterdog.dev\/job\/Waterdog\/job\/WaterdogPE\/job\/release\/lastSuccessfulBuild\/artifact\/target\/Waterdog.jar\r\nelse \r\n echo -e \"downloading waterdog pe build ${WATERDOG_VERSION}\\n\"\r\n curl -sSL -o ${SERVER_JARFILE} https:\/\/jenkins.waterdog.dev\/job\/Waterdog\/job\/WaterdogPE\/job\/release\/${WATERDOG_VERSION}\/artifact\/target\/Waterdog.jar\r\nfi\r\n\r\nif [ ! -f config.yml ]; then\r\n echo -e \"Downloading waterdog pe config.yml\"\r\n curl -o config.yml https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/proxy\/bedrock\/waterdog_pe\/config.yml\r\nelse\r\n echo -e \"Waterfall config.yml exists. Will not pull a new file\"\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/proxy/cross_platform/waterdog/egg-pterodactyl-waterdog.json b/proxy/cross_platform/waterdog/egg-pterodactyl-waterdog.json index 744af55e..3217693e 100644 --- a/proxy/cross_platform/waterdog/egg-pterodactyl-waterdog.json +++ b/proxy/cross_platform/waterdog/egg-pterodactyl-waterdog.json @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/bash\r\n\r\nif [ ! -d /mnt/server ]; then\r\n mkdir /mnt/server\r\nfi\r\n\r\ncd /mnt/server\r\n\r\n# Adding '.jar' if it isn't part of the file name\r\nif [[ \"${SERVER_JARFILE}\" == \"*\\.jar\" ]]; then\r\n echo -e \"adding.jar to server file name\"\r\n SERVER_JARFILE=\"${SERVER_JARFILE}.jar\"\r\nfi\r\n\r\nif [ -z \"${WATERDOG_VERSION}\" ] || [ \"${WATERDOG_VERSION}\" == \"latest\" ]; then\r\n echo -e \"downloading latest waterdog build\\n\"\r\n curl -sSL -o ${SERVER_JARFILE} https://jenkins.waterdog.dev/job/Waterdog/job/Waterdog/job/master-zlib/lastSuccessfulBuild/artifact/Waterfall-Proxy/bootstrap/target/Waterdog.jar\r\nelse \r\n echo -e \"downloading waterdog build ${WATERDOG_VERSION}\\n\"\r\n curl -sSL -o ${SERVER_JARFILE} https://jenkins.waterdog.dev/job/Waterdog/job/Waterdog/job/master-zlib/${WATERDOG_VERSION}/artifact/Waterfall-Proxy/bootstrap/target/Waterdog.jar\r\nfi\r\n\r\nif [ ! -f config.yml ]; then\r\n echo -e \"Downloading waterfall config.yml\"\r\n curl -o config.yml https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/proxy/java/waterfall/config.yml\r\nelse\r\n echo -e \"Waterfall config.yml exists. Will not pull a new file\"\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/proxy/cross_platform/waterdog/egg-waterdog.json b/proxy/cross_platform/waterdog/egg-waterdog.json index f4ef9fa2..c05005a4 100644 --- a/proxy/cross_platform/waterdog/egg-waterdog.json +++ b/proxy/cross_platform/waterdog/egg-waterdog.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n\r\nif [ ! -d \/mnt\/server ]; then\r\n mkdir \/mnt\/server\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Adding '.jar' if it isn't part of the file name\r\nif [[ \"${SERVER_JARFILE}\" == \"*\\.jar\" ]]; then\r\n echo -e \"adding.jar to server file name\"\r\n SERVER_JARFILE=\"${SERVER_JARFILE}.jar\"\r\nfi\r\n\r\nif [ -z \"${WATERDOG_VERSION}\" ] || [ \"${WATERDOG_VERSION}\" == \"latest\" ]; then\r\n echo -e \"downloading latest waterdog build\\n\"\r\n curl -sSL -o ${SERVER_JARFILE} https:\/\/jenkins.waterdog.dev\/job\/Waterdog\/job\/Waterdog\/job\/master-zlib\/lastSuccessfulBuild\/artifact\/Waterfall-Proxy\/bootstrap\/target\/Waterdog.jar\r\nelse \r\n echo -e \"downloading waterdog build ${WATERDOG_VERSION}\\n\"\r\n curl -sSL -o ${SERVER_JARFILE} https:\/\/jenkins.waterdog.dev\/job\/Waterdog\/job\/Waterdog\/job\/master-zlib\/${WATERDOG_VERSION}\/artifact\/Waterfall-Proxy\/bootstrap\/target\/Waterdog.jar\r\nfi\r\n\r\nif [ ! -f config.yml ]; then\r\n echo -e \"Downloading waterfall config.yml\"\r\n curl -o config.yml https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/proxy\/java\/waterfall\/config.yml\r\nelse\r\n echo -e \"Waterfall config.yml exists. Will not pull a new file\"\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/proxy/java/travertine/egg-pterodactyl-travertine.json b/proxy/java/travertine/egg-pterodactyl-travertine.json index c424cf36..3e4445a2 100644 --- a/proxy/java/travertine/egg-pterodactyl-travertine.json +++ b/proxy/java/travertine/egg-pterodactyl-travertine.json @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/bash\r\n# Travertine Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nPROJECT=travertine\r\n\r\nif [ -n \"${DL_PATH}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_PATH}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep true`\r\n\tLATEST_VERSION=`curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\t\r\n\tBUILD_EXISTS=`curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true`\r\n\tLATEST_BUILD=`curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[-1]'`\r\n\t\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\t\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\t\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER}/downloads/${JAR_NAME}\r\nfi\r\n\r\ncd /mnt/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/proxy/java/travertine/egg-travertine.json b/proxy/java/travertine/egg-travertine.json index bfbc8a72..af39330c 100644 --- a/proxy/java/travertine/egg-travertine.json +++ b/proxy/java/travertine/egg-travertine.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# Travertine Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=travertine\r\n\r\nif [ -n \"${DL_PATH}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_PATH}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep true`\r\n\tLATEST_VERSION=`curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\t\r\n\tBUILD_EXISTS=`curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true`\r\n\tLATEST_BUILD=`curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[-1]'`\r\n\t\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\t\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\t\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION}\/builds\/${BUILD_NUMBER}\/downloads\/${JAR_NAME}\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, diff --git a/proxy/java/velocity/egg-pterodactyl-velocity.json b/proxy/java/velocity/egg-pterodactyl-velocity.json index f8b5134a..e20f4cbe 100644 --- a/proxy/java/velocity/egg-pterodactyl-velocity.json +++ b/proxy/java/velocity/egg-pterodactyl-velocity.json @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# Velocity Proxy Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nPROJECT=velocity\r\n\r\nif [[ -z ${VELOCITY_VERSION} ]] || [[ ${VELOCITY_VERSION} == \"latest\" ]]; then\r\n VELOCITY_VERSION=\"latest\"\r\nfi\r\n\r\nif [[ -n \"${DOWNLOAD_LINK}\" ]]; then\r\n echo -e \"Using supplied download url: ${DOWNLOAD_LINK}\"\r\n DOWNLOAD_URL=$(eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g'))\r\nelse\r\n VER_EXISTS=$(curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r --arg VERSION $VELOCITY_VERSION '.versions[] | contains($VERSION)' | grep true)\r\n LATEST_VERSION=$(curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r '.versions' | jq -r '.[-1]')\r\n\r\nif [[ \"${VER_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Version is valid. Using version ${VELOCITY_VERSION}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} version\"\r\n VELOCITY_VERSION=${LATEST_VERSION}\r\nfi\r\n\r\nBUILD_EXISTS=$(curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${VELOCITY_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true)\r\nLATEST_BUILD=$(curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${VELOCITY_VERSION} | jq -r '.builds' | jq -r '.[-1]')\r\n\r\nif [[ \"${BUILD_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Build is valid for version ${VELOCITY_VERSION}. Using build ${BUILD_NUMBER}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} build for version ${VELOCITY_VERSION}\"\r\n BUILD_NUMBER=${LATEST_BUILD}\r\nfi\r\n\r\nJAR_NAME=${PROJECT}-${VELOCITY_VERSION}-${BUILD_NUMBER}.jar\r\necho \"Version being downloaded\"\r\necho -e \"Velocity Version: ${VELOCITY_VERSION}\"\r\necho -e \"Build: ${BUILD_NUMBER}\"\r\necho -e \"JAR Name of Build: ${JAR_NAME}\"\r\nDOWNLOAD_URL=https://api.papermc.io/v2/projects/${PROJECT}/versions/${VELOCITY_VERSION}/builds/${BUILD_NUMBER}/downloads/${JAR_NAME}\r\n\r\nfi\r\ncd /mnt/server\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [[ -f ${SERVER_JARFILE} ]]; then\r\nmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [[ -f velocity.toml ]]; then\r\n echo -e \"velocity config file exists\"\r\nelse\r\n echo -e \"downloading velocity config file.\"\r\n curl https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/proxy/java/velocity/velocity.toml -o velocity.toml\r\nfi\r\n\r\nif [[ -f forwarding.secret ]]; then\r\n echo -e \"velocity forwarding secret file already exists\"\r\nelse\r\n echo -e \"creating forwarding secret file\"\r\n touch forwarding.secret\r\n date +%s | sha256sum | base64 | head -c 12 \u003e forwarding.secret\r\nfi\r\n\r\necho -e \"install complete\"" } diff --git a/proxy/java/velocity/egg-velocity.json b/proxy/java/velocity/egg-velocity.json index 80a88cf4..df28bc8e 100644 --- a/proxy/java/velocity/egg-velocity.json +++ b/proxy/java/velocity/egg-velocity.json @@ -32,7 +32,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# Velocity Proxy Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=velocity\r\n\r\nif [[ -z ${VELOCITY_VERSION} ]] || [[ ${VELOCITY_VERSION} == \"latest\" ]]; then\r\n VELOCITY_VERSION=\"latest\"\r\nfi\r\n\r\nif [[ -n \"${DOWNLOAD_LINK}\" ]]; then\r\n echo -e \"Using supplied download url: ${DOWNLOAD_LINK}\"\r\n DOWNLOAD_URL=$(eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g'))\r\nelse\r\n VER_EXISTS=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r --arg VERSION $VELOCITY_VERSION '.versions[] | contains($VERSION)' | grep true)\r\n LATEST_VERSION=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]')\r\n\r\nif [[ \"${VER_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Version is valid. Using version ${VELOCITY_VERSION}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} version\"\r\n VELOCITY_VERSION=${LATEST_VERSION}\r\nfi\r\n\r\nBUILD_EXISTS=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true)\r\nLATEST_BUILD=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION} | jq -r '.builds' | jq -r '.[-1]')\r\n\r\nif [[ \"${BUILD_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Build is valid for version ${VELOCITY_VERSION}. Using build ${BUILD_NUMBER}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} build for version ${VELOCITY_VERSION}\"\r\n BUILD_NUMBER=${LATEST_BUILD}\r\nfi\r\n\r\nJAR_NAME=${PROJECT}-${VELOCITY_VERSION}-${BUILD_NUMBER}.jar\r\necho \"Version being downloaded\"\r\necho -e \"Velocity Version: ${VELOCITY_VERSION}\"\r\necho -e \"Build: ${BUILD_NUMBER}\"\r\necho -e \"JAR Name of Build: ${JAR_NAME}\"\r\nDOWNLOAD_URL=https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION}\/builds\/${BUILD_NUMBER}\/downloads\/${JAR_NAME}\r\n\r\nfi\r\n\r\ncd \/mnt\/server\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [[ -f ${SERVER_JARFILE} ]]; then\r\nmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [[ -f velocity.toml ]]; then\r\n echo -e \"velocity config file exists\"\r\nelse\r\n echo -e \"downloading velocity config file.\"\r\n curl https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/proxy\/java\/velocity\/velocity.toml -o velocity.toml\r\nfi\r\n\r\nif [[ -f forwarding.secret ]]; then\r\n echo -e \"velocity forwarding secret file already exists\"\r\nelse\r\n echo -e \"creating forwarding secret file\"\r\n touch forwarding.secret\r\n date +%s | sha256sum | base64 | head -c 12 > forwarding.secret\r\nfi\r\n\r\necho -e \"install complete\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/proxy/java/viaaas/egg-pterodactyl-v-i-aaa-s.json b/proxy/java/viaaas/egg-pterodactyl-v-i-aaa-s.json index eef5f288..85e53323 100644 --- a/proxy/java/viaaas/egg-pterodactyl-v-i-aaa-s.json +++ b/proxy/java/viaaas/egg-pterodactyl-v-i-aaa-s.json @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash", "script": "#!/bin/ash\r\n# VIAaaS Installation Script\r\n#\r\n# Server Files: /mnt/server\r\ncd /mnt/server\r\nwget -O ${SERVER_JARFILE} \"https://jitpack.io/com/github/ViaVersion/VIAaaS/master-SNAPSHOT/VIAaaS-master-SNAPSHOT-all.jar\"\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" } diff --git a/proxy/java/viaaas/egg-v-i-aaa-s.json b/proxy/java/viaaas/egg-v-i-aaa-s.json index d9f98470..54787263 100644 --- a/proxy/java/viaaas/egg-v-i-aaa-s.json +++ b/proxy/java/viaaas/egg-v-i-aaa-s.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# VIAaaS Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\ncd \/mnt\/server\r\nwget -O ${SERVER_JARFILE} \"https:\/\/jitpack.io\/com\/github\/ViaVersion\/VIAaaS\/master-SNAPSHOT\/VIAaaS-master-SNAPSHOT-all.jar\"\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/proxy/java/viaproxy/egg-pterodactyl-via-proxy.json b/proxy/java/viaproxy/egg-pterodactyl-via-proxy.json index 81326546..bdec5e65 100644 --- a/proxy/java/viaproxy/egg-pterodactyl-via-proxy.json +++ b/proxy/java/viaproxy/egg-pterodactyl-via-proxy.json @@ -28,7 +28,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# ViaProxy Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/ViaVersion\/ViaProxy\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/ViaVersion\/ViaProxy\/releases\")\r\nMATCH=\"ViaProxy-[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+\\.jar\"\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\nelse\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n# Download the .jar file\r\necho \"Downloading ViaProxy version $VERSION...\"\r\ncurl -sSL -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/proxy/java/viaproxy/egg-via-proxy.json b/proxy/java/viaproxy/egg-via-proxy.json index c13272ee..93bc92bf 100644 --- a/proxy/java/viaproxy/egg-via-proxy.json +++ b/proxy/java/viaproxy/egg-via-proxy.json @@ -30,7 +30,7 @@ "scripts": { "installation": { "script": "#!\/bin\/ash\r\n# ViaProxy Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/ViaVersion\/ViaProxy\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/ViaVersion\/ViaProxy\/releases\")\r\nMATCH=\"ViaProxy-[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+\\.jar\"\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\nelse\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n# Download the .jar file\r\necho \"Downloading ViaProxy version $VERSION...\"\r\ncurl -sSL -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:alpine", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } }, diff --git a/proxy/java/waterfall/egg-pterodactyl-waterfall.json b/proxy/java/waterfall/egg-pterodactyl-waterfall.json index 71ce2158..8e4668f3 100644 --- a/proxy/java/waterfall/egg-pterodactyl-waterfall.json +++ b/proxy/java/waterfall/egg-pterodactyl-waterfall.json @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "container": "ghcr.io/parkervcp/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash", "script": "#!/bin/bash\r\n# Waterfall Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nPROJECT=waterfall\r\n\r\napt update\r\napt install -y curl jq\r\n\r\nif [ -n \"${DL_LINK}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_LINK}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_LINK} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep true`\r\n\tLATEST_VERSION=`curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\t\r\n\tBUILD_EXISTS=`curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true`\r\n\tLATEST_BUILD=`curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[-1]'`\r\n\t\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\t\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\t\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER}/downloads/${JAR_NAME}\r\nfi\r\n\r\ncd /mnt/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f config.yml ]; then\r\n\techo -e \"Downloading ${PROJECT} config.yml\"\r\n\tcurl -o config.yml https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/proxy/java/waterfall/config.yml\r\nelse\r\n\techo -e \"${PROJECT} config.yml exists. Will not pull a new file\"\r\nfi" } diff --git a/proxy/java/waterfall/egg-waterfall.json b/proxy/java/waterfall/egg-waterfall.json index ecf2c54c..f4b731cf 100644 --- a/proxy/java/waterfall/egg-waterfall.json +++ b/proxy/java/waterfall/egg-waterfall.json @@ -31,7 +31,7 @@ "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# Waterfall Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=waterfall\r\n\r\napt update\r\napt install -y curl jq\r\n\r\nif [ -n \"${DL_LINK}\" ]; then\r\n\techo -e \"Using supplied download url: ${DL_LINK}\"\r\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_LINK} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g')`\r\nelse\r\n\tVER_EXISTS=`curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep true`\r\n\tLATEST_VERSION=`curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'`\r\n\r\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} version\"\r\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\r\n\tfi\r\n\t\r\n\tBUILD_EXISTS=`curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true`\r\n\tLATEST_BUILD=`curl -s https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[-1]'`\r\n\t\r\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\r\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\r\n\telse\r\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\r\n\t\tBUILD_NUMBER=${LATEST_BUILD}\r\n\tfi\r\n\t\r\n\tJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\r\n\t\r\n\techo \"Version being downloaded\"\r\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n\techo -e \"Build: ${BUILD_NUMBER}\"\r\n\techo -e \"JAR Name of Build: ${JAR_NAME}\"\r\n\tDOWNLOAD_URL=https:\/\/papermc.io\/api\/v2\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION}\/builds\/${BUILD_NUMBER}\/downloads\/${JAR_NAME}\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f config.yml ]; then\r\n\techo -e \"Downloading ${PROJECT} config.yml\"\r\n\tcurl -o config.yml https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/proxy\/java\/waterfall\/config.yml\r\nelse\r\n\techo -e \"${PROJECT} config.yml exists. Will not pull a new file\"\r\nfi", - "container": "ghcr.io\/parkervcp\/installers:debian", + "container": "ghcr.io\/pelican-eggs\/installers:debian", "entrypoint": "bash" } }, From 7267b2b31658df6c9524977fdacd1d8851570fa1 Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Thu, 15 Jan 2026 06:21:46 +0100 Subject: [PATCH 18/20] Add: minecraft stock eggs (#110) * Add: minecraft stock eggs * Fix readme --- README.md | 3 +- java/README.md | 9 +- java/forge/{forge => }/README.md | 0 java/forge/egg-forge-minecraft.yaml | 219 ++++++++++++++++++ java/forge/forge/egg-forge-enhanced.json | 101 -------- .../forge/egg-pterodactyl-forge-enhanced.json | 80 ------- .../pterodactyl-egg-forge-minecraft.json | 80 +++++++ java/paper/egg-paper.json | 101 -------- java/paper/egg-paper.yaml | 142 ++++++++++++ ...-paper.json => pterodactyl-egg-paper.json} | 16 +- .../egg-pterodactyl-sponge-vanilla.json | 65 ++++-- java/spongevanilla/egg-sponge-vanilla.json | 62 ----- java/spongevanilla/egg-sponge.yaml | 159 +++++++++++++ java/vanilla/egg-vanilla-minecraft.yaml | 99 ++++++++ .../pterodactyl-egg-vanilla-minecraft.json | 60 +++++ proxy/README.md | 1 + proxy/java/bungeecord/egg-bungeecord.yaml | 83 +++++++ .../pterodactyl-egg-bungeecord.json | 60 +++++ 18 files changed, 964 insertions(+), 376 deletions(-) rename java/forge/{forge => }/README.md (100%) create mode 100644 java/forge/egg-forge-minecraft.yaml delete mode 100644 java/forge/forge/egg-forge-enhanced.json delete mode 100644 java/forge/forge/egg-pterodactyl-forge-enhanced.json create mode 100644 java/forge/pterodactyl-egg-forge-minecraft.json delete mode 100644 java/paper/egg-paper.json create mode 100644 java/paper/egg-paper.yaml rename java/paper/{egg-pterodactyl-paper.json => pterodactyl-egg-paper.json} (52%) delete mode 100644 java/spongevanilla/egg-sponge-vanilla.json create mode 100644 java/spongevanilla/egg-sponge.yaml create mode 100644 java/vanilla/egg-vanilla-minecraft.yaml create mode 100644 java/vanilla/pterodactyl-egg-vanilla-minecraft.json create mode 100644 proxy/java/bungeecord/egg-bungeecord.yaml create mode 100644 proxy/java/bungeecord/pterodactyl-egg-bungeecord.json diff --git a/README.md b/README.md index 537b8b54..89bf7ab0 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,6 @@ It’s set in infinitely-generated worlds of wide open terrain - icy mountains, * [Fabric](java/fabric) * [Feather](java/feather) * [Forge](java/forge) - * [Forge](java/forge/forge) * [Feed The Beast](java/ftb) * [Glowstone](java/glowstone) * [Limbo](java/limbo) @@ -38,6 +37,7 @@ It’s set in infinitely-generated worlds of wide open terrain - icy mountains, * [SpongeForge](java/spongeforge) * [SpongeVanilla](java/spongevanilla) * [Technic](java/technic) +* [Vanilla](java/vanilla) * [VanillaCord](java/vanillacord) ## [Proxies](proxy) Minecraft Server Proxies @@ -49,6 +49,7 @@ It’s set in infinitely-generated worlds of wide open terrain - icy mountains, * [Waterdog](proxy/cross_platform/waterdog) * [Java](proxy/java) * [AlwaysAuth](proxy/java/alwaysauth) + * [Bungeecord](proxy/java/bungeecord) * [Travertine](proxy/java/travertine) * [Velocity](proxy/java/velocity) * [VIAaas](proxy/java/viaaas) diff --git a/java/README.md b/java/README.md index eeb2dce7..d3536e9f 100644 --- a/java/README.md +++ b/java/README.md @@ -25,7 +25,7 @@ An experimental Minecraft server implementation in Rust ## Forge Based -### [Forge](forge/forge) +### [Forge](forge/) [Forge MC Website](https://files.minecraftforge.net) This is a direct fork of the default forge service @@ -171,6 +171,13 @@ The ancient power of Tekkits past return in this legendary pack! [Tekkit Classic Modpack Page](https://www.technicpack.net/modpack/tekkit.552560) The official Tekkit Classic modpack. Build factories, automate crafting! + +## [Vanilla](vanilla) + +## Vanilla +[Vanilla](https://www.minecraft.net/en-us/download/server) +Vanilla Minecraft server. + ## [VanillaCord](vanillacord) ## VanillaCord diff --git a/java/forge/forge/README.md b/java/forge/README.md similarity index 100% rename from java/forge/forge/README.md rename to java/forge/README.md diff --git a/java/forge/egg-forge-minecraft.yaml b/java/forge/egg-forge-minecraft.yaml new file mode 100644 index 00000000..23ed563e --- /dev/null +++ b/java/forge/egg-forge-minecraft.yaml @@ -0,0 +1,219 @@ +_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL' +meta: + version: PLCN_v3 + update_url: 'https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/forge/egg-forge-minecraft.yaml' +exported_at: '2025-12-09T21:55:23+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. +image: 'data:image/jpeg;base64,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' +tags: + - minecraft +features: + - eula + - java_version + - pid_limit +docker_images: + 'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21' + 'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17' + 'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16' + 'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11' + 'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8' +file_denylist: { } +startup_commands: + Default: '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: '' + 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: 'ghcr.io/pelican-eggs/installers:java_8' + 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 diff --git a/java/forge/forge/egg-forge-enhanced.json b/java/forge/forge/egg-forge-enhanced.json deleted file mode 100644 index 57412515..00000000 --- a/java/forge/forge/egg-forge-enhanced.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", - "meta": { - "version": "PLCN_v3", - "update_url": null - }, - "exported_at": "2025-12-19T20:55:21+00:00", - "name": "Forge Enhanced", - "author": "parker@parkervcp.com", - "uuid": "d6018085-eecc-42bf-bf8c-51ea45a69ace", - "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.", - "image": null, - "tags": [], - "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", - "Java 18": "ghcr.io/pterodactyl/yolks:java_18", - "Java 21": "ghcr.io/pterodactyl/yolks:java_21" - }, - "file_denylist": [], - "startup_commands": { - "Default": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true $( [[ ! -f unix_args.txt ]] && printf %s \"-jar {{SERVER_JARFILE}}\" || printf %s \"@unix_args.txt\" )" - }, - "config": { - "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"server-port\": \"{{server.allocations.default.port}}\",\n \"query.port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", - "startup": "{\n \"done\": \")! For help, type \"\n}", - "logs": "{}", - "stop": "stop" - }, - "scripts": { - "installation": { - "script": "#!/bin/bash\n# Forge Installation Script\n#\n# Server Files: /mnt/server\napt update\napt install -y curl jq\n\nif [[ ! -d /mnt/server ]]; then\n mkdir /mnt/server\nfi\n\ncd /mnt/server\n\n# Remove spaces from the version number to avoid issues with curl\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\nif [ -z ${SERVER_JARFILE}]; then \n SERVER_JARFILE=server.jar\nfi\n\nif [[ ! -z ${FORGE_VERSION} ]]; then\n DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}\n FORGE_JAR=forge-${FORGE_VERSION}*.jar\nelse\n JSON_DATA=$(curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json)\n\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\n echo -e \"getting latest version of forge.\"\n 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)\n BUILD_TYPE=latest\n fi\n\n if [[ \"${BUILD_TYPE}\" != \"recommended\" ]] && [[ \"${BUILD_TYPE}\" != \"latest\" ]]; then\n BUILD_TYPE=recommended\n fi\n\n echo -e \"minecraft version: ${MC_VERSION}\"\n echo -e \"build type: ${BUILD_TYPE}\"\n\n ## some variables for getting versions and things\n FILE_SITE=https://maven.minecraftforge.net/net/minecraftforge/forge/\n 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))')\n\n ## locating the forge version\n if [[ \"${VERSION_KEY}\" == \"\" ]] && [[ \"${BUILD_TYPE}\" == \"recommended\" ]]; then\n echo -e \"dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested.\"\n 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\"))')\n fi\n\n ## Error if the mc version set wasn't valid.\n if [ \"${VERSION_KEY}\" == \"\" ] || [ \"${VERSION_KEY}\" == \"null\" ]; then\n echo -e \"The install failed because there is no valid version of forge for the version of minecraft selected.\"\n exit 1\n fi\n\n FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY \"$VERSION_KEY\" '.promos | .[$VERSION_KEY]')\n\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]] || [[ \"${MC_VERSION}\" == \"1.8.9\" ]]; then\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar\n fi\n else\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}*.jar\n fi\nfi\n\n#Adding .jar when not eding by SERVER_JARFILE\nif [[ ! $SERVER_JARFILE = *\\.jar ]]; then\n SERVER_JARFILE=\"$SERVER_JARFILE.jar\"\nfi\n\n#Downloading jars\necho -e \"Downloading forge version ${FORGE_VERSION}\"\necho -e \"Download link is ${DOWNLOAD_LINK}\"\n\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\n if curl -sSL --output /dev/null --head --fail ${DOWNLOAD_LINK}-installer.jar; then\n echo -e \"installer jar download link is valid.\"\n else\n echo -e \"link is invalid. Exiting now\"\n exit 2\n fi\nelse\n echo -e \"no download link provided. Exiting now\"\n exit 3\nfi\n\ncurl -sSL -o installer.jar ${DOWNLOAD_LINK}-installer.jar\n\n#Checking if downloaded jars exist\nif [[ ! -f ./installer.jar ]]; then\n echo \"!!! Error downloading forge version ${FORGE_VERSION} !!!\"\n exit\nfi\n\nfunction unix_args {\n echo -e \"Detected Forge 1.17 or newer version. Setting up forge unix args.\"\n ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt\n}\n\n# Delete args to support downgrading/upgrading\nrm -rf libraries/net/minecraftforge/forge\nrm unix_args.txt\n\n#Installing server\necho -e \"Installing forge server.\\n\"\nif ! java -Xmx512m -jar installer.jar --installServer; then\n echo -e \"install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}\"\n exit 4\nfi\n\nif [ -f ${FORGE_JAR} ]; then\n # For versions below 1.17 that ship with jar\n mv $FORGE_JAR $SERVER_JARFILE\nelse\n # Check if we need a symlink for 1.17+ Forge JPMS args\n if [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\n unix_args\n\n # Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives\n elif [[ $MC_VERSION == \"latest\" && $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\n unix_args\n fi\nfi\n\necho -e \"Deleting installer.jar file.\\n\"\nrm -rf installer.jar\n\necho \"-----------------------------------------\"\necho \"Installation completed...\"\necho \"-----------------------------------------\"", - "container": "ghcr.io/pelican-eggs/installers:java_8", - "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": 1 - }, - { - "name": "Forge Version", - "description": "Gets an 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 install.", - "env_variable": "FORGE_VERSION", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": [ - "nullable", - "string", - "max:32" - ], - "sort": 2 - }, - { - "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": 3 - }, - { - "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": 4 - } - ] -} \ No newline at end of file diff --git a/java/forge/forge/egg-pterodactyl-forge-enhanced.json b/java/forge/forge/egg-pterodactyl-forge-enhanced.json deleted file mode 100644 index a19f680a..00000000 --- a/java/forge/forge/egg-pterodactyl-forge-enhanced.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", - "meta": { - "update_url": null, - "version": "PTDL_v2" - }, - "exported_at": "2024-06-01T19:39:43+00:00", - "name": "Forge Enhanced", - "author": "parker@parkervcp.com", - "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.", - "features": [ - "eula", - "java_version", - "pid_limit" - ], - "docker_images": { - "Java 11": "ghcr.io/pterodactyl/yolks:java_11", - "Java 16": "ghcr.io/pterodactyl/yolks:java_16", - "Java 17": "ghcr.io/pterodactyl/yolks:java_17", - "Java 18": "ghcr.io/pterodactyl/yolks:java_18", - "Java 8": "ghcr.io/pterodactyl/yolks:java_8" - }, - "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true $( [[ ! -f unix_args.txt ]] \u0026\u0026 printf %s \"-jar {{SERVER_JARFILE}}\" || 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}", - "logs": "{}", - "startup": "{\r\n \"done\": \")! For help, type \"\r\n}", - "stop": "stop" - }, - "scripts": { - "installation": { - "container": "ghcr.io\/pelican-eggs\/installers:java_8", - "entrypoint": "bash", - "script": "#!/bin/bash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y curl jq\r\n\r\nif [[ ! -d /mnt/server ]]; then\r\n mkdir /mnt/server\r\nfi\r\n\r\ncd /mnt/server\r\n\r\n# Remove spaces from the version number to avoid issues with curl\r\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\r\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\r\nif [ -z ${SERVER_JARFILE}]; then \r\n SERVER_JARFILE=server.jar\r\nfi\r\n\r\nif [[ ! -z ${FORGE_VERSION} ]]; then\r\n DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}\r\n FORGE_JAR=forge-${FORGE_VERSION}*.jar\r\nelse\r\n JSON_DATA=$(curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json)\r\n\r\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\r\n echo -e \"getting latest version of forge.\"\r\n 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)\r\n BUILD_TYPE=latest\r\n fi\r\n\r\n if [[ \"${BUILD_TYPE}\" != \"recommended\" ]] \u0026\u0026 [[ \"${BUILD_TYPE}\" != \"latest\" ]]; then\r\n BUILD_TYPE=recommended\r\n fi\r\n\r\n echo -e \"minecraft version: ${MC_VERSION}\"\r\n echo -e \"build type: ${BUILD_TYPE}\"\r\n\r\n ## some variables for getting versions and things\r\n FILE_SITE=https://maven.minecraftforge.net/net/minecraftforge/forge/\r\n 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))')\r\n\r\n ## locating the forge version\r\n if [[ \"${VERSION_KEY}\" == \"\" ]] \u0026\u0026 [[ \"${BUILD_TYPE}\" == \"recommended\" ]]; then\r\n echo -e \"dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested.\"\r\n 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\"))')\r\n fi\r\n\r\n ## Error if the mc version set wasn't valid.\r\n if [ \"${VERSION_KEY}\" == \"\" ] || [ \"${VERSION_KEY}\" == \"null\" ]; then\r\n echo -e \"The install failed because there is no valid version of forge for the version of minecraft selected.\"\r\n exit 1\r\n fi\r\n\r\n FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY \"$VERSION_KEY\" '.promos | .[$VERSION_KEY]')\r\n\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]] || [[ \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar\r\n fi\r\n else\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}*.jar\r\n fi\r\nfi\r\n\r\n#Adding .jar when not eding by SERVER_JARFILE\r\nif [[ ! $SERVER_JARFILE = *\\.jar ]]; then\r\n SERVER_JARFILE=\"$SERVER_JARFILE.jar\"\r\nfi\r\n\r\n#Downloading jars\r\necho -e \"Downloading forge version ${FORGE_VERSION}\"\r\necho -e \"Download link is ${DOWNLOAD_LINK}\"\r\n\r\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\r\n if curl -sSL --output /dev/null --head --fail ${DOWNLOAD_LINK}-installer.jar; then\r\n echo -e \"installer jar download link is valid.\"\r\n else\r\n echo -e \"link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\nelse\r\n echo -e \"no download link provided. Exiting now\"\r\n exit 3\r\nfi\r\n\r\ncurl -sSL -o installer.jar ${DOWNLOAD_LINK}-installer.jar\r\n\r\n#Checking if downloaded jars exist\r\nif [[ ! -f ./installer.jar ]]; then\r\n echo \"!!! Error downloading forge version ${FORGE_VERSION} !!!\"\r\n exit\r\nfi\r\n\r\nfunction unix_args {\r\n echo -e \"Detected Forge 1.17 or newer version. Setting up forge unix args.\"\r\n ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt\r\n}\r\n\r\n# Delete args to support downgrading/upgrading\r\nrm -rf libraries/net/minecraftforge/forge\r\nrm unix_args.txt\r\n\r\n#Installing server\r\necho -e \"Installing forge server.\\n\"\r\njava -jar installer.jar --installServer || { echo -e \"install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}\"; exit 4; }\r\n\r\nif [ -f ${FORGE_JAR} ]; then\r\n # For versions below 1.17 that ship with jar\r\n mv $FORGE_JAR $SERVER_JARFILE\r\nelse\r\n # Check if we need a symlink for 1.17+ Forge JPMS args\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 unix_args\r\n\r\n # Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives\r\n elif [[ $MC_VERSION == \"latest\" \u0026\u0026 $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n unix_args\r\n fi\r\nfi\r\n\r\necho -e \"Deleting installer.jar file.\\n\"\r\nrm -rf installer.jar\r\n\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"" - } - }, - "variables": [ - { - "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)$/", - "field_type": "text" - }, - { - "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", - "field_type": "text" - }, - { - "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", - "field_type": "text" - }, - { - "name": "Forge Version", - "description": "Gets an 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 install.", - "env_variable": "FORGE_VERSION", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string|max:32", - "field_type": "text" - } - ] -} \ No newline at end of file diff --git a/java/forge/pterodactyl-egg-forge-minecraft.json b/java/forge/pterodactyl-egg-forge-minecraft.json new file mode 100644 index 00000000..91c1ed51 --- /dev/null +++ b/java/forge/pterodactyl-egg-forge-minecraft.json @@ -0,0 +1,80 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2025-12-31T13:05:02+00:00", + "name": "Forge Minecraft", + "author": "panel@example.com", + "description": "Minecraft Forge Server. Minecraft Forge is a modding API (Application Programming Interface), which\nmakes it easier to create mods, and also make sure mods are compatible with each other.", + "features": [ + "eula", + "java_version", + "pid_limit" + ], + "docker_images": { + "Java 21": "ghcr.io\/pelican-eggs\/yolks:java_21", + "Java 17": "ghcr.io\/pelican-eggs\/yolks:java_17", + "Java 16": "ghcr.io\/pelican-eggs\/yolks:java_16", + "Java 11": "ghcr.io\/pelican-eggs\/yolks:java_11", + "Java 8": "ghcr.io\/pelican-eggs\/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": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"\",\n \"server-port\": \"{{server.build.default.port}}\",\n \"query.port\": \"{{server.build.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", + "logs": "[]", + "stop": "stop" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\n# Forge Installation Script\n#\n# Server Files: \/mnt\/server\napt update\napt install -y curl jq\n\nif [[ ! -d \/mnt\/server ]]; then\n mkdir \/mnt\/server\nfi\n\ncd \/mnt\/server\n\n# Remove spaces from the version number to avoid issues with curl\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\n\nif [[ ! -z ${FORGE_VERSION} ]]; then\n DOWNLOAD_LINK=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/${FORGE_VERSION}\/forge-${FORGE_VERSION}\n FORGE_JAR=forge-${FORGE_VERSION}*.jar\nelse\n JSON_DATA=$(curl -sSL https:\/\/files.minecraftforge.net\/maven\/net\/minecraftforge\/forge\/promotions_slim.json)\n\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\n echo -e \"getting latest version of forge.\"\n 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)\n BUILD_TYPE=latest\n fi\n\n if [[ \"${BUILD_TYPE}\" != \"recommended\" ]] && [[ \"${BUILD_TYPE}\" != \"latest\" ]]; then\n BUILD_TYPE=recommended\n fi\n\n echo -e \"minecraft version: ${MC_VERSION}\"\n echo -e \"build type: ${BUILD_TYPE}\"\n\n ## some variables for getting versions and things\n FILE_SITE=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/\n 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))')\n\n ## locating the forge version\n if [[ \"${VERSION_KEY}\" == \"\" ]] && [[ \"${BUILD_TYPE}\" == \"recommended\" ]]; then\n echo -e \"dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested.\"\n 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\"))')\n fi\n\n ## Error if the mc version set wasn't valid.\n if [ \"${VERSION_KEY}\" == \"\" ] || [ \"${VERSION_KEY}\" == \"null\" ]; then\n echo -e \"The install failed because there is no valid version of forge for the version of minecraft selected.\"\n exit 1\n fi\n\n FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY \"$VERSION_KEY\" '.promos | .[$VERSION_KEY]')\n\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]] || [[ \"${MC_VERSION}\" == \"1.8.9\" ]]; then\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar\n fi\n else\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}\/forge-${MC_VERSION}-${FORGE_VERSION}\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}.jar\n fi\nfi\n\n#Adding .jar when not eding by SERVER_JARFILE\nif [[ ! $SERVER_JARFILE = *\\.jar ]]; then\n SERVER_JARFILE=\"$SERVER_JARFILE.jar\"\nfi\n\n#Downloading jars\necho -e \"Downloading forge version ${FORGE_VERSION}\"\necho -e \"Download link is ${DOWNLOAD_LINK}\"\n\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then\n echo -e \"installer jar download link is valid.\"\n else\n echo -e \"link is invalid. Exiting now\"\n exit 2\n fi\nelse\n echo -e \"no download link provided. Exiting now\"\n exit 3\nfi\n\ncurl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar\n\n#Checking if downloaded jars exist\nif [[ ! -f .\/installer.jar ]]; then\n echo \"!!! Error downloading forge version ${FORGE_VERSION} !!!\"\n exit\nfi\n\nfunction unix_args {\n echo -e \"Detected Forge 1.17 or newer version. Setting up forge unix args.\"\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\n}\n\n# Delete args to support downgrading\/upgrading\nrm -rf libraries\/net\/minecraftforge\/forge\nrm unix_args.txt\n\n#Installing server\necho -e \"Installing forge server.\n\"\njava -jar installer.jar --installServer || { echo -e \"\nInstall failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}.\nShould 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! \nOtherwise, the Forge installer will not have enough memory.\"; exit 4; }\n\n# Check if we need a symlink for 1.17+ Forge JPMS args\nif [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\n unix_args\n\n# Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives\nelif [[ $MC_VERSION == \"latest\" && $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\n unix_args\nelse\n # For versions below 1.17 that ship with jar\n mv $FORGE_JAR $SERVER_JARFILE\nfi\n\necho -e \"Deleting installer.jar file.\n\"\nrm -rf installer.jar\necho -e \"Installation process is completed\"", + "container": "ghcr.io\/pelican-eggs\/installers:java_8", + "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", + "field_type": "text" + }, + { + "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\\.\\-]+$\/", + "field_type": "text" + }, + { + "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", + "field_type": "text" + }, + { + "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)$\/", + "field_type": "text" + } + ] +} \ No newline at end of file diff --git a/java/paper/egg-paper.json b/java/paper/egg-paper.json deleted file mode 100644 index 3f0108d1..00000000 --- a/java/paper/egg-paper.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", - "meta": { - "version": "PLCN_v3", - "update_url": null - }, - "exported_at": "2025-12-11T14:26:49+00:00", - "name": "Paper", - "author": "parker@pterodactyl.io", - "uuid": "150956be-4164-4086-9057-631ae95505e9", - "description": "High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies.", - "image": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5OTUuMyA5OTUuMzEiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTS0uMDA1IDQ5OC43MjggNDk2LjYwNy4wMzJsNDk4LjY5NSA0OTYuNjEyLTQ5Ni42MSA0OTguNjk2eiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJiIj48cGF0aCBmaWxsPSJub25lIiBkPSJNNy43MDIgNDEwLjQ0NiA1ODQuODQ2IDcuNjc0IDk4Ny42MTggNTg0LjgyIDQxMC40NzMgOTg3LjU5eiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjIj48cGF0aCBmaWxsPSJub25lIiBkPSJtMjguMzUzIDMzMi4wNDcgNjM0Ljg2LTMwMy43NjUgMzAzLjc2NSA2MzQuODYtNjM0Ljg2IDMwMy43NjV6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImQiPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Im03MS41NTkgMjQwLjU0IDY4My4yMS0xNjguOTUyIDE2OC45NSA2ODMuMjFMMjQwLjUxIDkyMy43NXoiLz48L2NsaXBQYXRoPjwvZGVmcz48cGF0aCBmaWxsPSIjZjdlMzQ2IiBkPSJNLjAwNSA0OTguNzI4IDQ5Ni42MTcuMDMybDQ5OC42OTUgNDk2LjYxMi00OTYuNjEgNDk4LjY5NnoiLz48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNhNDk3MzEiIGQ9Ik0zLjUyNSA0MzguNDIgNTU2LjgzMSAzLjQ4bDQzNC45NCA1NTMuMzA3LTU1My4zMDYgNDM0Ljk0eiIvPjwvZz48cGF0aCBmaWxsPSIjNDI4ZWRiIiBkPSJNNy42OTggNDEwLjQ1NCA1ODQuODQyIDcuNjgzbDQwMi43NzEgNTc3LjE0NEw0MTAuNDcgOTg3LjU5OHoiLz48ZyBjbGlwLXBhdGg9InVybCgjYikiPjxwYXRoIGZpbGw9IiMyYjVmOTIiIGQ9Ik0xOC45OTkgMzYxLjQ2NCA2MzMuODMyIDE4Ljk3bDM0Mi40OTIgNjE0LjgzMy02MTQuODMyIDM0Mi40OTJ6Ii8+PC9nPjxwYXRoIGZpbGw9IiM5NmM5M2QiIGQ9Im0yOC4zNjYgMzMyLjA1MiA2MzQuODYtMzAzLjc2NSAzMDMuNzY1IDYzNC44Ni02MzQuODYgMzAzLjc2NXoiLz48ZyBjbGlwLXBhdGg9InVybCgjYykiPjxwYXRoIGZpbGw9IiM2Yzk4M2YiIGQ9Ik01OC43NTcgMjYzLjA2OCA3MzIuMjYgNTguODI3IDkzNi41IDczMi4zMyAyNjIuOTk5IDkzNi41N3oiLz48L2c+PHBhdGggZmlsbD0iI2ZkNGY1NyIgZD0ibTcxLjU2NiAyNDAuNTM3IDY4My4yMS0xNjguOTUgMTY4Ljk1MSA2ODMuMjEtNjgzLjIxIDE2OC45NXoiLz48ZyBjbGlwLXBhdGg9InVybCgjZCkiPjxwYXRoIGZpbGw9IiNiMDM2M2MiIGQ9Im0xMjkuNzgxIDE2Mi40OTIgNzAzLjAyNi0zMi43ODUgMzIuNzg1IDcwMy4wMjYtNzAzLjAyNiAzMi43ODV6Ii8+PC9nPjxwYXRoIGZpbGw9IiMzZDNkM2QiIGQ9Ik0xNDUuNzYgMTQ1Ljc2aDcwMy43OXY3MDMuNzlIMTQ1Ljc2eiIvPjxwYXRoIGZpbGw9IiM0NzQ3NDciIGQ9Ik0xNjQuNjEgMTY0LjZIODMwLjd2NjY2LjA5SDE2NC42MXoiLz48ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik01NTQuNDUgNDYyLjMyYy01NC4zOSA0Mi4xMy02OS4yMyA1Ny4yMi0xNjQuMzUgMTI3LjZsLTkuNjItNC44NGM1MS42LTQxLjcgMTI3LjU4LTEwMi42MiAxNzkuMTQtMTQ0LjI2IDE5LjI1LTE1LjI4IDM4LjY5LTM5LjExIDU3LjctNTQuOTF6bS0yMS43OCAxODguNzZjMy40NiAxLjcyIDYuMjUgMi42IDkuNjIgNC4zLTI2LjAzIDIzLjEyLTUzLjc2IDQ5LjI1LTc4Ljk2IDczLjYxLTQuODkgMi4zLTkuMzMgMS43OS0xMy4zMi0xLjU0bDE4LjQ1LTE5LjQ3YTQzMzAgNDMzMCAwIDAgMCA1Ny4zOS01NC44MmMzLjItMi40IDMuMTItMy43MiA2LjgzLTIuMDhabTExMy42NSA0Mi41NWMzLjcyLTIuMzEgNS42Ni00LjEyIDcuMDctNy42NSAxOS44Ny0xMjYuNjIgNDAuOTktMjUyLjk2IDYzLjM1LTM3OS4wNiA1LjA5LTI1LjMyIDYuMDgtMjEuNzYgNi4zNC0zMy43OSAxMS40MyAxLjc3IDE2LjE4IDguNDYgMTQuMjUgMjAuMDYtNS4zIDMyLjUzLTExLjI5IDY0LjkxLTE3Ljk1IDk3LjE0LTE1LjQxIDk0Ljc1LTMwLjk5IDE4OS40Ni00Ny4yNiAyODQuMDYtMS4zNyAxMC40NC0yLjE1IDE3LjIxLTQuNDcgMjEuMDktMy42OCA0LjUyLTguNDMgNi4xLTE0LjI1IDQuNzUtNC44My0xLjMzLTMuNzgtMS4xLTkuNjgtMy4zNGwtMy4yMS0xLjMzczMuOTktLjk1IDUuODItMS45M1oiLz48cGF0aCBmaWxsPSIjOTk5IiBkPSJNNTMyLjY3IDY1MS4wOWMtMS4yMy0uMTQtMi40OC0uMzUtMy41OS40NWEyMDA5IDIwMDkgMCAwIDAtNjIuOSA2MC42NWMtLjEzLS45NS4wMi0xLjg0LjQ1LTIuNyAzLjI5LTQuNzkgNS44OS04LjU3IDkuMTgtMTMuMzYuNjUtMS42My41NC0zLjA3LjQ0LTQuMDktMi4zOC0yNS41NS0xMC4wNS00OS40Ni0yMS43NS03Mi40MS0uMjUtLjQ4LjI1LTEuMjEgMS4zNS0uOSAyNS44NyAxMC4zNiA1MS40OCAyMS4xNSA3Ni44MiAzMi4zNVoiLz48cGF0aCBmaWxsPSIjY2NjIiBkPSJNNTU5LjYzIDQ0MC44M2E4NTM3IDg1MzcgMCAwIDEtMTgxLjk1IDE0Ni40NmMtMzYuNS0xNC44NC03Mi45Ni0yOS44LTEwOS4zNy00NC44Ny0xNC4wOC01LjgzLTE0LjAzLTE4LjU0LTEuNi0yNy4wMS02Ljc0IDguNTQtNS41NCAxNS44OCAzLjU5IDIyLjAxIDEyLjQ5IDUuMyAxMDYuNDEgNDQuMjUgMTA2LjQxIDQ0LjI1cy0uNzYtMy4wMyAxODIuOTEtMTQwLjg0WiIvPjxwYXRoIGZpbGw9IiNiMmIyYjIiIGQ9Ik02MzYuOSA2ODcuOTNjMTMuOTQgNC45OCAxMy40MyAxLjUgMTkuMzktNC4wOC0uNTEgMy45Ni0uOTUgOC4zLTUuOTkgMTEuMTItMy40NiAyLTYuNTkgMS45My05LjgxLjZhMTgyMCAxODIwIDAgMCAxLTEwNy44Mi00NC40OGMtMjUuMzQtMTEuMi01MC45NS0yMS45OC03Ni44Mi0zMi4zNWwtMS4zNS45YzEyLjY0IDIzLjYyIDE5Ljk4IDQ4Ljc3IDIyLjAxIDc1LjQ4LTMuMjkgNC43OS02LjU5IDkuNTgtOS44OCAxNC4zOHEtLjY0NSAxLjI3NS0uNDUgMi43bC0xNi4xNyAxNS4yN2MtNC4wNi0uMDEtNi4zMS0yLjExLTYuNzQtNi4yOS0uNTktMzMuNzMtLjYtNjcuNDYtLjAyLTEwMS4xOSAwLS40MS4wMS0uODEuMDItMS4yNC4xNS01LjA3IDUuMjYtNi41MiAxMC4zMy00Ljk0cTkxLjg0NSAzNi42NzUgMTgzLjMgNzQuMTNaIi8+PHBhdGggZmlsbD0iI2NjYyIgZD0iTTcxOS42NCAyNjcuOTNjNSAzLjk4IDQuMjMgMTAuNTcgMy4yOCAxNi4xNy0yMi42MyAxMzIuODItNDQuNTYgMjY2LjMyLTY2LjUzIDM5OS4yLS4yMSAxLjI0LS43NiA0LjE1LTIuNDIgNS42NS0zLjc3IDMtNy4xNyAyLjQ4LTE3LjA2LTEuMDEgMS40My0zLjM3IDIuNDgtNi45NiAzLjE0LTEwLjc4IDI1LjM0LTEyOS40MSA1MS4yNS0yNTguNjUgNzcuNzItMzg3LjcxIDIuMzMtMTMuNjUgMi4xMy05LjcxIDEuODctMjEuNVoiLz48cGF0aCBmaWxsPSIjZjJmMmYyIiBkPSJNNzE5LjY0IDI2Ny45M2MuOTIgMTAuNiAxLjA1IDUuODktMS44NyAyMS41LTI2LjQ3IDEyOS4wNi01Mi4zOCAyNTguMy03Ny43MiAzODcuNzEtLjY2IDMuODItMS43MSA3LjQxLTMuMTQgMTAuNzhxLTkxLjQ1NS0zNy40NTUtMTgzLjMtNzQuMTNjLTUuMDgtMS41OC04LjUyLjA3LTEwLjMzIDQuOTQtLjYgMzQuMTQtLjYgNjguMjkgMCAxMDIuNDMuNDMgNC4xOCAyLjY4IDYuMjggNi43NCA2LjI5LTEuMTIgMS4xNS0zLjc4IDEuMDctMy43OCAxLjA3cy0xMS45Mi0uNjktMTMuMzYtMy41NGMtLjM3LS43MS0uMzgtMS40Ni0uMzktMi4wOC0uMTgtMzYuMy0uNjEtNzIuMzktMS4yOS0xMDguMjktLjAyLS44NyAwLTEuNzIuMzUtMy4yNHMxLjM2LTMuNDYgMi43NS01LjIyYTExNjExIDExNjExIDAgMCAwIDE1OS4wNC0xOTEuMzkgMTM0MyAxMzQzIDAgMCAxLTMzLjY5IDI2LjA2QzQwMi40NCA1NTguNzggMzc2Ljc0IDU4MS42NiAzNzYuNzQgNTgxLjY2cy03MS45LTI5LjYzLTEwNi40MS00NC4yNWMtOS4xMy02LjEzLTEwLjMzLTEzLjQ3LTMuNTktMjIuMDFhNTA2MjggNTA2MjggMCAwIDAgNDI5LjQ5LTI0Ni42NGM1LjI4LTMuMjYgMTAuOTctNC40NiAxNy4wNy0zLjU5IDEuMzEuMTMgNC4xMS41OCA2LjM2IDIuNzZaIi8+PC9nPjwvc3ZnPg==", - "tags": [ - "minecraft" - ], - "features": [ - "eula", - "java_version", - "pid_limit" - ], - "docker_images": { - "Java 21": "ghcr.io/pelican-eggs/yolks:java_21", - "Java 17": "ghcr.io/pelican-eggs/yolks:java_17", - "Java 16": "ghcr.io/pelican-eggs/yolks:java_16", - "Java 11": "ghcr.io/pelican-eggs/yolks:java_11", - "Java 8": "ghcr.io/pelican-eggs/yolks:java_8" - }, - "file_denylist": [], - "startup_commands": { - "Default": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}" - }, - "config": { - "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"\",\n \"server-port\": \"{{server.allocations.default.port}}\",\n \"query.port\": \"{{server.allocations.default.port}}\"\n }\n }\n}", - "startup": "{\n \"done\": \")! For help, type \"\n}", - "logs": "[]", - "stop": "stop" - }, - "scripts": { - "installation": { - "script": "#!/bin/ash\n# Paper Installation Script\n#\n# Server Files: /mnt/server\nPROJECT=paper\n\nif [ -n \"${DL_PATH}\" ]; then\n\techo -e \"Using supplied download url: ${DL_PATH}\"\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\nelse\n\tVER_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions | any(.[]; index($VERSION))' | grep -m1 true`\n\tLATEST_VERSION=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r '.versions | to_entries | .[0].value[0]'`\n\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\n\telse\n\t\techo -e \"Specified version not found. Defaulting to the latest ${PROJECT} version\"\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\n\tfi\n\n\tBUILD_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\n\tLATEST_BUILD=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[0]'`\n\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\n\telse\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\n\t\tBUILD_NUMBER=${LATEST_BUILD}\n\tfi\n\n\techo \"Version being downloaded\"\n\techo -e \"Project: ${PROJECT}\"\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\n\techo -e \"Build: ${BUILD_NUMBER}\"\n\tDOWNLOAD_URL=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER} | jq -r '.downloads.\"server:default\".url'`\nfi\n\ncd /mnt/server\n\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\n\nif [ -f ${SERVER_JARFILE} ]; then\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\nfi\n\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\n\nif [ ! -f server.properties ]; then\n echo -e \"Downloading MC server.properties\"\n curl -o server.properties https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/server.properties\nfi", - "container": "ghcr.io/pelican-eggs/installers:alpine", - "entrypoint": "ash" - } - }, - "variables": [ - { - "name": "Build Number", - "description": "The build number for the paper release.\r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", - "env_variable": "BUILD_NUMBER", - "default_value": "latest", - "user_viewable": true, - "user_editable": true, - "rules": [ - "required", - "string", - "max:20" - ], - "sort": 4 - }, - { - "name": "Download Path", - "description": "A URL to use to download a server.jar rather than the ones in the install script. This is not user\nviewable.", - "env_variable": "DL_PATH", - "default_value": "", - "user_viewable": false, - "user_editable": false, - "rules": [ - "nullable", - "string" - ], - "sort": 3 - }, - { - "name": "Minecraft Version", - "description": "The version of minecraft to download. \r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest.", - "env_variable": "MINECRAFT_VERSION", - "default_value": "latest", - "user_viewable": true, - "user_editable": true, - "rules": [ - "nullable", - "string", - "max:20" - ], - "sort": 1 - }, - { - "name": "Server Jar File", - "description": "The name of the server jarfile to run the server with.", - "env_variable": "SERVER_JARFILE", - "default_value": "server.jar", - "user_viewable": true, - "user_editable": true, - "rules": [ - "required", - "regex:/^([\\w\\d._-]+)(\\.jar)$/" - ], - "sort": 2 - } - ] -} \ No newline at end of file diff --git a/java/paper/egg-paper.yaml b/java/paper/egg-paper.yaml new file mode 100644 index 00000000..8a1006ea --- /dev/null +++ b/java/paper/egg-paper.yaml @@ -0,0 +1,142 @@ +_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL' +meta: + version: PLCN_v3 + update_url: 'https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/paper/egg-paper.yaml' +exported_at: '2025-12-11T12:51:20+00:00' +name: Paper +author: parker@example.com +uuid: 5da37ef6-58da-4169-90a6-e683e1721247 +description: 'High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies.' +image: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5OTUuMyA5OTUuMzEiPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTS0uMDA1IDQ5OC43MjggNDk2LjYwNy4wMzJsNDk4LjY5NSA0OTYuNjEyLTQ5Ni42MSA0OTguNjk2eiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJiIj48cGF0aCBmaWxsPSJub25lIiBkPSJNNy43MDIgNDEwLjQ0NiA1ODQuODQ2IDcuNjc0IDk4Ny42MTggNTg0LjgyIDQxMC40NzMgOTg3LjU5eiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjIj48cGF0aCBmaWxsPSJub25lIiBkPSJtMjguMzUzIDMzMi4wNDcgNjM0Ljg2LTMwMy43NjUgMzAzLjc2NSA2MzQuODYtNjM0Ljg2IDMwMy43NjV6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImQiPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Im03MS41NTkgMjQwLjU0IDY4My4yMS0xNjguOTUyIDE2OC45NSA2ODMuMjFMMjQwLjUxIDkyMy43NXoiLz48L2NsaXBQYXRoPjwvZGVmcz48cGF0aCBmaWxsPSIjZjdlMzQ2IiBkPSJNLjAwNSA0OTguNzI4IDQ5Ni42MTcuMDMybDQ5OC42OTUgNDk2LjYxMi00OTYuNjEgNDk4LjY5NnoiLz48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNhNDk3MzEiIGQ9Ik0zLjUyNSA0MzguNDIgNTU2LjgzMSAzLjQ4bDQzNC45NCA1NTMuMzA3LTU1My4zMDYgNDM0Ljk0eiIvPjwvZz48cGF0aCBmaWxsPSIjNDI4ZWRiIiBkPSJNNy42OTggNDEwLjQ1NCA1ODQuODQyIDcuNjgzbDQwMi43NzEgNTc3LjE0NEw0MTAuNDcgOTg3LjU5OHoiLz48ZyBjbGlwLXBhdGg9InVybCgjYikiPjxwYXRoIGZpbGw9IiMyYjVmOTIiIGQ9Ik0xOC45OTkgMzYxLjQ2NCA2MzMuODMyIDE4Ljk3bDM0Mi40OTIgNjE0LjgzMy02MTQuODMyIDM0Mi40OTJ6Ii8+PC9nPjxwYXRoIGZpbGw9IiM5NmM5M2QiIGQ9Im0yOC4zNjYgMzMyLjA1MiA2MzQuODYtMzAzLjc2NSAzMDMuNzY1IDYzNC44Ni02MzQuODYgMzAzLjc2NXoiLz48ZyBjbGlwLXBhdGg9InVybCgjYykiPjxwYXRoIGZpbGw9IiM2Yzk4M2YiIGQ9Ik01OC43NTcgMjYzLjA2OCA3MzIuMjYgNTguODI3IDkzNi41IDczMi4zMyAyNjIuOTk5IDkzNi41N3oiLz48L2c+PHBhdGggZmlsbD0iI2ZkNGY1NyIgZD0ibTcxLjU2NiAyNDAuNTM3IDY4My4yMS0xNjguOTUgMTY4Ljk1MSA2ODMuMjEtNjgzLjIxIDE2OC45NXoiLz48ZyBjbGlwLXBhdGg9InVybCgjZCkiPjxwYXRoIGZpbGw9IiNiMDM2M2MiIGQ9Im0xMjkuNzgxIDE2Mi40OTIgNzAzLjAyNi0zMi43ODUgMzIuNzg1IDcwMy4wMjYtNzAzLjAyNiAzMi43ODV6Ii8+PC9nPjxwYXRoIGZpbGw9IiMzZDNkM2QiIGQ9Ik0xNDUuNzYgMTQ1Ljc2aDcwMy43OXY3MDMuNzlIMTQ1Ljc2eiIvPjxwYXRoIGZpbGw9IiM0NzQ3NDciIGQ9Ik0xNjQuNjEgMTY0LjZIODMwLjd2NjY2LjA5SDE2NC42MXoiLz48ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik01NTQuNDUgNDYyLjMyYy01NC4zOSA0Mi4xMy02OS4yMyA1Ny4yMi0xNjQuMzUgMTI3LjZsLTkuNjItNC44NGM1MS42LTQxLjcgMTI3LjU4LTEwMi42MiAxNzkuMTQtMTQ0LjI2IDE5LjI1LTE1LjI4IDM4LjY5LTM5LjExIDU3LjctNTQuOTF6bS0yMS43OCAxODguNzZjMy40NiAxLjcyIDYuMjUgMi42IDkuNjIgNC4zLTI2LjAzIDIzLjEyLTUzLjc2IDQ5LjI1LTc4Ljk2IDczLjYxLTQuODkgMi4zLTkuMzMgMS43OS0xMy4zMi0xLjU0bDE4LjQ1LTE5LjQ3YTQzMzAgNDMzMCAwIDAgMCA1Ny4zOS01NC44MmMzLjItMi40IDMuMTItMy43MiA2LjgzLTIuMDhabTExMy42NSA0Mi41NWMzLjcyLTIuMzEgNS42Ni00LjEyIDcuMDctNy42NSAxOS44Ny0xMjYuNjIgNDAuOTktMjUyLjk2IDYzLjM1LTM3OS4wNiA1LjA5LTI1LjMyIDYuMDgtMjEuNzYgNi4zNC0zMy43OSAxMS40MyAxLjc3IDE2LjE4IDguNDYgMTQuMjUgMjAuMDYtNS4zIDMyLjUzLTExLjI5IDY0LjkxLTE3Ljk1IDk3LjE0LTE1LjQxIDk0Ljc1LTMwLjk5IDE4OS40Ni00Ny4yNiAyODQuMDYtMS4zNyAxMC40NC0yLjE1IDE3LjIxLTQuNDcgMjEuMDktMy42OCA0LjUyLTguNDMgNi4xLTE0LjI1IDQuNzUtNC44My0xLjMzLTMuNzgtMS4xLTkuNjgtMy4zNGwtMy4yMS0xLjMzczMuOTktLjk1IDUuODItMS45M1oiLz48cGF0aCBmaWxsPSIjOTk5IiBkPSJNNTMyLjY3IDY1MS4wOWMtMS4yMy0uMTQtMi40OC0uMzUtMy41OS40NWEyMDA5IDIwMDkgMCAwIDAtNjIuOSA2MC42NWMtLjEzLS45NS4wMi0xLjg0LjQ1LTIuNyAzLjI5LTQuNzkgNS44OS04LjU3IDkuMTgtMTMuMzYuNjUtMS42My41NC0zLjA3LjQ0LTQuMDktMi4zOC0yNS41NS0xMC4wNS00OS40Ni0yMS43NS03Mi40MS0uMjUtLjQ4LjI1LTEuMjEgMS4zNS0uOSAyNS44NyAxMC4zNiA1MS40OCAyMS4xNSA3Ni44MiAzMi4zNVoiLz48cGF0aCBmaWxsPSIjY2NjIiBkPSJNNTU5LjYzIDQ0MC44M2E4NTM3IDg1MzcgMCAwIDEtMTgxLjk1IDE0Ni40NmMtMzYuNS0xNC44NC03Mi45Ni0yOS44LTEwOS4zNy00NC44Ny0xNC4wOC01LjgzLTE0LjAzLTE4LjU0LTEuNi0yNy4wMS02Ljc0IDguNTQtNS41NCAxNS44OCAzLjU5IDIyLjAxIDEyLjQ5IDUuMyAxMDYuNDEgNDQuMjUgMTA2LjQxIDQ0LjI1cy0uNzYtMy4wMyAxODIuOTEtMTQwLjg0WiIvPjxwYXRoIGZpbGw9IiNiMmIyYjIiIGQ9Ik02MzYuOSA2ODcuOTNjMTMuOTQgNC45OCAxMy40MyAxLjUgMTkuMzktNC4wOC0uNTEgMy45Ni0uOTUgOC4zLTUuOTkgMTEuMTItMy40NiAyLTYuNTkgMS45My05LjgxLjZhMTgyMCAxODIwIDAgMCAxLTEwNy44Mi00NC40OGMtMjUuMzQtMTEuMi01MC45NS0yMS45OC03Ni44Mi0zMi4zNWwtMS4zNS45YzEyLjY0IDIzLjYyIDE5Ljk4IDQ4Ljc3IDIyLjAxIDc1LjQ4LTMuMjkgNC43OS02LjU5IDkuNTgtOS44OCAxNC4zOHEtLjY0NSAxLjI3NS0uNDUgMi43bC0xNi4xNyAxNS4yN2MtNC4wNi0uMDEtNi4zMS0yLjExLTYuNzQtNi4yOS0uNTktMzMuNzMtLjYtNjcuNDYtLjAyLTEwMS4xOSAwLS40MS4wMS0uODEuMDItMS4yNC4xNS01LjA3IDUuMjYtNi41MiAxMC4zMy00Ljk0cTkxLjg0NSAzNi42NzUgMTgzLjMgNzQuMTNaIi8+PHBhdGggZmlsbD0iI2NjYyIgZD0iTTcxOS42NCAyNjcuOTNjNSAzLjk4IDQuMjMgMTAuNTcgMy4yOCAxNi4xNy0yMi42MyAxMzIuODItNDQuNTYgMjY2LjMyLTY2LjUzIDM5OS4yLS4yMSAxLjI0LS43NiA0LjE1LTIuNDIgNS42NS0zLjc3IDMtNy4xNyAyLjQ4LTE3LjA2LTEuMDEgMS40My0zLjM3IDIuNDgtNi45NiAzLjE0LTEwLjc4IDI1LjM0LTEyOS40MSA1MS4yNS0yNTguNjUgNzcuNzItMzg3LjcxIDIuMzMtMTMuNjUgMi4xMy05LjcxIDEuODctMjEuNVoiLz48cGF0aCBmaWxsPSIjZjJmMmYyIiBkPSJNNzE5LjY0IDI2Ny45M2MuOTIgMTAuNiAxLjA1IDUuODktMS44NyAyMS41LTI2LjQ3IDEyOS4wNi01Mi4zOCAyNTguMy03Ny43MiAzODcuNzEtLjY2IDMuODItMS43MSA3LjQxLTMuMTQgMTAuNzhxLTkxLjQ1NS0zNy40NTUtMTgzLjMtNzQuMTNjLTUuMDgtMS41OC04LjUyLjA3LTEwLjMzIDQuOTQtLjYgMzQuMTQtLjYgNjguMjkgMCAxMDIuNDMuNDMgNC4xOCAyLjY4IDYuMjggNi43NCA2LjI5LTEuMTIgMS4xNS0zLjc4IDEuMDctMy43OCAxLjA3cy0xMS45Mi0uNjktMTMuMzYtMy41NGMtLjM3LS43MS0uMzgtMS40Ni0uMzktMi4wOC0uMTgtMzYuMy0uNjEtNzIuMzktMS4yOS0xMDguMjktLjAyLS44NyAwLTEuNzIuMzUtMy4yNHMxLjM2LTMuNDYgMi43NS01LjIyYTExNjExIDExNjExIDAgMCAwIDE1OS4wNC0xOTEuMzkgMTM0MyAxMzQzIDAgMCAxLTMzLjY5IDI2LjA2QzQwMi40NCA1NTguNzggMzc2Ljc0IDU4MS42NiAzNzYuNzQgNTgxLjY2cy03MS45LTI5LjYzLTEwNi40MS00NC4yNWMtOS4xMy02LjEzLTEwLjMzLTEzLjQ3LTMuNTktMjIuMDFhNTA2MjggNTA2MjggMCAwIDAgNDI5LjQ5LTI0Ni42NGM1LjI4LTMuMjYgMTAuOTctNC40NiAxNy4wNy0zLjU5IDEuMzEuMTMgNC4xMS41OCA2LjM2IDIuNzZaIi8+PC9nPjwvc3ZnPg==' +tags: + - minecraft +features: + - eula + - java_version + - pid_limit +docker_images: + 'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21' + 'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17' + 'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16' + 'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11' + 'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8' +file_denylist: { } +startup_commands: + Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}' +config: + files: + server.properties: + parser: properties + find: + server-ip: '' + server-port: '{{server.allocations.default.port}}' + query.port: '{{server.allocations.default.port}}' + startup: + done: ')! For help, type ' + logs: { } + stop: stop +scripts: + installation: + script: |- + #!/bin/ash + # Paper Installation Script + # + # Server Files: /mnt/server + PROJECT=paper + + if [ -n "${DL_PATH}" ]; then + echo -e "Using supplied download url: ${DL_PATH}" + DOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')` + else + VER_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions | any(.[]; index($VERSION))' | grep -m1 true` + LATEST_VERSION=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r '.versions | to_entries | .[0].value[0]'` + + if [ "${VER_EXISTS}" == "true" ]; then + echo -e "Version is valid. Using version ${MINECRAFT_VERSION}" + else + echo -e "Specified version not found. Defaulting to the latest ${PROJECT} version" + MINECRAFT_VERSION=${LATEST_VERSION} + fi + + BUILD_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true` + LATEST_BUILD=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[0]'` + + if [ "${BUILD_EXISTS}" == "true" ]; then + echo -e "Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}" + else + echo -e "Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}" + BUILD_NUMBER=${LATEST_BUILD} + fi + + echo "Version being downloaded" + echo -e "Project: ${PROJECT}" + echo -e "MC Version: ${MINECRAFT_VERSION}" + echo -e "Build: ${BUILD_NUMBER}" + DOWNLOAD_URL=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER} | jq -r '.downloads."server:default".url'` + fi + + cd /mnt/server + + echo -e "Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}" + + if [ -f ${SERVER_JARFILE} ]; then + mv ${SERVER_JARFILE} ${SERVER_JARFILE}.old + fi + + curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL} + + if [ ! -f server.properties ]; then + echo -e "Downloading MC server.properties" + curl -o server.properties https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/server.properties + fi + container: 'ghcr.io/pelican-eggs/installers:alpine' + entrypoint: ash +variables: + - + name: 'Build Number' + description: "The build number for the paper release.\r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest." + env_variable: BUILD_NUMBER + default_value: latest + user_viewable: true + user_editable: true + rules: + - required + - string + - 'max:20' + sort: 4 + - + name: 'Download Path' + description: |- + A URL to use to download a server.jar rather than the ones in the install script. This is not user + viewable. + env_variable: DL_PATH + default_value: '' + user_viewable: false + user_editable: false + rules: + - nullable + - string + sort: 3 + - + name: 'Minecraft Version' + description: "The version of minecraft to download. \r\n\r\nLeave at latest to always get the latest version. Invalid versions will default to latest." + env_variable: MINECRAFT_VERSION + default_value: latest + user_viewable: true + user_editable: true + rules: + - nullable + - string + - 'max:20' + sort: 1 + - + name: 'Server Jar File' + description: 'The name of the server jarfile to run the server with.' + env_variable: SERVER_JARFILE + default_value: server.jar + user_viewable: true + user_editable: true + rules: + - required + - 'regex:/^([\w\d._-]+)(\.jar)$/' + sort: 2 diff --git a/java/paper/egg-pterodactyl-paper.json b/java/paper/pterodactyl-egg-paper.json similarity index 52% rename from java/paper/egg-pterodactyl-paper.json rename to java/paper/pterodactyl-egg-paper.json index dc7659ef..1ae1f2fe 100644 --- a/java/paper/egg-pterodactyl-paper.json +++ b/java/paper/pterodactyl-egg-paper.json @@ -4,9 +4,9 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2025-12-11T14:26:49+00:00", + "exported_at": "2025-12-31T13:01:49+00:00", "name": "Paper", - "author": "parker@pterodactyl.io", + "author": "parker@example.com", "description": "High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies.", "features": [ "eula", @@ -14,11 +14,11 @@ "pid_limit" ], "docker_images": { - "Java 8": "ghcr.io\/parkervcp\/yolks:java_8", - "Java 11": "ghcr.io\/parkervcp\/yolks:java_11", - "Java 16": "ghcr.io\/parkervcp\/yolks:java_16", - "Java 17": "ghcr.io\/parkervcp\/yolks:java_17", - "Java 21": "ghcr.io\/parkervcp\/yolks:java_21" + "Java 21": "ghcr.io\/pelican-eggs\/yolks:java_21", + "Java 17": "ghcr.io\/pelican-eggs\/yolks:java_17", + "Java 16": "ghcr.io\/pelican-eggs\/yolks:java_16", + "Java 11": "ghcr.io\/pelican-eggs\/yolks:java_11", + "Java 8": "ghcr.io\/pelican-eggs\/yolks:java_8" }, "file_denylist": [], "startup": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}", @@ -30,7 +30,7 @@ }, "scripts": { "installation": { - "script": "#!/bin/ash\n# Paper Installation Script\n#\n# Server Files: /mnt/server\nPROJECT=paper\n\nif [ -n \"${DL_PATH}\" ]; then\n\techo -e \"Using supplied download url: ${DL_PATH}\"\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\nelse\n\tVER_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions | any(.[]; index($VERSION))' | grep -m1 true`\n\tLATEST_VERSION=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r '.versions | to_entries | .[0].value[0]'`\n\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\n\telse\n\t\techo -e \"Specified version not found. Defaulting to the latest ${PROJECT} version\"\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\n\tfi\n\n\tBUILD_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\n\tLATEST_BUILD=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[0]'`\n\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\n\telse\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\n\t\tBUILD_NUMBER=${LATEST_BUILD}\n\tfi\n\n\techo \"Version being downloaded\"\n\techo -e \"Project: ${PROJECT}\"\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\n\techo -e \"Build: ${BUILD_NUMBER}\"\n\tDOWNLOAD_URL=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER} | jq -r '.downloads.\"server:default\".url'`\nfi\n\ncd /mnt/server\n\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\n\nif [ -f ${SERVER_JARFILE} ]; then\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\nfi\n\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\n\nif [ ! -f server.properties ]; then\n echo -e \"Downloading MC server.properties\"\n curl -o server.properties https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/server.properties\nfi", + "script": "#!\/bin\/ash\n# Paper Installation Script\n#\n# Server Files: \/mnt\/server\nPROJECT=paper\n\nif [ -n \"${DL_PATH}\" ]; then\n\techo -e \"Using supplied download url: ${DL_PATH}\"\n\tDOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g')`\nelse\n\tVER_EXISTS=`curl -s https:\/\/fill.papermc.io\/v3\/projects\/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions | any(.[]; index($VERSION))' | grep -m1 true`\n\tLATEST_VERSION=`curl -s https:\/\/fill.papermc.io\/v3\/projects\/${PROJECT} | jq -r '.versions | to_entries | .[0].value[0]'`\n\n\tif [ \"${VER_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\n\telse\n\t\techo -e \"Specified version not found. Defaulting to the latest ${PROJECT} version\"\n\t\tMINECRAFT_VERSION=${LATEST_VERSION}\n\tfi\n\n\tBUILD_EXISTS=`curl -s https:\/\/fill.papermc.io\/v3\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\n\tLATEST_BUILD=`curl -s https:\/\/fill.papermc.io\/v3\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[0]'`\n\n\tif [ \"${BUILD_EXISTS}\" == \"true\" ]; then\n\t\techo -e \"Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}\"\n\telse\n\t\techo -e \"Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}\"\n\t\tBUILD_NUMBER=${LATEST_BUILD}\n\tfi\n\n\techo \"Version being downloaded\"\n\techo -e \"Project: ${PROJECT}\"\n\techo -e \"MC Version: ${MINECRAFT_VERSION}\"\n\techo -e \"Build: ${BUILD_NUMBER}\"\n\tDOWNLOAD_URL=`curl -s https:\/\/fill.papermc.io\/v3\/projects\/${PROJECT}\/versions\/${MINECRAFT_VERSION}\/builds\/${BUILD_NUMBER} | jq -r '.downloads.\"server:default\".url'`\nfi\n\ncd \/mnt\/server\n\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\n\nif [ -f ${SERVER_JARFILE} ]; then\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\nfi\n\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\n\nif [ ! -f server.properties ]; then\n echo -e \"Downloading MC server.properties\"\n curl -o server.properties https:\/\/raw.githubusercontent.com\/pelican-eggs\/minecraft\/refs\/heads\/main\/java\/server.properties\nfi", "container": "ghcr.io\/pelican-eggs\/installers:alpine", "entrypoint": "ash" } diff --git a/java/spongevanilla/egg-pterodactyl-sponge-vanilla.json b/java/spongevanilla/egg-pterodactyl-sponge-vanilla.json index 13766d2c..95aba49c 100644 --- a/java/spongevanilla/egg-pterodactyl-sponge-vanilla.json +++ b/java/spongevanilla/egg-pterodactyl-sponge-vanilla.json @@ -1,30 +1,31 @@ { - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "update_url": null, - "version": "PTDL_v2" + "version": "PTDL_v2", + "update_url": null }, - "exported_at": "2024-06-01T19:40:12+00:00", - "name": "SpongeVanilla", - "author": "parker@parkervcp.com", - "description": "SpongeVanilla is the implementation of the Sponge API on top of Vanilla Minecraft.", + "exported_at": "2025-12-31T12:59:35+00:00", + "name": "Sponge", + "author": "panel@example.com", + "description": "A community-driven open source Minecraft: Java Edition modding platform.", "features": [ "eula", "java_version", "pid_limit" ], "docker_images": { - "Java 11": "ghcr.io/pterodactyl/yolks:java_11", - "Java 16": "ghcr.io/pterodactyl/yolks:java_16", - "Java 17": "ghcr.io/pterodactyl/yolks:java_17", - "Java 8": "ghcr.io/pterodactyl/yolks:java_8" + "Java 21": "ghcr.io\/pelican-eggs\/yolks:java_21", + "Java 17": "ghcr.io\/pelican-eggs\/yolks:java_17", + "Java 16": "ghcr.io\/pelican-eggs\/yolks:java_16", + "Java 11": "ghcr.io\/pelican-eggs\/yolks:java_11", + "Java 8": "ghcr.io\/pelican-eggs\/yolks:java_8" }, "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}", + "startup": "java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}", "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}", - "logs": "{}", - "startup": "{\r\n \"done\": \")! For help, type \",\r\n \"userInteraction\": [\r\n \"Go to eula.txt for more info.\"\r\n ]\r\n}", + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"\",\n \"server-port\": \"{{server.build.default.port}}\",\n \"query.port\": \"{{server.build.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", + "logs": "[]", "stop": "stop" }, "scripts": { @@ -36,23 +37,43 @@ }, "variables": [ { - "name": "SpongeVanilla Version", - "description": "Example 1.12.2-7.1.6\r\n\r\nIf the version fails it defaults to recommended", - "env_variable": "SV_VERSION", - "default_value": "recommended", + "name": "Forge\/Neoforge Version", + "description": "The modding api target version if set to `spongeforge` or `spongeneo`. Leave blank if using\n`spongevanilla`", + "env_variable": "FORGE_VERSION", + "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "required|string", + "rules": "string", + "field_type": "text" + }, + { + "name": "Minecraft Version", + "description": "The version of Minecraft to target. Use \"latest\" to install the latest version. Go to Settings >\nReinstall Server to apply.", + "env_variable": "MINECRAFT_VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|between:3,15", "field_type": "text" }, { "name": "Server Jar File", - "description": "The name of the Jarfile to use when running Mod.", + "description": "The name of the Jarfile to use when running Sponge.", "env_variable": "SERVER_JARFILE", "default_value": "server.jar", "user_viewable": true, "user_editable": true, - "rules": "required|regex:/^([\\w\\d._-]+)(\\.jar)$/", + "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", + "field_type": "text" + }, + { + "name": "Sponge Type", + "description": "SpongeVanilla if you are only using Sponge plugins.\nSpongeForge when using Forge mods and Sponge plugins.\nSpongeNeo when using NeoForge mods and Sponge plugins.", + "env_variable": "SPONGE_TYPE", + "default_value": "spongevanilla", + "user_viewable": true, + "user_editable": true, + "rules": "required|in:spongevanilla,spongeforge,spongeneo", "field_type": "text" } ] diff --git a/java/spongevanilla/egg-sponge-vanilla.json b/java/spongevanilla/egg-sponge-vanilla.json deleted file mode 100644 index 3e864f52..00000000 --- a/java/spongevanilla/egg-sponge-vanilla.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", - "meta": { - "version": "PTDL_v2", - "update_url": null - }, - "exported_at": "2024-06-01T19:40:12+00:00", - "name": "SpongeVanilla", - "author": "parker@parkervcp.com", - "uuid": "3828476c-ff9e-4436-8e32-a922cbd69126", - "description": "SpongeVanilla is the implementation of the Sponge API on top of Vanilla Minecraft.", - "features": [ - "eula", - "java_version", - "pid_limit" - ], - "docker_images": { - "Java 17": "ghcr.io\/pterodactyl\/yolks:java_17", - "Java 16": "ghcr.io\/pterodactyl\/yolks:java_16", - "Java 11": "ghcr.io\/pterodactyl\/yolks:java_11", - "Java 8": "ghcr.io\/pterodactyl\/yolks:java_8" - }, - "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}", - "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 \"userInteraction\": [\r\n \"Go to eula.txt for more info.\"\r\n ]\r\n}", - "logs": "{}", - "stop": "stop" - }, - "scripts": { - "installation": { - "script": "#!\/bin\/bash\r\n# spongeVanilla Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y jq curl\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n#Adding .jar when not eding by SERVER_JARFILE\r\nif [[ ! ${SERVER_JARFILE} = *\\.jar ]]; then\r\n SERVER_JARFILE=\"${SERVER_JARFILE}.jar\"\r\nfi\r\n\r\n## check spongevanilla version and default to recommended if it's invalid\r\nif [ -z ${SV_VERSION} ] || [ \"$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/${SV_VERSION})\" == \"Unknown version\" ]; then\r\n echo -e \"defaulting to recommended\"\r\n SV_VERSION=\"recommended\"\r\nfi\r\n\r\n## handle getting download linsk for sponge\r\nif [ \"${SV_VERSION}\" == \"recommended\" ]; then\r\n echo -e \"using recommended spongevanilla version\"\r\n SV_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/recommended | jq -r '.version')\r\n echo -e \"found spongevanilla Version ${SV_VERSION}\"\r\n SV_DL_LINK=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/recommended | jq -r '.artifacts.\"\".url')\r\nelif [ \"${SV_VERSION}\" == \"latest\" ]; then\r\n echo -e \"using latest SpongForge version\"\r\n SV_VERSION=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla | jq -r '.buildTypes.stable.latest.version')\r\n echo -e \"found spongevanilla Version ${SV_VERSION}\"\r\nelse\r\n echo -e \"found spongevanilla Version ${SV_VERSION}\"\r\n SV_DL_LINK=$(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/${SV_VERSION} | jq -r '.artifacts.\"\".url')\r\nfi\r\n\r\nif [ -f ${SERVER_JARFILE} ] && [ $(sha1sum server.jar | awk '{ print $1 }') == $(curl -s https:\/\/dl-api.spongepowered.org\/v1\/org.spongepowered\/spongevanilla\/downloads\/recommended | jq -r '.artifacts.\"\".sha1') ]; then\r\n echo -e \"Already have the correct spongevanilla version\"\r\nelse\r\n echo -e \"Downloading spongevanilla version ${SV_VERSION}\"\r\n echo -e \"running: curl -s ${SV_DL_LINK} -o \/mnt\/server\/mods\/spongevanilla-${SV_VERSION}.jar\"\r\n curl -s ${SV_DL_LINK} -o \/mnt\/server\/${SERVER_JARFILE}\r\nfi\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -s -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/server.properties\r\nfi\r\n\r\necho -e \"Install for spongevanilla is complete\"", - "container": "ghcr.io\/pelican-eggs\/installers:debian", - "entrypoint": "bash" - } - }, - "variables": [ - { - "name": "SpongeVanilla Version", - "description": "Example 1.12.2-7.1.6\r\n\r\nIf the version fails it defaults to recommended", - "env_variable": "SV_VERSION", - "default_value": "recommended", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "sort": null, - "field_type": "text" - }, - { - "name": "Server Jar File", - "description": "The name of the Jarfile to use when running Mod.", - "env_variable": "SERVER_JARFILE", - "default_value": "server.jar", - "user_viewable": true, - "user_editable": true, - "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", - "sort": null, - "field_type": "text" - } - ] -} \ No newline at end of file diff --git a/java/spongevanilla/egg-sponge.yaml b/java/spongevanilla/egg-sponge.yaml new file mode 100644 index 00000000..ed3897a9 --- /dev/null +++ b/java/spongevanilla/egg-sponge.yaml @@ -0,0 +1,159 @@ +_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL' +meta: + version: PLCN_v3 + update_url: 'https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/spongevanilla/egg-sponge.yaml' +exported_at: '2025-10-31T12:41:03+00:00' +name: Sponge +author: panel@example.com +uuid: f0d2f88f-1ff3-42a0-b03f-ac44c5571e6d +description: 'A community-driven open source Minecraft: Java Edition modding platform.' +image: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiBmaWxsPSIjRjdDRjBEIj48cGF0aCBkPSJNMTkwIDBIMTBDNC41IDAgMCA0LjUgMCAxMHYxODBjMCA1LjUgNC41IDEwIDEwIDEwaDE2LjFjLTEuNy00NS43LS4xLTUyLjUgMy4xLTU3IDMuOS01LjYgNS41LTYuMyAxMS40LTExIDUtNCAzLjItMTAuNS0uNC0xNS4yLTIuMi0yLjktNS4zLTYuMy03LjctOS42LTEuNS0yLjIgMi4yLTE1LjEgMy42LTE5LjggMS40LTQuNyAzLjgtMjAgMjQuOC0yNC4xIDcuOS0xLjYgMjkuNi0yLjcgNDQuNS0xLjgtLjEtLjYtLjMtMS4zLS40LTItLjMtMS4yLS41LTIuNS0uOC0zLjktLjMtMS4zLS42LTIuNy0uOS00LjEtLjMtMS40LS43LTIuOC0xLTQuMy0uNC0xLjUtLjctMi45LTEuMi00LjQtLjgtMy0xLjgtNS45LTMtOC43LS42LTEuNC0xLjItMi43LTEuOS0zLjktLjctMS4xLTEuNC0yLjEtMi0yLjUtLjEtLjEtLjItLjItLjMtLjJoLS4xLjJzLjEgMCAwIDBsLS4zLS4xaC0uMmwtLjQtLjFoLS41Yy0xLjMtLjEtMi43LS4xLTQuMiAwLTIuOS4yLTYgLjgtOSAxLjVzLTUuOSAxLjYtOC43IDIuNGMtMS4yLjQtMi4zLjgtMy40IDEuMS4xLjkuMiAxLjcuMiAyLjYgMCAxMy0xMC41IDIzLjUtMjMuNSAyMy41UzIwLjYgNDcuOSAyMC42IDM0LjlzMTAuNS0yMy41IDIzLjUtMjMuNWM4LjcgMCAxNi4zIDQuNyAyMC40IDExLjggMS0uNCAyLjEtLjggMy4yLTEuMiAyLjgtMS4xIDUuOS0yLjIgOS4xLTMuMiAzLjMtMSA2LjctMiAxMC41LTIuNSAxLjktLjMgMy45LS40IDYuMS0uM2guOGMuMyAwIC42LjEuOC4xSDk1LjdsLjMuMWguMWwuMy4xcy4yIDAgLjMuMWwuNC4xYy42LjIuOS4zIDEuMy41cy43LjMgMS4xLjVjLjcuNCAxLjMuOCAxLjkgMS4yIDEuMS45IDIgMS44IDIuNyAyLjcuOC45IDEuNCAxLjggMiAyLjcgMS4yIDEuOCAyLjEgMy41IDIuOSA1LjIgMS42IDMuNCAyLjkgNi44IDMuOSAxMGwxLjUgNC44Yy41IDEuNi44IDMuMSAxLjIgNC42LjIuNy40IDEuNS41IDIuMi4yLjcuMyAxLjQuNSAyLjEuMyAxLjQuNiAyLjguOSA0LjEuNCAyIC43IDMuOSAxIDUuNiAyMi40IDIuMiAzOS41IDUuMSA0Ny4yIDEyLjggMTEuMyAxMSAyMCA2MSAxNC4zIDEyNC41aDEwYzUuNSAwIDEwLTQuNSAxMC0xMFYxMGMwLTUuNS00LjUtMTAtMTAtMTB6Ii8+PHBhdGggZD0iTTkxLjQgMTQwLjhjLTEuMyAzLjYtMi40IDQ1LjcgMTAgNDUuN3MxMi41LTQzLjIgMTIuMS00NS43Yy0uNC0yLjQtMjAuOC0zLjUtMjIuMSAwek03NSAxMDBjLTguNS0xLjItMTMuNiA0MC4yLTEuNyA0Mi42IDExLjIgMi4yIDEwLjEtNDEuNCAxLjctNDIuNnpNMTMwLjggMTAwYy04LjUtMS4yLTEzLjYgNDAuMi0xLjcgNDIuNiAxMS4yIDIuMiAxMC4yLTQxLjQgMS43LTQyLjZ6Ii8+PC9zdmc+' +tags: + - minecraft +features: + - eula + - java_version + - pid_limit +docker_images: + 'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21' + 'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17' + 'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16' + 'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11' + 'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8' +file_denylist: { } +startup_commands: + Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}' +config: + files: + server.properties: + parser: properties + find: + server-ip: '' + server-port: '{{server.allocations.default.port}}' + query.port: '{{server.allocations.default.port}}' + startup: + done: ')! For help, type ' + logs: { } + stop: stop +scripts: + installation: + script: |- + #!/bin/ash + # Sponge Installation Script + # + # Server Files: /mnt/server + + cd /mnt/server + + if [ $MINECRAFT_VERSION = 'latest' ] || [ -z $MINECRAFT_VERSION ]; then + TARGET_VERSION_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/latest?recommended=true) + if [ -z "${TARGET_VERSION_JSON}" ]; then + echo -e "Failed to find latest recommended version!" + exit 1 + fi + echo -e "Found latest version for ${SPONGE_TYPE}" + else + if [ $SPONGE_TYPE = 'spongevanilla' ]; then + VERSIONS_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/versions?tags=,minecraft:${MINECRAFT_VERSION}&offset=0&limit=1) + else + FORGETAG='forge' + if [ $SPONGE_TYPE = 'spongeneo' ]; then + FORGETAG='neoforge' + fi + VERSIONS_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/versions?tags=,minecraft:${MINECRAFT_VERSION},${FORGETAG}:${FORGE_VERSION}&offset=0&limit=1) + fi + + if [ -z "${VERSIONS_JSON}" ]; then + echo -e "Failed to find recommended ${MINECRAFT_VERSION} version for ${SPONGE_TYPE} ${FORGE_VERSION}!" + exit 1 + fi + + VERSION_KEY=$(echo $VERSIONS_JSON | jq -r '.artifacts | to_entries[0].key') + TARGET_VERSION_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/versions/${VERSION_KEY}) + + if [ -z "${TARGET_VERSION_JSON}" ]; then + echo -e "Failed to find ${VERSION_KEY} for ${SPONGE_TYPE} ${FORGE_VERSION}!" + exit 1 + fi + + echo -e "Found ${MINECRAFT_VERSION} for ${SPONGE_TYPE}" + fi + + TARGET_VERSION=`echo $TARGET_VERSION_JSON | jq '.assets[] | select(.classifier == "universal")'` + if [ -z "${TARGET_VERSION}" ]; then + TARGET_VERSION=`echo $TARGET_VERSION_JSON | jq '.assets[] | select(.classifier == "" and .extension == "jar")'` + fi + + if [ -z "${TARGET_VERSION}" ]; then + echo -e "Failed to get download url data from the selected version" + exit 1 + fi + + SPONGE_URL=$(echo $TARGET_VERSION | jq -r '.downloadUrl') + CHECKSUM=$(echo $TARGET_VERSION | jq -r '.md5') + echo -e "Found file at ${SPONGE_URL} with checksum ${CHECKSUM}" + + echo -e "running: curl -o ${SERVER_JARFILE} ${SPONGE_URL}" + curl -o ${SERVER_JARFILE} ${SPONGE_URL} + + if [ $(basename $(md5sum ${SERVER_JARFILE})) = ${CHECKSUM} ] ; then + echo "Checksum passed" + else + echo "Checksum failed" + fi + + echo -e "Install Complete" + container: 'ghcr.io/pelican-eggs/installers:alpine' + entrypoint: ash +variables: + - + name: 'Forge/Neoforge Version' + description: |- + The modding api target version if set to `spongeforge` or `spongeneo`. Leave blank if using + `spongevanilla` + env_variable: FORGE_VERSION + default_value: '' + user_viewable: true + user_editable: true + rules: + - string + sort: 3 + - + name: 'Minecraft Version' + description: |- + The version of Minecraft to target. Use "latest" to install the latest version. Go to Settings > + Reinstall Server to apply. + env_variable: MINECRAFT_VERSION + default_value: latest + user_viewable: true + user_editable: true + rules: + - required + - string + - 'between:3,15' + sort: 1 + - + name: 'Server Jar File' + description: 'The name of the Jarfile to use when running Sponge.' + env_variable: SERVER_JARFILE + default_value: server.jar + user_viewable: true + user_editable: true + rules: + - required + - 'regex:/^([\w\d._-]+)(\.jar)$/' + sort: 4 + - + name: 'Sponge Type' + description: |- + SpongeVanilla if you are only using Sponge plugins. + SpongeForge when using Forge mods and Sponge plugins. + SpongeNeo when using NeoForge mods and Sponge plugins. + env_variable: SPONGE_TYPE + default_value: spongevanilla + user_viewable: true + user_editable: true + rules: + - required + - 'in:spongevanilla,spongeforge,spongeneo' + sort: 2 diff --git a/java/vanilla/egg-vanilla-minecraft.yaml b/java/vanilla/egg-vanilla-minecraft.yaml new file mode 100644 index 00000000..2a62e603 --- /dev/null +++ b/java/vanilla/egg-vanilla-minecraft.yaml @@ -0,0 +1,99 @@ +_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL' +meta: + version: PLCN_v3 + update_url: 'https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/vanilla/egg-vanilla-minecraft.yaml' +exported_at: '2025-10-31T12:35:33+00:00' +name: 'Vanilla Minecraft' +author: panel@example.com +uuid: 9ac39f3d-0c34-4d93-8174-c52ab9e6c57b +description: |- + Minecraft is a game about placing blocks and going on adventures. Explore randomly generated worlds + and build amazing things from the simplest of homes to the grandest of castles. Play in Creative + Mode with unlimited resources or mine deep in Survival Mode, crafting weapons and armor to fend off + dangerous mobs. Do all this alone or with friends. +image: 'data:image/png;base64,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' +tags: + - minecraft +features: + - eula + - java_version + - pid_limit +docker_images: + 'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21' + 'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17' + 'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16' + 'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11' + 'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8' +file_denylist: { } +startup_commands: + Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}' +config: + files: + server.properties: + parser: properties + find: + server-ip: '' + server-port: '{{server.allocations.default.port}}' + query.port: '{{server.allocations.default.port}}' + startup: + done: ')! For help, type ' + logs: { } + stop: stop +scripts: + installation: + script: |- + #!/bin/ash + # Vanilla MC Installation Script + # + # Server Files: /mnt/server + mkdir -p /mnt/server + cd /mnt/server + + LATEST_VERSION=`curl https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r '.latest.release'` + LATEST_SNAPSHOT_VERSION=`curl https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r '.latest.snapshot'` + + echo -e "latest version is $LATEST_VERSION" + echo -e "latest snapshot is $LATEST_SNAPSHOT_VERSION" + + if [ -z "$VANILLA_VERSION" ] || [ "$VANILLA_VERSION" == "latest" ]; then + MANIFEST_URL=$(curl -sSL https://launchermeta.mojang.com/mc/game/version_manifest.json | jq --arg VERSION $LATEST_VERSION -r '.versions | .[] | select(.id== $VERSION )|.url') + elif [ "$VANILLA_VERSION" == "snapshot" ]; then + MANIFEST_URL=$(curl -sSL https://launchermeta.mojang.com/mc/game/version_manifest.json | jq --arg VERSION $LATEST_SNAPSHOT_VERSION -r '.versions | .[] | select(.id== $VERSION )|.url') + else + MANIFEST_URL=$(curl -sSL https://launchermeta.mojang.com/mc/game/version_manifest.json | jq --arg VERSION $VANILLA_VERSION -r '.versions | .[] | select(.id== $VERSION )|.url') + fi + + DOWNLOAD_URL=$(curl ${MANIFEST_URL} | jq .downloads.server | jq -r '. | .url') + + echo -e "running: curl -o ${SERVER_JARFILE} $DOWNLOAD_URL" + curl -o ${SERVER_JARFILE} $DOWNLOAD_URL + + echo -e "Install Complete" + container: 'ghcr.io/pelican-eggs/installers:alpine' + entrypoint: ash +variables: + - + name: 'Server Jar File' + description: 'The name of the server jarfile to run the server with.' + env_variable: SERVER_JARFILE + default_value: server.jar + user_viewable: true + user_editable: true + rules: + - required + - 'regex:/^([\w\d._-]+)(\.jar)$/' + sort: 1 + - + name: 'Server Version' + description: |- + The version of Minecraft Vanilla to install. Use "latest" to install the latest version, or use + "snapshot" to install the latest snapshot. Go to Settings > Reinstall Server to apply. + env_variable: VANILLA_VERSION + default_value: latest + user_viewable: true + user_editable: true + rules: + - required + - string + - 'between:3,15' + sort: 2 diff --git a/java/vanilla/pterodactyl-egg-vanilla-minecraft.json b/java/vanilla/pterodactyl-egg-vanilla-minecraft.json new file mode 100644 index 00000000..eae876ae --- /dev/null +++ b/java/vanilla/pterodactyl-egg-vanilla-minecraft.json @@ -0,0 +1,60 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2025-12-31T13:06:44+00:00", + "name": "Vanilla Minecraft", + "author": "panel@example.com", + "description": "Minecraft is a game about placing blocks and going on adventures. Explore randomly generated worlds\nand build amazing things from the simplest of homes to the grandest of castles. Play in Creative\nMode with unlimited resources or mine deep in Survival Mode, crafting weapons and armor to fend off\ndangerous mobs. Do all this alone or with friends.", + "features": [ + "eula", + "java_version", + "pid_limit" + ], + "docker_images": { + "Java 21": "ghcr.io\/pelican-eggs\/yolks:java_21", + "Java 17": "ghcr.io\/pelican-eggs\/yolks:java_17", + "Java 16": "ghcr.io\/pelican-eggs\/yolks:java_16", + "Java 11": "ghcr.io\/pelican-eggs\/yolks:java_11", + "Java 8": "ghcr.io\/pelican-eggs\/yolks:java_8" + }, + "file_denylist": [], + "startup": "java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}", + "config": { + "files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"\",\n \"server-port\": \"{{server.build.default.port}}\",\n \"query.port\": \"{{server.build.default.port}}\"\n }\n }\n}", + "startup": "{\n \"done\": \")! For help, type \"\n}", + "logs": "[]", + "stop": "stop" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/ash\n# Vanilla MC Installation Script\n#\n# Server Files: \/mnt\/server\nmkdir -p \/mnt\/server\ncd \/mnt\/server\n\nLATEST_VERSION=`curl https:\/\/launchermeta.mojang.com\/mc\/game\/version_manifest.json | jq -r '.latest.release'`\nLATEST_SNAPSHOT_VERSION=`curl https:\/\/launchermeta.mojang.com\/mc\/game\/version_manifest.json | jq -r '.latest.snapshot'`\n\necho -e \"latest version is $LATEST_VERSION\"\necho -e \"latest snapshot is $LATEST_SNAPSHOT_VERSION\"\n\nif [ -z \"$VANILLA_VERSION\" ] || [ \"$VANILLA_VERSION\" == \"latest\" ]; then\n MANIFEST_URL=$(curl -sSL https:\/\/launchermeta.mojang.com\/mc\/game\/version_manifest.json | jq --arg VERSION $LATEST_VERSION -r '.versions | .[] | select(.id== $VERSION )|.url')\nelif [ \"$VANILLA_VERSION\" == \"snapshot\" ]; then\n MANIFEST_URL=$(curl -sSL https:\/\/launchermeta.mojang.com\/mc\/game\/version_manifest.json | jq --arg VERSION $LATEST_SNAPSHOT_VERSION -r '.versions | .[] | select(.id== $VERSION )|.url')\nelse\n MANIFEST_URL=$(curl -sSL https:\/\/launchermeta.mojang.com\/mc\/game\/version_manifest.json | jq --arg VERSION $VANILLA_VERSION -r '.versions | .[] | select(.id== $VERSION )|.url')\nfi\n\nDOWNLOAD_URL=$(curl ${MANIFEST_URL} | jq .downloads.server | jq -r '. | .url')\n\necho -e \"running: curl -o ${SERVER_JARFILE} $DOWNLOAD_URL\"\ncurl -o ${SERVER_JARFILE} $DOWNLOAD_URL\n\necho -e \"Install Complete\"", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", + "entrypoint": "ash" + } + }, + "variables": [ + { + "name": "Server Jar File", + "description": "The name of the server jarfile to run the server with.", + "env_variable": "SERVER_JARFILE", + "default_value": "server.jar", + "user_viewable": true, + "user_editable": true, + "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", + "field_type": "text" + }, + { + "name": "Server Version", + "description": "The version of Minecraft Vanilla to install. Use \"latest\" to install the latest version, or use\n\"snapshot\" to install the latest snapshot. Go to Settings > Reinstall Server to apply.", + "env_variable": "VANILLA_VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|between:3,15", + "field_type": "text" + } + ] +} \ No newline at end of file diff --git a/proxy/README.md b/proxy/README.md index a2c190f9..a67dbca4 100644 --- a/proxy/README.md +++ b/proxy/README.md @@ -2,6 +2,7 @@ * [Java](/java/) * [AlwaysAuth](java/alwaysauth) + * [Bungeecord](java/bungeecord) * [Travertine](java/travertine) * [Velocity](/java/velocity) * [VIAaaS](/java/viaaas) diff --git a/proxy/java/bungeecord/egg-bungeecord.yaml b/proxy/java/bungeecord/egg-bungeecord.yaml new file mode 100644 index 00000000..6ee45f65 --- /dev/null +++ b/proxy/java/bungeecord/egg-bungeecord.yaml @@ -0,0 +1,83 @@ +_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL' +meta: + version: PLCN_v3 + update_url: 'https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/proxy/java/bungeecord/egg-bungeecord.yaml' +exported_at: '2025-12-28T12:14:41+00:00' +name: Bungeecord +author: panel@example.com +uuid: 9e6b409e-4028-4947-aea8-50a2c404c271 +description: |- + For a long time, Minecraft server owners have had a dream that encompasses a free, easy, and + reliable way to connect multiple Minecraft servers together. BungeeCord is the answer to said dream. + Whether you are a small server wishing to string multiple game-modes together, or the owner of the + ShotBow Network, BungeeCord is the ideal solution for you. With the help of BungeeCord, you will be + able to unlock your community's full potential. +image: 'data:image/png;base64,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' +tags: + - minecraft + - proxy +features: + - eula + - java_version + - pid_limit +docker_images: + 'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21' + 'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17' + 'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16' + 'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11' + 'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8' +file_denylist: { } +startup_commands: + Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}' +config: + files: + config.yml: + parser: yaml + find: + 'listeners[0].query_port': '{{server.allocations.default.port}}' + 'listeners[0].host': '0.0.0.0:{{server.allocations.default.port}}' + 'servers.*.address': + 'regex:^(127\.0\.0\.1|localhost)(:\d{1,5})?$': '{{config.docker.interface}}$2' + startup: + done: 'Listening on ' + logs: { } + stop: end +scripts: + installation: + script: |- + #!/bin/ash + # Bungeecord Installation Script + # + # Server Files: /mnt/server + + cd /mnt/server + + if [ -z "${BUNGEE_VERSION}" ] || [ "${BUNGEE_VERSION}" == "latest" ]; then + BUNGEE_VERSION="lastStableBuild" + fi + + curl -sSL -o ${SERVER_JARFILE} https://ci.md-5.net/job/BungeeCord/${BUNGEE_VERSION}/artifact/bootstrap/target/BungeeCord.jar + container: 'ghcr.io/pelican-eggs/installers:alpine' + entrypoint: ash +variables: + - name: 'Bungeecord Jar File' + description: 'The name of the Jarfile to use when running Bungeecord.' + env_variable: SERVER_JARFILE + default_value: bungeecord.jar + user_viewable: true + user_editable: true + rules: + - required + - 'regex:/^([\w\d._-]+)(\.jar)$/' + sort: 2 + - name: 'Bungeecord Version' + description: 'The version of Bungeecord to download and use.' + env_variable: BUNGEE_VERSION + default_value: latest + user_viewable: true + user_editable: true + rules: + - required + - alpha_num + - 'between:1,6' + sort: 1 diff --git a/proxy/java/bungeecord/pterodactyl-egg-bungeecord.json b/proxy/java/bungeecord/pterodactyl-egg-bungeecord.json new file mode 100644 index 00000000..877350cd --- /dev/null +++ b/proxy/java/bungeecord/pterodactyl-egg-bungeecord.json @@ -0,0 +1,60 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2025-12-31T12:56:47+00:00", + "name": "Bungeecord", + "author": "panel@example.com", + "description": "For a long time, Minecraft server owners have had a dream that encompasses a free, easy, and\nreliable way to connect multiple Minecraft servers together. BungeeCord is the answer to said dream.\nWhether you are a small server wishing to string multiple game-modes together, or the owner of the\nShotBow Network, BungeeCord is the ideal solution for you. With the help of BungeeCord, you will be\nable to unlock your community's full potential.", + "features": [ + "eula", + "java_version", + "pid_limit" + ], + "docker_images": { + "Java 21": "ghcr.io\/pelican-eggs\/yolks:java_21", + "Java 17": "ghcr.io\/pelican-eggs\/yolks:java_17", + "Java 16": "ghcr.io\/pelican-eggs\/yolks:java_16", + "Java 11": "ghcr.io\/pelican-eggs\/yolks:java_11", + "Java 8": "ghcr.io\/pelican-eggs\/yolks:java_8" + }, + "file_denylist": [], + "startup": "java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}", + "config": { + "files": "{\n \"config.yml\": {\n \"parser\": \"yaml\",\n \"find\": {\n \"listeners[0].query_port\": \"{{server.build.default.port}}\",\n \"listeners[0].host\": \"0.0.0.0:{{server.build.default.port}}\",\n \"servers.*.address\": {\n \"regex:^(127\\\\.0\\\\.0\\\\.1|localhost)(:\\\\d{1,5})?$\": \"{{config.docker.interface}}$2\"\n }\n }\n }\n}", + "startup": "{\n \"done\": \"Listening on \"\n}", + "logs": "[]", + "stop": "end" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/ash\n# Bungeecord Installation Script\n#\n# Server Files: \/mnt\/server\n\ncd \/mnt\/server\n\nif [ -z \"${BUNGEE_VERSION}\" ] || [ \"${BUNGEE_VERSION}\" == \"latest\" ]; then\n BUNGEE_VERSION=\"lastStableBuild\"\nfi\n\ncurl -sSL -o ${SERVER_JARFILE} https:\/\/ci.md-5.net\/job\/BungeeCord\/${BUNGEE_VERSION}\/artifact\/bootstrap\/target\/BungeeCord.jar", + "container": "ghcr.io\/pelican-eggs\/installers:alpine", + "entrypoint": "ash" + } + }, + "variables": [ + { + "name": "Bungeecord Jar File", + "description": "The name of the Jarfile to use when running Bungeecord.", + "env_variable": "SERVER_JARFILE", + "default_value": "bungeecord.jar", + "user_viewable": true, + "user_editable": true, + "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/", + "field_type": "text" + }, + { + "name": "Bungeecord Version", + "description": "The version of Bungeecord to download and use.", + "env_variable": "BUNGEE_VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|alpha_num|between:1,6", + "field_type": "text" + } + ] +} \ No newline at end of file From 80cc4958684e563f7d1c50fbbe1cd3561bd7b6d1 Mon Sep 17 00:00:00 2001 From: James Harrison Date: Sun, 1 Mar 2026 23:11:44 +0000 Subject: [PATCH 19/20] Fix velocity pelican egg (#118) --- proxy/java/velocity/egg-velocity.json | 28 +++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/proxy/java/velocity/egg-velocity.json b/proxy/java/velocity/egg-velocity.json index df28bc8e..a6229af7 100644 --- a/proxy/java/velocity/egg-velocity.json +++ b/proxy/java/velocity/egg-velocity.json @@ -1,38 +1,42 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { - "version": "PLCN_v1", + "version": "PLCN_v3", "update_url": null }, - "exported_at": "2025-02-12T03:43:07+00:00", + "exported_at": "2026-03-01T22:52:40+00:00", "name": "Velocity", "author": "parker@parkervcp.com", "uuid": "44d20b6d-0a20-4144-a96c-71d214b3c850", "description": "Velocity is a Minecraft server proxy with unparalleled server support, scalability, and flexibility.", + "image": "data:image/png;base64,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", + "tags": [], "features": [ "eula", "java_version", "pid_limit" ], "docker_images": { - "Java 21": "ghcr.io\/pterodactyl\/yolks:java_21", - "Java 17": "ghcr.io\/pterodactyl\/yolks:java_17", - "Java 16": "ghcr.io\/pterodactyl\/yolks:java_16", - "Java 11": "ghcr.io\/pterodactyl\/yolks:java_11", - "Java 8": "ghcr.io\/pterodactyl\/yolks:java_8" + "Java 21": "ghcr.io/pterodactyl/yolks:java_21", + "Java 17": "ghcr.io/pterodactyl/yolks:java_17", + "Java 16": "ghcr.io/pterodactyl/yolks:java_16", + "Java 11": "ghcr.io/pterodactyl/yolks:java_11", + "Java 8": "ghcr.io/pterodactyl/yolks:java_8" }, "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -XX:MaxInlineLevel=15 -jar {{SERVER_JARFILE}}", + "startup_commands": { + "Default": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -XX:MaxInlineLevel=15 -jar {{SERVER_JARFILE}}" + }, "config": { - "files": "{\r\n \"velocity.toml\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"bind = \": \"bind = \\\"0.0.0.0:{{server.allocations.default.port}}\\\"\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \"Done (\"\r\n}", + "files": "{\n \"velocity.toml\": {\n \"parser\": \"file\",\n \"find\": {\n \"bind = \": \"bind = \\\"0.0.0.0:{{server.allocations.default.port}}\\\"\"\n }\n }\n}", + "startup": "{\n \"done\": \"Done (\"\n}", "logs": "{}", "stop": "end" }, "scripts": { "installation": { - "script": "#!\/bin\/ash\r\n# Velocity Proxy Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=velocity\r\n\r\nif [[ -z ${VELOCITY_VERSION} ]] || [[ ${VELOCITY_VERSION} == \"latest\" ]]; then\r\n VELOCITY_VERSION=\"latest\"\r\nfi\r\n\r\nif [[ -n \"${DOWNLOAD_LINK}\" ]]; then\r\n echo -e \"Using supplied download url: ${DOWNLOAD_LINK}\"\r\n DOWNLOAD_URL=$(eval echo $(echo ${DL_PATH} | sed -e 's\/{{\/${\/g' -e 's\/}}\/}\/g'))\r\nelse\r\n VER_EXISTS=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r --arg VERSION $VELOCITY_VERSION '.versions[] | contains($VERSION)' | grep true)\r\n LATEST_VERSION=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT} | jq -r '.versions' | jq -r '.[-1]')\r\n\r\nif [[ \"${VER_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Version is valid. Using version ${VELOCITY_VERSION}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} version\"\r\n VELOCITY_VERSION=${LATEST_VERSION}\r\nfi\r\n\r\nBUILD_EXISTS=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true)\r\nLATEST_BUILD=$(curl -s https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION} | jq -r '.builds' | jq -r '.[-1]')\r\n\r\nif [[ \"${BUILD_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Build is valid for version ${VELOCITY_VERSION}. Using build ${BUILD_NUMBER}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} build for version ${VELOCITY_VERSION}\"\r\n BUILD_NUMBER=${LATEST_BUILD}\r\nfi\r\n\r\nJAR_NAME=${PROJECT}-${VELOCITY_VERSION}-${BUILD_NUMBER}.jar\r\necho \"Version being downloaded\"\r\necho -e \"Velocity Version: ${VELOCITY_VERSION}\"\r\necho -e \"Build: ${BUILD_NUMBER}\"\r\necho -e \"JAR Name of Build: ${JAR_NAME}\"\r\nDOWNLOAD_URL=https:\/\/api.papermc.io\/v2\/projects\/${PROJECT}\/versions\/${VELOCITY_VERSION}\/builds\/${BUILD_NUMBER}\/downloads\/${JAR_NAME}\r\n\r\nfi\r\n\r\ncd \/mnt\/server\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [[ -f ${SERVER_JARFILE} ]]; then\r\nmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [[ -f velocity.toml ]]; then\r\n echo -e \"velocity config file exists\"\r\nelse\r\n echo -e \"downloading velocity config file.\"\r\n curl https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/proxy\/java\/velocity\/velocity.toml -o velocity.toml\r\nfi\r\n\r\nif [[ -f forwarding.secret ]]; then\r\n echo -e \"velocity forwarding secret file already exists\"\r\nelse\r\n echo -e \"creating forwarding secret file\"\r\n touch forwarding.secret\r\n date +%s | sha256sum | base64 | head -c 12 > forwarding.secret\r\nfi\r\n\r\necho -e \"install complete\"", - "container": "ghcr.io\/pelican-eggs\/installers:alpine", + "script": "#!/bin/ash\r\n# Velocity Proxy Installation Script\r\n#\r\n# Server Files: /mnt/server\r\nPROJECT=velocity\r\n\r\nif [[ -z ${VELOCITY_VERSION} ]] || [[ ${VELOCITY_VERSION} == \"latest\" ]]; then\r\n VELOCITY_VERSION=\"latest\"\r\nfi\r\n\r\nif [[ -n \"${DOWNLOAD_LINK}\" ]]; then\r\n echo -e \"Using supplied download url: ${DOWNLOAD_LINK}\"\r\n DOWNLOAD_URL=$(eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g'))\r\nelse\r\n VER_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r --arg VERSION $VELOCITY_VERSION '.versions | any(.[]; index($VERSION))' | grep -m1 true`\r\n LATEST_VERSION=`curl -s https://fill.papermc.io/v3/projects/${PROJECT} | jq -r '.versions | to_entries | .[0].value[0]'`\r\n\r\nif [[ \"${VER_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Version is valid. Using version ${VELOCITY_VERSION}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} version\"\r\n VELOCITY_VERSION=${LATEST_VERSION}\r\nfi\r\n\r\nBUILD_EXISTS=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${VELOCITY_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep -m1 true`\r\nLATEST_BUILD=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${VELOCITY_VERSION} | jq -r '.builds' | jq -r '.[0]'`\r\n\r\nif [[ \"${BUILD_EXISTS}\" == \"true\" ]]; then\r\n echo -e \"Build is valid for version ${VELOCITY_VERSION}. Using build ${BUILD_NUMBER}\"\r\nelse\r\n echo -e \"Using the latest ${PROJECT} build for version ${VELOCITY_VERSION}\"\r\n BUILD_NUMBER=${LATEST_BUILD}\r\nfi\r\n\r\nJAR_NAME=${PROJECT}-${VELOCITY_VERSION}-${BUILD_NUMBER}.jar\r\necho \"Version being downloaded\"\r\necho -e \"Velocity Version: ${VELOCITY_VERSION}\"\r\necho -e \"Build: ${BUILD_NUMBER}\"\r\necho -e \"JAR Name of Build: ${JAR_NAME}\"\r\nDOWNLOAD_URL=`curl -s https://fill.papermc.io/v3/projects/${PROJECT}/versions/${VELOCITY_VERSION}/builds/${BUILD_NUMBER} | jq -r '.downloads.\"server:default\".url'`\r\n\r\nfi\r\n\r\ncd /mnt/server\r\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [[ -f ${SERVER_JARFILE} ]]; then\r\nmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [[ -f velocity.toml ]]; then\r\n echo -e \"velocity config file exists\"\r\nelse\r\n echo -e \"downloading velocity config file.\"\r\n curl https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/proxy/java/velocity/velocity.toml -o velocity.toml\r\nfi\r\n\r\nif [[ -f forwarding.secret ]]; then\r\n echo -e \"velocity forwarding secret file already exists\"\r\nelse\r\n echo -e \"creating forwarding secret file\"\r\n touch forwarding.secret\r\n date +%s | sha256sum | base64 | head -c 12 > forwarding.secret\r\nfi\r\n\r\necho -e \"install complete\"", + "container": "ghcr.io/pelican-eggs/installers:alpine", "entrypoint": "ash" } }, From adacbcc2d4aade34ad763b48be9c2bb5e4e299c7 Mon Sep 17 00:00:00 2001 From: SJ-Tom <56316359+SJ-Tom@users.noreply.github.com> Date: Fri, 27 Mar 2026 19:17:53 +0100 Subject: [PATCH 20/20] Add Java 25 docker image to vanilla egg (#120) * Add Java 25 docker image to vanilla egg To properly support the latest version of Minecraft, version 26.1 (first drop in 2026), which requires at least Java version 25, so that users do not have to set it up themselves * Export from panel --------- Co-authored-by: Quinten <67589015+QuintenQVD0@users.noreply.github.com> --- java/vanilla/egg-vanilla-minecraft.yaml | 3 ++- java/vanilla/pterodactyl-egg-vanilla-minecraft.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/java/vanilla/egg-vanilla-minecraft.yaml b/java/vanilla/egg-vanilla-minecraft.yaml index 2a62e603..ec321804 100644 --- a/java/vanilla/egg-vanilla-minecraft.yaml +++ b/java/vanilla/egg-vanilla-minecraft.yaml @@ -2,7 +2,7 @@ _comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL' meta: version: PLCN_v3 update_url: 'https://raw.githubusercontent.com/pelican-eggs/minecraft/refs/heads/main/java/vanilla/egg-vanilla-minecraft.yaml' -exported_at: '2025-10-31T12:35:33+00:00' +exported_at: '2026-03-27T18:15:51+00:00' name: 'Vanilla Minecraft' author: panel@example.com uuid: 9ac39f3d-0c34-4d93-8174-c52ab9e6c57b @@ -19,6 +19,7 @@ features: - java_version - pid_limit docker_images: + 'Java 25': 'ghcr.io/pelican-eggs/yolks:java_25' 'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21' 'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17' 'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16' diff --git a/java/vanilla/pterodactyl-egg-vanilla-minecraft.json b/java/vanilla/pterodactyl-egg-vanilla-minecraft.json index eae876ae..b1d41234 100644 --- a/java/vanilla/pterodactyl-egg-vanilla-minecraft.json +++ b/java/vanilla/pterodactyl-egg-vanilla-minecraft.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2025-12-31T13:06:44+00:00", + "exported_at": "2026-03-27T18:15:55+00:00", "name": "Vanilla Minecraft", "author": "panel@example.com", "description": "Minecraft is a game about placing blocks and going on adventures. Explore randomly generated worlds\nand build amazing things from the simplest of homes to the grandest of castles. Play in Creative\nMode with unlimited resources or mine deep in Survival Mode, crafting weapons and armor to fend off\ndangerous mobs. Do all this alone or with friends.", @@ -14,6 +14,7 @@ "pid_limit" ], "docker_images": { + "Java 25": "ghcr.io\/pelican-eggs\/yolks:java_25", "Java 21": "ghcr.io\/pelican-eggs\/yolks:java_21", "Java 17": "ghcr.io\/pelican-eggs\/yolks:java_17", "Java 16": "ghcr.io\/pelican-eggs\/yolks:java_16",