From c09e016002ef63770c1d95db2f9799c9bff0f4b1 Mon Sep 17 00:00:00 2001 From: Gorian <1012176+Gorian@users.noreply.github.com> Date: Wed, 10 Nov 2021 10:51:15 -0800 Subject: [PATCH 01/43] Create README.md --- game_eggs/FoundryVTT/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 game_eggs/FoundryVTT/README.md diff --git a/game_eggs/FoundryVTT/README.md b/game_eggs/FoundryVTT/README.md new file mode 100644 index 000000000..8176c4dc3 --- /dev/null +++ b/game_eggs/FoundryVTT/README.md @@ -0,0 +1,7 @@ +# Foundry VTT +Foundry VTT is a standalone application built for experiencing multiplayer tabletop RPGs using a feature-rich and modern self-hosted application where your players connect directly through the browser. + +# Installation +Foundry requires a license. In order to use this egg, you will need to purchase a foundry license, select the linux platform from your profile on the website, and then paste the "Timed URL" into the variable when seting up the server. + +![image](https://user-images.githubusercontent.com/1012176/141174950-840fbf28-37d9-4244-8402-a72821458f41.png) From 251d65fb974b18227a7174d28506ea91b4b9b4ae Mon Sep 17 00:00:00 2001 From: Gorian <1012176+Gorian@users.noreply.github.com> Date: Wed, 10 Nov 2021 10:56:08 -0800 Subject: [PATCH 02/43] Update README.md --- game_eggs/FoundryVTT/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/game_eggs/FoundryVTT/README.md b/game_eggs/FoundryVTT/README.md index 8176c4dc3..1e4fdacf9 100644 --- a/game_eggs/FoundryVTT/README.md +++ b/game_eggs/FoundryVTT/README.md @@ -5,3 +5,8 @@ Foundry VTT is a standalone application built for experiencing multiplayer table Foundry requires a license. In order to use this egg, you will need to purchase a foundry license, select the linux platform from your profile on the website, and then paste the "Timed URL" into the variable when seting up the server. ![image](https://user-images.githubusercontent.com/1012176/141174950-840fbf28-37d9-4244-8402-a72821458f41.png) + +Note that this egg only runs the node application. You will need to manage TLS, reverse proxying, etc. on your own. + +# Server Ports +This is a node application and only needs a single port that you will connect to over http(s) From c80e2d30fd7465d6844011a06988aeaef851be15 Mon Sep 17 00:00:00 2001 From: Gorian <1012176+Gorian@users.noreply.github.com> Date: Wed, 10 Nov 2021 11:07:00 -0800 Subject: [PATCH 03/43] Create egg-FoundryVTT.json --- game_eggs/FoundryVTT/egg-FoundryVTT.json | 59 ++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 game_eggs/FoundryVTT/egg-FoundryVTT.json diff --git a/game_eggs/FoundryVTT/egg-FoundryVTT.json b/game_eggs/FoundryVTT/egg-FoundryVTT.json new file mode 100644 index 000000000..ab2244fca --- /dev/null +++ b/game_eggs/FoundryVTT/egg-FoundryVTT.json @@ -0,0 +1,59 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v1", + "update_url": null + }, + "exported_at": "2021-11-10T11:06:17-08:00", + "name": "Foundry VTT", + "author": "pterodactyl@demi.cloud", + "description": "Foundry VTT is a standalone application built for experiencing multiplayer tabletop RPGs using a feature-rich and modern self-hosted application where your players connect directly through the browser.", + "features": null, + "images": [ + "ghcr.io\/parkervcp\/yolks:nodejs_17" + ], + "file_denylist": [], + "startup": "node .\/app\/resources\/app\/main.js --dataPath=\"\/home\/container\/data\"", + "config": { + "files": "{\r\n \"data\/Config\/options.json\": {\r\n \"parser\": \"json\",\r\n \"find\": {\r\n \"port\": \"{{server.build.default.port}}\",\r\n \"language\": \"{{server.build.env.FOUNDRY_LANGUAGE}}\",\r\n \"updateChannel\": \"{{server.build.env.UPDATE_CHANNEL}}\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \"Server started and listening on port\"\r\n}", + "logs": "{}", + "stop": "^c" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n# FoundryVTT install script\r\n#\r\n# Server Files: \/mnt\/server\r\ndeclare -r DIR_ROOT=\"\/mnt\/server\"\r\ndeclare -r DIR_APP=\"${DIR_ROOT}\/app\"\r\ndeclare -r DIR_DATA=\"${DIR_ROOT}\/data\"\r\ndeclare -r ZIP_FILE_NAME=\"foundryvtt.zip\"\r\n\r\nmain() {\r\n apt update\r\n apt install -y wget unzip\r\n\r\n printf \"\\nBuilding directory structure...\\n\"\r\n mkdir -p \"${DIR_ROOT}\/\"{data\/Config,app}\r\n # shellcheck disable=SC2164\r\n cd \"${DIR_APP}\"\r\n printf \"\\nDownloading FoundryVTT files...\\n\"\r\n wget \"${TIMED_URL}\" -O \"${ZIP_FILE_NAME}\"\r\n printf \"\\nunzipping FoundryVTT files...\\n\"\r\n unzip \"${ZIP_FILE_NAME}\" -d \"${DIR_APP}\"\r\n rm \"${ZIP_FILE_NAME}\"\r\n\r\n printf \"\\nGenerating default configuration...\\n\"\r\n cat <\"${DIR_DATA}\/Config\/options.json\"\r\n{\r\n \"port\": 30000,\r\n \"upnp\": false,\r\n \"fullscreen\": false,\r\n \"hostname\": null,\r\n \"localHostname\": null,\r\n \"routePrefix\": null,\r\n \"sslCert\": null,\r\n \"sslKey\": null,\r\n \"awsConfig\": null,\r\n \"dataPath\": \"\/home\/container\/data\",\r\n \"passwordSalt\": null,\r\n \"proxySSL\": false,\r\n \"proxyPort\": null,\r\n \"minifyStaticFiles\": true,\r\n \"updateChannel\": \"release\",\r\n \"language\": \"en.core\",\r\n \"upnpLeaseDuration\": null,\r\n \"world\": null\r\n} \r\nEOF\r\n printf \"Installation Done.\\n\"\r\n}\r\nmain \"@\"", + "container": "debian:buster-slim", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Timed URL", + "description": "This is required to download the foundry files. Available in your https:\/\/foundryvtt.com\/ profile after you've purchased a license. This link generally lasts for about 5 minutes.", + "env_variable": "TIMED_URL", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|url" + }, + { + "name": "Language", + "description": "As may be expected, this setting configures the localization of the program and can be leveraged by localization modules to ensure that the interface is translated to the language of your choosing wherever possible.", + "env_variable": "FOUNDRY_LANGUAGE", + "default_value": "en.core", + "user_viewable": true, + "user_editable": true, + "rules": "string|max:20" + }, + { + "name": "Update Channel", + "description": "Select what channel you want to use for automatic updates", + "env_variable": "UPDATE_CHANNEL", + "default_value": "release", + "user_viewable": true, + "user_editable": true, + "rules": "string|max:256" + } + ] +} From 6b71e839c838f67e3350368863636882b0eb8aa3 Mon Sep 17 00:00:00 2001 From: Gorian <1012176+Gorian@users.noreply.github.com> Date: Sat, 13 Nov 2021 13:08:43 -0800 Subject: [PATCH 04/43] Update to use new image updated to use suggested ghcr.io/pterodactyl/installers:debian --- game_eggs/FoundryVTT/egg-FoundryVTT.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/game_eggs/FoundryVTT/egg-FoundryVTT.json b/game_eggs/FoundryVTT/egg-FoundryVTT.json index ab2244fca..a61725cae 100644 --- a/game_eggs/FoundryVTT/egg-FoundryVTT.json +++ b/game_eggs/FoundryVTT/egg-FoundryVTT.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2021-11-10T11:06:17-08:00", + "exported_at": "2021-11-13T13:06:21-08:00", "name": "Foundry VTT", "author": "pterodactyl@demi.cloud", "description": "Foundry VTT is a standalone application built for experiencing multiplayer tabletop RPGs using a feature-rich and modern self-hosted application where your players connect directly through the browser.", @@ -22,8 +22,8 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# FoundryVTT install script\r\n#\r\n# Server Files: \/mnt\/server\r\ndeclare -r DIR_ROOT=\"\/mnt\/server\"\r\ndeclare -r DIR_APP=\"${DIR_ROOT}\/app\"\r\ndeclare -r DIR_DATA=\"${DIR_ROOT}\/data\"\r\ndeclare -r ZIP_FILE_NAME=\"foundryvtt.zip\"\r\n\r\nmain() {\r\n apt update\r\n apt install -y wget unzip\r\n\r\n printf \"\\nBuilding directory structure...\\n\"\r\n mkdir -p \"${DIR_ROOT}\/\"{data\/Config,app}\r\n # shellcheck disable=SC2164\r\n cd \"${DIR_APP}\"\r\n printf \"\\nDownloading FoundryVTT files...\\n\"\r\n wget \"${TIMED_URL}\" -O \"${ZIP_FILE_NAME}\"\r\n printf \"\\nunzipping FoundryVTT files...\\n\"\r\n unzip \"${ZIP_FILE_NAME}\" -d \"${DIR_APP}\"\r\n rm \"${ZIP_FILE_NAME}\"\r\n\r\n printf \"\\nGenerating default configuration...\\n\"\r\n cat <\"${DIR_DATA}\/Config\/options.json\"\r\n{\r\n \"port\": 30000,\r\n \"upnp\": false,\r\n \"fullscreen\": false,\r\n \"hostname\": null,\r\n \"localHostname\": null,\r\n \"routePrefix\": null,\r\n \"sslCert\": null,\r\n \"sslKey\": null,\r\n \"awsConfig\": null,\r\n \"dataPath\": \"\/home\/container\/data\",\r\n \"passwordSalt\": null,\r\n \"proxySSL\": false,\r\n \"proxyPort\": null,\r\n \"minifyStaticFiles\": true,\r\n \"updateChannel\": \"release\",\r\n \"language\": \"en.core\",\r\n \"upnpLeaseDuration\": null,\r\n \"world\": null\r\n} \r\nEOF\r\n printf \"Installation Done.\\n\"\r\n}\r\nmain \"@\"", - "container": "debian:buster-slim", + "script": "#!\/bin\/bash\r\n# FoundryVTT install script\r\n#\r\n# Server Files: \/mnt\/server\r\ndeclare -r DIR_ROOT=\"\/mnt\/server\"\r\ndeclare -r DIR_APP=\"${DIR_ROOT}\/app\"\r\ndeclare -r DIR_DATA=\"${DIR_ROOT}\/data\"\r\ndeclare -r ZIP_FILE_NAME=\"foundryvtt.zip\"\r\n\r\nmain() {\r\n apt update\r\n apt install -y unzip\r\n\r\n printf \"\\nBuilding directory structure...\\n\"\r\n mkdir -p \"${DIR_ROOT}\/data\/Config\"\r\n mkdir -p \"${DIR_ROOT}\/app\"\r\n # shellcheck disable=SC2164\r\n cd \"${DIR_APP}\"\r\n printf \"\\nDownloading FoundryVTT files...\\n\"\r\n wget \"${TIMED_URL}\" -O \"${ZIP_FILE_NAME}\"\r\n printf \"\\nunzipping FoundryVTT files...\\n\"\r\n unzip \"${ZIP_FILE_NAME}\" -d \"${DIR_APP}\"\r\n rm \"${ZIP_FILE_NAME}\"\r\n\r\n printf \"\\nGenerating default configuration...\\n\"\r\n cat <\"${DIR_DATA}\/Config\/options.json\"\r\n{\r\n \"port\": 30000,\r\n \"upnp\": false,\r\n \"fullscreen\": false,\r\n \"hostname\": null,\r\n \"localHostname\": null,\r\n \"routePrefix\": null,\r\n \"sslCert\": null,\r\n \"sslKey\": null,\r\n \"awsConfig\": null,\r\n \"dataPath\": \"\/home\/container\/data\",\r\n \"passwordSalt\": null,\r\n \"proxySSL\": false,\r\n \"proxyPort\": null,\r\n \"minifyStaticFiles\": true,\r\n \"updateChannel\": \"release\",\r\n \"language\": \"en.core\",\r\n \"upnpLeaseDuration\": null,\r\n \"world\": null\r\n} \r\nEOF\r\n printf \"Installation Done.\\n\"\r\n}\r\nmain \"@\"", + "container": "ghcr.io\/pterodactyl\/installers:debian", "entrypoint": "bash" } }, From ebbcf2cef03746f89afea788550404ce6dc016d3 Mon Sep 17 00:00:00 2001 From: Gorian <1012176+Gorian@users.noreply.github.com> Date: Sat, 13 Nov 2021 13:09:51 -0800 Subject: [PATCH 05/43] Added FoundryVTT to list --- game_eggs/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/game_eggs/README.md b/game_eggs/README.md index d059f8690..e9725fbb7 100644 --- a/game_eggs/README.md +++ b/game_eggs/README.md @@ -163,3 +163,5 @@ [Vintage Story](vintage_story/vintage_story) [Xonotic](xonotic/xonotic) + +[FoundryVTT](FoundryVTT) From 3163de17eedc1e5f8233dc6b5e0385f944d64233 Mon Sep 17 00:00:00 2001 From: Gorian <1012176+Gorian@users.noreply.github.com> Date: Sat, 13 Nov 2021 13:10:42 -0800 Subject: [PATCH 06/43] Add FoundryVTT --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 302c1ad30..65561a443 100644 --- a/README.md +++ b/README.md @@ -238,6 +238,8 @@ If you are reading this it looks like you are looking to add an egg to your serv [Xonotic](game_eggs/xonotic/xonotic) +[FoundryVTT](game_eggs/FoundryVTT) + ## [Monitoring](/monitoring/) ### Prometheus * [Prometheus](/monitoring/prometheus) From 46e5666e0eaf8815864813ddb8ad75770de8981b Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Wed, 4 May 2022 14:43:58 +0200 Subject: [PATCH 07/43] update egg-s-a--m-p.json to new image --- game_eggs/gta/samp/egg-s-a--m-p.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/game_eggs/gta/samp/egg-s-a--m-p.json b/game_eggs/gta/samp/egg-s-a--m-p.json index 1f1172136..0ef670ff2 100644 --- a/game_eggs/gta/samp/egg-s-a--m-p.json +++ b/game_eggs/gta/samp/egg-s-a--m-p.json @@ -7,7 +7,7 @@ "name": "SA-MP", "author": "bl4ckspr4y@protonmail.com", "description": "SA-MP is a free Massively Multiplayer Online game mod for the PC version of Rockstar Games Grand Theft Auto: San Andreas (tm).", - "image": "quay.io\/parkervcp\/pterodactyl-images:game_samp", + "image": "ghcr.io\/parkervcp\/games:samp", "startup": ".\/samp03svr", "config": { "files": "{\r\n \"server.cfg\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"port\": \"port {{server.build.default.port}}\"\r\n }\r\n }\r\n}", @@ -23,4 +23,4 @@ } }, "variables": [] -} \ No newline at end of file +} From c67703caa627e897c6550d15a1515d27c04ce750 Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Thu, 5 May 2022 20:05:22 +0200 Subject: [PATCH 08/43] Update egg-code--server.json --- software/code-server/egg-code--server.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/software/code-server/egg-code--server.json b/software/code-server/egg-code--server.json index 8820b7ebc..30cdae390 100644 --- a/software/code-server/egg-code--server.json +++ b/software/code-server/egg-code--server.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2021-12-17T09:23:57+00:00", + "exported_at": "2022-05-05T19:37:05+02:00", "name": "Code-Server", "author": "mario.franze@gmail.com", "description": "Run VS Code on any machine anywhere and access it in the browser.", @@ -25,8 +25,8 @@ }, "scripts": { "installation": { - "script": "apt update\r\napt install -y curl jq\r\nMATCH=linux-amd64\r\n\r\n# Create initial directories\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n# Create needed directories\r\nmkdir -p \/mnt\/server\/.local\/lib \/mnt\/server\/.local\/bin \/mnt\/server\/.config\/code-server \/mnt\/server\/projects\r\n\r\n# Change permission of projects directory so it can be accessed by code-server\r\nchmod 777 \/mnt\/server\/projects\r\ntouch \"\/mnt\/server\/projects\/PLACE YOUR PROJECTS HERE\"\r\n\r\n# Check for available versions. Defaults to latest if no valid version is found.\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/coder\/code-server\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/coder\/code-server\/releases\")\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 \"v${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"v${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"v${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\n# Download the given Version and extract it\r\necho \"Downloading $DOWNLOAD_URL\"\r\ncurl -fL $DOWNLOAD_URL | tar -C \/mnt\/server\/.local\/lib -xz\r\nmv \/mnt\/server\/.local\/lib\/code-server-*linux-amd64 \/mnt\/server\/.local\/lib\/code-server-${VERSION}\r\n\r\n\r\nPATH=\"\/mnt\/server\/.local\/bin:$PATH\"\r\necho \"password: changeme\r\nbind-addr: 0.0.0.0\r\nauth: password\r\ncert: false\" > \/mnt\/server\/.config\/code-server\/config.yaml\r\n\r\necho \"Install complete\"", - "container": "ghcr.io/parkervcp/installers:debian", + "script": "apt update\r\napt install -y curl jq\r\n\r\n\r\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && echo \"amd64\" || echo \"arm64\")\r\nMATCH=linux-${ARCH}\r\n# Create initial directories\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\necho ${ARCH}\r\necho ${MATCH}\r\n# Create needed directories\r\nmkdir -p \/mnt\/server\/.local\/lib \/mnt\/server\/.local\/bin \/mnt\/server\/.config\/code-server \/mnt\/server\/projects\r\n\r\n# Change permission of projects directory so it can be accessed by code-server\r\nchmod 777 \/mnt\/server\/projects\r\ntouch \"\/mnt\/server\/projects\/PLACE YOUR PROJECTS HERE\"\r\n\r\n# Check for available versions. Defaults to latest if no valid version is found.\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/coder\/code-server\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/coder\/code-server\/releases\")\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 \"v${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"v${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"v${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\n# Download the given Version and extract it\r\necho \"Downloading $DOWNLOAD_URL\"\r\ncurl -fL $DOWNLOAD_URL | tar -C \/mnt\/server\/.local\/lib -xz\r\nmv \/mnt\/server\/.local\/lib\/code-server-*linux-${ARCH} \/mnt\/server\/.local\/lib\/code-server-${VERSION}\r\n\r\n\r\nPATH=\"\/mnt\/server\/.local\/bin:$PATH\"\r\necho \"password: changeme\r\nbind-addr: 0.0.0.0\r\nauth: password\r\ncert: false\" > \/mnt\/server\/.config\/code-server\/config.yaml\r\n\r\necho \"Install complete\"", + "container": "debian:bullseye-slim", "entrypoint": "bash" } }, From 56829c88cd49d83a941e91c778bcc81d61a7932d Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 6 May 2022 10:21:09 +0200 Subject: [PATCH 09/43] Fix download link for Flamecord --- .../minecraft/proxy/java/flamecord/egg-flamecord.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/game_eggs/minecraft/proxy/java/flamecord/egg-flamecord.json b/game_eggs/minecraft/proxy/java/flamecord/egg-flamecord.json index e80e7b72c..626cd935d 100644 --- a/game_eggs/minecraft/proxy/java/flamecord/egg-flamecord.json +++ b/game_eggs/minecraft/proxy/java/flamecord/egg-flamecord.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2021-12-09T13:32:08-05:00", + "exported_at": "2022-05-06T10:20:32+02:00", "name": "Flamecord", "author": "admin@softwarenoob.com", "description": "FlameCord is a patch for Travertine to fix possible exploits and add useful functionalities. FlameCord aims to fix Netty related exploits to keep your server safe from attacks.", @@ -23,13 +23,13 @@ "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}", "config": { "files": "{\r\n \"config.yml\": {\r\n \"parser\": \"yaml\",\r\n \"find\": {\r\n \"listeners[0].host\": \"0.0.0.0:{{server.build.default.port}}\",\r\n \"servers.*.address\": {\r\n \"127.0.0.1\": \"{{config.docker.interface}}\",\r\n \"localhost\": \"{{config.docker.interface}}\"\r\n }\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \"Listening on \",\r\n \"userInteraction\": [\r\n \"Listening on \/0.0.0.0:\"\r\n ]\r\n}", + "startup": "{\r\n \"done\": \"Listening on \"\r\n}", "logs": "{}", "stop": "end" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Travertine Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nMATCH=Flamecord.jar\r\napt update\r\napt install -y curl jq\r\n\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/2lstudios-mc\/FlameCord\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/2lstudios-mc\/FlameCord\/releases\")\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n echo \"Downloading latest version\"\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 echo \"Download version ${VERSION}\"\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\ncd \/mnt\/server\r\n\r\necho -e \"curl -L ${DOWNLOAD_URL} -o ${SERVER_JARFILE}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -L ${DOWNLOAD_URL} -o ${SERVER_JARFILE}\r\necho \"Install complete\"", + "script": "#!\/bin\/bash\r\n# FlameCord Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y curl\r\n\r\n# Get download link\r\nif [ -z \"${FLAMECORD_VERSION}\" ] || [ \"${FLAMECORD_VERSION}\" == \"latest\" ]; then\r\n echo -e \"Downloading latest FlameCord build\"\r\n DOWNLOAD_URL=https:\/\/ci.2lstudios.dev\/job\/FlameCord\/lastSuccessfulBuild\/artifact\/FlameCord-Proxy\/bootstrap\/target\/FlameCord.jar\r\nelse \r\n echo -e \"Downloading FlameCord build ${FLAMECORD_VERSION}\"\r\n DOWNLOAD_URL=https:\/\/ci.2lstudios.dev\/job\/FlameCord\/${FLAMECORD_VERSION}\/artifact\/FlameCord-Proxy\/bootstrap\/target\/FlameCord.jar\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\necho -e \"curl -L ${DOWNLOAD_URL} -o ${SERVER_JARFILE}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n\tmv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -L ${DOWNLOAD_URL} -o ${SERVER_JARFILE}\r\necho \"Install complete\"", "container": "debian:buster-slim", "entrypoint": "bash" } @@ -37,7 +37,7 @@ "variables": [ { "name": "Flamecord Version", - "description": "The Github release version of Flamecord to install such as 48d53ee, all releases at https:\/\/github.com\/2lstudios-mc\/FlameCord\/releases", + "description": "The build to pull and install. (Ex. 97), or set to latest.\r\n\r\nYou can find all builds on https:\/\/ci.2lstudios.dev\/job\/FlameCord\/", "env_variable": "FLAMECORD_VERSION", "default_value": "latest", "user_viewable": true, From 158ba055dc131ca6494ee5eee5ed1676421e92e3 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 6 May 2022 10:53:01 +0200 Subject: [PATCH 10/43] Update server name variable for project zomboid --- .../project_zomboid/egg-project-zomboid.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/game_eggs/steamcmd_servers/project_zomboid/egg-project-zomboid.json b/game_eggs/steamcmd_servers/project_zomboid/egg-project-zomboid.json index 946d97471..a13be0031 100644 --- a/game_eggs/steamcmd_servers/project_zomboid/egg-project-zomboid.json +++ b/game_eggs/steamcmd_servers/project_zomboid/egg-project-zomboid.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2021-12-29T14:38:26+00:00", + "exported_at": "2022-05-06T10:50:50+02:00", "name": "Project Zomboid", "author": "iamkubi@gmail.com", "description": "Project Zomboid is an open world survival horror video game in alpha stage development by British and Canadian independent developer, The Indie Stone. The game is set in a post apocalyptic, zombie infested world where the player is challenged to survive for as long as possible before inevitably dying.", @@ -15,7 +15,7 @@ "ghcr.io\/pterodactyl\/games:source" ], "file_denylist": [], - "startup": "\/home\/container\/start-server.sh -port {{SERVER_PORT}} -steamport1 {{STEAM_PORT}} -cachedir=\/home\/container\/.cache -servername \\\"{{SERVER_NAME}}\\\" -adminusername {{ADMIN_USER}} -adminpassword \"{{ADMIN_PASSWORD}}\"", + "startup": "\/home\/container\/start-server.sh -port {{SERVER_PORT}} -steamport1 {{STEAM_PORT}} -cachedir=\/home\/container\/.cache -servername \"{{SERVER_NAME}}\" -adminusername {{ADMIN_USER}} -adminpassword \"{{ADMIN_PASSWORD}}\"", "config": { "files": "{}", "startup": "{\r\n \"done\": \"SERVER STARTED\"\r\n}", @@ -32,12 +32,12 @@ "variables": [ { "name": "Server Name", - "description": "Name of the server", + "description": "The internal server name used for save\/ config files.", "env_variable": "SERVER_NAME", - "default_value": "Project Zomboid Server", + "default_value": "Pterodactyl", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:64" + "rules": "required|alpha_num|max:64" }, { "name": "Admin Username", From 12273e55b32c4723e68746fc3315a774d427db1f Mon Sep 17 00:00:00 2001 From: DaFray31 Date: Thu, 12 May 2022 15:16:04 +0200 Subject: [PATCH 11/43] Update egg-j-music-bot.json Token from discord have length equal to 70 not 64 --- bots/discord/jmusicbot/egg-j-music-bot.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bots/discord/jmusicbot/egg-j-music-bot.json b/bots/discord/jmusicbot/egg-j-music-bot.json index 96da03ca0..5804cde5e 100644 --- a/bots/discord/jmusicbot/egg-j-music-bot.json +++ b/bots/discord/jmusicbot/egg-j-music-bot.json @@ -34,7 +34,7 @@ "default_value": "You need to get a token", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:64" + "rules": "required|string|max:70" }, { "name": "[REQUIRED] Bot Owner ID", @@ -127,4 +127,4 @@ "rules": "required|integer" } ] -} \ No newline at end of file +} From 7a5f16730ac6304cb03f4e7d6d250bc0502e5c12 Mon Sep 17 00:00:00 2001 From: Faye Date: Sat, 14 May 2022 09:55:19 +0200 Subject: [PATCH 12/43] Fixed install script --- .../terraria/tmodloader/egg-t-modloader.json | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/game_eggs/terraria/tmodloader/egg-t-modloader.json b/game_eggs/terraria/tmodloader/egg-t-modloader.json index 6d8cc6053..22376c341 100755 --- a/game_eggs/terraria/tmodloader/egg-t-modloader.json +++ b/game_eggs/terraria/tmodloader/egg-t-modloader.json @@ -1,14 +1,18 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1" + "version": "PTDL_v1", + "update_url": null }, - "exported_at": "2021-08-02T22:44:50-04:00", + "exported_at": "2022-05-14T02:54:50-05:00", "name": "tModloader", "author": "parker@parkervcp.com", "description": "tModLoader is essentially a mod that provides a way to load your own mods without having to work directly with Terraria's source code itself. This means you can easily make mods that are compatible with other people's mods, save yourself the trouble of having to decompile and recompile Terraria.exe, and escape from having to understand all of the obscure \"intricacies\" of Terraria's source code. It is made to work for Terraria 1.3+.", "features": null, - "image": "quay.io\/parkervcp\/pterodactyl-images:debian_mono-5", + "images": [ + "quay.io\/parkervcp\/pterodactyl-images:debian_mono-5" + ], + "file_denylist": [], "startup": ".\/tModLoaderServer -ip 0.0.0.0 -port ${SERVER_PORT} -maxplayers ${MAX_PLAYERS} -difficulty ${DIFFICULTY} -password \"${SERVER_PASSWORD}\" -motd \"${MOTD}\" -lang ${LANGUAGE} -world ~\/saves\/Worlds\/${WORLD_NAME}.wld -worldname ${WORLD_NAME} -autocreate ${WORLD_SIZE} -savedirectory ~\/ -tmlsavedirectory ~\/saves -modpath ~\/mods", "config": { "files": "{}", @@ -18,12 +22,21 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Vanilla tModloader Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n## install packages to get version and download links\r\napt update\r\napt install -y curl jq file unzip\r\n\r\nGITHUB_PACKAGE=tModLoader\/tModLoader\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 [ -z \"$VERSION\" ] || [ \"$VERSION\" == \"latest\" ]; then\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=$(echo $LATEST_JSON | jq .assets | jq -r .[].browser_download_url | grep -i linux | grep -i zip)\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_LINK=$(echo $RELEASES | jq -r --arg VERSION \"$VERSION\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i linux)\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 | grep -i linux | grep -i zip)\r\n fi\r\nfi\r\n\r\n## mkdir and cd to \/mnt\/server\/\r\nmkdir -p \/mnt\/server\r\n\r\ncd \/mnt\/server\r\n\r\n## download release\r\necho -e \"running: curl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\"\r\ncurl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip -o ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2 \r\nfi\r\n\r\nchmod +x tModLoaderServer.bin.x86_64\r\nchmod +x tModLoaderServer\r\n\r\necho -e \"Cleaning up extra files.\"\r\nrm -rf terraria-server-${CLEAN_VERSION}.zip rm ${DOWNLOAD_LINK##*\/}", + "script": "#!\/bin\/bash\r\n# Vanilla tModloader Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n## install packages to get version and download links\r\napt update\r\napt install -y curl jq file unzip\r\n\r\nGITHUB_PACKAGE=tModLoader\/tModLoader\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\/tmodloader\/tmodloader\/releases\" | jq -c '.[] | select(.name | contains(\"v0\"))' | head -1)\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/$GITHUB_PACKAGE\/releases\" | jq '.[] | select(.name | contains(\"v0\"))')\r\n\r\n\r\nif [ -z \"$VERSION\" ] || [ \"$VERSION\" == \"latest\" ]; then\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=$(echo $LATEST_JSON | jq .assets | jq -r .[].browser_download_url | grep -i linux | grep -i zip)\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_LINK=$(echo $RELEASES | jq -r --arg VERSION \"$VERSION\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i linux)\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 | grep -i linux | grep -i zip)\r\n fi\r\nfi\r\n\r\n## mkdir and cd to \/mnt\/server\/\r\nmkdir -p \/mnt\/server\r\n\r\ncd \/mnt\/server\r\n\r\n## download release\r\necho -e \"running: curl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\"\r\ncurl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip -o ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2 \r\nfi\r\n\r\nchmod +x tModLoaderServer.bin.x86_64\r\nchmod +x tModLoaderServer\r\n\r\necho -e \"Cleaning up extra files.\"\r\nrm -rf terraria-server-${CLEAN_VERSION}.zip rm ${DOWNLOAD_LINK##*\/}", "container": "debian:buster-slim", "entrypoint": "bash" } }, "variables": [ + { + "name": "tModloader Version", + "description": "The version of tModloader that is to be used.", + "env_variable": "VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:20" + }, { "name": "World Name", "description": "The name for the world file.", @@ -51,15 +64,6 @@ "user_editable": true, "rules": "required|numeric|digits_between:1,3" }, - { - "name": "tModloader Version", - "description": "The version of tModloader that is to be used.", - "env_variable": "VERSION", - "default_value": "latest", - "user_viewable": true, - "user_editable": true, - "rules": "required|string|max:20" - }, { "name": "GitHub User", "description": "GitHub user to use for api calls.\r\n\r\nThis only needs to be set if you hit the GitHub API too often across multiple servers.", @@ -115,4 +119,4 @@ "rules": "required|numeric|digits_between:1,5" } ] -} \ No newline at end of file +} From 40e207d17d294329bbd7993b172a8a3ed733cbb3 Mon Sep 17 00:00:00 2001 From: Bad <87938689+yesBad@users.noreply.github.com> Date: Sun, 15 May 2022 00:38:52 +0300 Subject: [PATCH 13/43] Fix Rust Staging mistake Quary -> Query --- game_eggs/steamcmd_servers/rust/rust_staging/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_eggs/steamcmd_servers/rust/rust_staging/README.md b/game_eggs/steamcmd_servers/rust/rust_staging/README.md index f1742a66c..c8dcdcdea 100644 --- a/game_eggs/steamcmd_servers/rust/rust_staging/README.md +++ b/game_eggs/steamcmd_servers/rust/rust_staging/README.md @@ -21,7 +21,7 @@ Ports required to run the server. | Port | default | |---------|---------| -| Game and Quary | 28015 UDP | +| Game and Query | 28015 UDP | | RCON | 28016 TCP | ### Information about server updates can be found [here](https://steamdb.info/app/258550/depots/?branch=staging) From 6db9034c0a80e547edf2e0b15662f033ad1ffed0 Mon Sep 17 00:00:00 2001 From: gOOvER Date: Sun, 15 May 2022 11:17:13 +0200 Subject: [PATCH 14/43] fix startup, to show console; update images to ghcr --- .../valheim/valheim_plus/egg-valheim-plus-mod.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/game_eggs/steamcmd_servers/valheim/valheim_plus/egg-valheim-plus-mod.json b/game_eggs/steamcmd_servers/valheim/valheim_plus/egg-valheim-plus-mod.json index cd0f888ed..c6168247f 100644 --- a/game_eggs/steamcmd_servers/valheim/valheim_plus/egg-valheim-plus-mod.json +++ b/game_eggs/steamcmd_servers/valheim/valheim_plus/egg-valheim-plus-mod.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2021-03-08T17:51:46+01:00", + "exported_at": "2022-05-15T11:15:06+02:00", "name": "Valheim Plus Mod", "author": "info@goover.de", "description": "A brutal exploration and survival game for 1-10 players, set in a procedurally-generated purgatory inspired by viking culture.", @@ -12,10 +12,10 @@ "steam_disk_space" ], "images": [ - "quay.io\/parkervcp\/pterodactyl-images:debian_source" + "ghcr.io\/parkervcp\/games:source" ], "file_denylist": [], - "startup": "export templdpath=$LD_LIBRARY_PATH; export DOORSTOP_ENABLE=TRUE; export DOORSTOP_INVOKE_DLL_PATH=.\/BepInEx\/core\/BepInEx.Preloader.dll; export DOORSTOP_CORLIB_OVERRIDE_PATH=.\/unstripped_corlib; export LD_LIBRARY_PATH=.\/doorstop_libs:$LD_LIBRARY_PATH; export LD_PRELOAD=libdoorstop_x64.so:$LD_PRELOAD; export LD_LIBRARY_PATH=.\/linux64:$LD_LIBRARY_PATH; export SteamAppId=892970; .\/valheim_server.x86_64 -nographics -batchmode -name \"{{SERVER_NAME}}\" -port {{SERVER_PORT}} -world \"{{WORLD}}\" -password \"{{PASSWORD}}\" -public ${PUBLIC} > >(sed -uE \"{{FILTER}}\") & trap \"{{STOP}}\" 15; wait $!", + "startup": "export DOORSTOP_ENABLE=TRUE; export DOORSTOP_INVOKE_DLL_PATH=.\/BepInEx\/core\/BepInEx.Preloader.dll; export DOORSTOP_CORLIB_OVERRIDE_PATH=.\/unstripped_corlib; export LD_LIBRARY_PATH=\".\/doorstop_libs:$LD_LIBRARY_PATH\"; export LD_PRELOAD=\"libdoorstop_x64.so:$LD_PRELOAD\"; export templdpath=$LD_LIBRARY_PATH; export LD_LIBRARY_PATH=\".\/linux64:$LD_LIBRARY_PATH\"; export SteamAppId=892970; export LD_LIBRARY_PATH=$templdpath; .\/valheim_server.x86_64 -nographics -batchmode -name \"{{SERVER_NAME}}\" -port {{SERVER_PORT}} -world \"{{WORLD}}\" -password \"{{PASSWORD}}\" -public ${PUBLIC} > >(sed -uE \"{{FILTER}}\") & trap \"{{STOP}}\" 15; wait $!", "config": { "files": "{}", "startup": "{\r\n \"done\": \"DungeonDB Start\"\r\n}", @@ -24,8 +24,8 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Valheim Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n# Image to install with is 'debian:buster-slim'\r\napt -y update\r\napt -y --no-install-recommends --no-install-suggests install curl lib32gcc1 ca-certificates unzip jq wget\r\n\r\n## just in case someone removed the defaults.\r\nif [ \"${STEAM_USER}\" == \"\" ]; then\r\n echo -e \"steam user is not set.\\n\"\r\n echo -e \"Using anonymous user.\\n\"\r\n STEAM_USER=anonymous\r\n STEAM_PASS=\"\"\r\n STEAM_AUTH=\"\"\r\nelse\r\n echo -e \"user set to ${STEAM_USER}\"\r\nfi\r\n\r\n## download and install steamcmd\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n## install game using steamcmd\r\n.\/steamcmd.sh +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +force_install_dir \/mnt\/server +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} +quit\r\n\r\n## set up 32 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v linux32\/steamclient.so ..\/.steam\/sdk32\/steamclient.so\r\n\r\n## set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so\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 [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_LINK=$(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_LINK=$(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_LINK=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\ncd \/mnt\/server\r\nwget -N $DOWNLOAD_LINK\r\nunzip -o $MATCH\r\nrm -fR $MATCH\r\n\r\nchmod u+x start_server_bepinex.sh", - "container": "debian:buster-slim", + "script": "#!\/bin\/bash\r\n# Valheim Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n# Image to install with is 'debian:buster-slim'\r\napt -y update\r\napt -y --no-install-recommends --no-install-suggests install curl lib32gcc-s1 ca-certificates unzip jq wget\r\n\r\n## just in case someone removed the defaults.\r\nif [ \"${STEAM_USER}\" == \"\" ]; then\r\n echo -e \"steam user is not set.\\n\"\r\n echo -e \"Using anonymous user.\\n\"\r\n STEAM_USER=anonymous\r\n STEAM_PASS=\"\"\r\n STEAM_AUTH=\"\"\r\nelse\r\n echo -e \"user set to ${STEAM_USER}\"\r\nfi\r\n\r\n## download and install steamcmd\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n## install game using steamcmd\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} +quit\r\n\r\n## set up 32 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v linux32\/steamclient.so ..\/.steam\/sdk32\/steamclient.so\r\n\r\n## set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so\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 [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_LINK=$(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_LINK=$(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_LINK=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\ncd \/mnt\/server\r\nwget -N $DOWNLOAD_LINK\r\nunzip -o $MATCH\r\nrm -fR $MATCH\r\n\r\nchmod u+x start_server_bepinex.sh", + "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } }, @@ -139,4 +139,4 @@ "rules": "required|string" } ] -} +} \ No newline at end of file From 2ef442053c75f86ee9b5345f7ade4988a7dc7a44 Mon Sep 17 00:00:00 2001 From: Bad <87938689+yesBad@users.noreply.github.com> Date: Sun, 15 May 2022 17:21:32 +0300 Subject: [PATCH 15/43] Fix L4D & L4D2 links in readme.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 19c8bea82..14ab3907d 100644 --- a/README.md +++ b/README.md @@ -208,8 +208,8 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Hurtworld](game_eggs/steamcmd_servers/hurtworld) * [Insurgency: Sandstorm](game_eggs/steamcmd_servers/insurgency_sandstorm) * [Killing Floor 2](game_eggs/steamcmd_servers/killing_floor_2) -* [Left 4 Dead](game_eggs/steamcdm_servers/left4dead) -* [Left 4 Dead 2](game_eggs/steamcdm_servers/left4dead_2) +* [Left 4 Dead](game_eggs/steamcmd_servers/left4dead) +* [Left 4 Dead 2](game_eggs/steamcmd_servers/left4dead_2) * [Modiverse](game_eggs/steamcmd_servers/modiverse) * [Mordhau](game_eggs/steamcmd_servers/mordhau) * [No More Room in Hell](game_eggs/steamcmd_servers/nmrih) From 8d0fa47a8311bd478bd36bfb27cf330d1041de29 Mon Sep 17 00:00:00 2001 From: DaFray31 Date: Mon, 16 May 2022 15:33:15 +0200 Subject: [PATCH 16/43] Update egg-j-music-bot.json --- bots/discord/jmusicbot/egg-j-music-bot.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bots/discord/jmusicbot/egg-j-music-bot.json b/bots/discord/jmusicbot/egg-j-music-bot.json index 5804cde5e..31f440c76 100644 --- a/bots/discord/jmusicbot/egg-j-music-bot.json +++ b/bots/discord/jmusicbot/egg-j-music-bot.json @@ -34,7 +34,7 @@ "default_value": "You need to get a token", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:70" + "rules": "required|string" }, { "name": "[REQUIRED] Bot Owner ID", From 62df08d68ad2c254a2aa1595a18d8b60e70077c4 Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Mon, 16 May 2022 16:53:52 +0200 Subject: [PATCH 17/43] Update egg-gitea.json --- software/gitea/egg-gitea.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/software/gitea/egg-gitea.json b/software/gitea/egg-gitea.json index bb51ced32..f402222a6 100644 --- a/software/gitea/egg-gitea.json +++ b/software/gitea/egg-gitea.json @@ -4,13 +4,13 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2021-07-07T21:58:54+02:00", + "exported_at": "2022-05-16T16:53:24+02:00", "name": "Gitea", "author": "mario.franze@gmail.com", "description": "Gitea is a community managed lightweight code hosting solution written in Go. It is published under the MIT license.", "features": null, "images": [ - "quay.io\/parkervcp\/pterodactyl-images:base_debian" + "ghcr.io\/parkervcp\/yolks:debian" ], "file_denylist": [], "startup": ".\/gitea web -p {{SERVER_PORT}} -c .\/app.ini", @@ -22,7 +22,7 @@ }, "scripts": { "installation": { - "script": "apt update\r\napt install -y wget\r\n\r\ncd \/mnt\/server\r\n\r\nwget -O gitea https:\/\/dl.gitea.io\/gitea\/main\/gitea-main-linux-amd64\r\nchmod +x gitea\r\n\r\nmkdir custom\r\n\r\necho \"[server]\r\nLOCAL_ROOT_URL = http:\/\/localhost:${SERVER_PORT}\/\r\nDOMAIN = ${SERVER_IP}\r\nHTTP_PORT = ${SERVER_PORT}\r\nDISABLE_SSH = ${DISABLE_SSH}\r\nSSH_PORT = ${SSH_PORT}\" > \/mnt\/server\/custom\/app.ini\r\n\r\necho \"Install complete\"", + "script": "apt update\r\napt install -y wget\r\n\r\ncd \/mnt\/server\r\n\r\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && echo \"amd64\" || echo \"arm64\")\r\n\r\n\r\nwget -O gitea https:\/\/dl.gitea.io\/gitea\/main\/gitea-main-linux-${ARCH}\r\nchmod +x gitea\r\n\r\nmkdir custom\r\n\r\necho \"[server]\r\nLOCAL_ROOT_URL = http:\/\/localhost:${SERVER_PORT}\/\r\nDOMAIN = ${SERVER_IP}\r\nHTTP_PORT = ${SERVER_PORT}\r\nDISABLE_SSH = ${DISABLE_SSH}\r\nSSH_PORT = ${SSH_PORT}\" > \/mnt\/server\/custom\/app.ini\r\n\r\necho \"Install complete\"", "container": "debian:buster-slim", "entrypoint": "bash" } @@ -47,4 +47,4 @@ "rules": "required|integer|between:1024,65535" } ] -} \ No newline at end of file +} From 82fb0bcf7d085680f058c4347e1176ee9d7ea24a Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Fri, 20 May 2022 13:51:22 -0700 Subject: [PATCH 18/43] Initial Upload of Arma Reforger Egg - Added new egg - Added README for egg - Updated all directory READMEs (including fixing some style issues with `game_eggs\steamcmd_servers\README.md`) --- README.md | 1 + game_eggs/README.md | 1 + game_eggs/steamcmd_servers/README.md | 14 +- game_eggs/steamcmd_servers/arma/README.md | 1 + .../arma/arma_reforger/README.md | 90 ++++++++++ .../arma/arma_reforger/egg-arma-reforger.json | 168 ++++++++++++++++++ 6 files changed, 270 insertions(+), 5 deletions(-) create mode 100644 game_eggs/steamcmd_servers/arma/arma_reforger/README.md create mode 100644 game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json diff --git a/README.md b/README.md index 14ab3907d..4710d74da 100644 --- a/README.md +++ b/README.md @@ -193,6 +193,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [ARK: Survival Evolved](game_eggs/steamcmd_servers/ark_survival_evolved) * [Arma](game_eggs/steamcmd_servers/arma) * [Arma 3](game_eggs/steamcmd_servers/arma/arma3) + * [Arma Reforger](game_eggs/steamcmd_servers/arma/arma_reforger) * [Assetto Corsa](game_eggs/steamcmd_servers/assetto_corsa) * [Avorion](game_eggs/steamcmd_servers/avorion) * [Barotrauma](game_eggs/steamcmd_servers/barotrauma) diff --git a/game_eggs/README.md b/game_eggs/README.md index 5458c143c..0e21e6cd9 100644 --- a/game_eggs/README.md +++ b/game_eggs/README.md @@ -109,6 +109,7 @@ * [ARK: Survival Evolved](steamcmd_servers/ark_survival_evolved) * [Arma](steamcmd_servers/arma) * [Arma 3](steamcmd_servers/arma/arma3) + * [Arma Reforger](steamcmd_servers/arma/arma_reforger) * [Assetto Corsa](steamcmd_servers/assetto_corsa) * [Avorion](steamcmd_servers/avorion) * [Barotrauma](steamcmd_servers/barotrauma) diff --git a/game_eggs/steamcmd_servers/README.md b/game_eggs/steamcmd_servers/README.md index 448c6b728..4201e3f9a 100644 --- a/game_eggs/steamcmd_servers/README.md +++ b/game_eggs/steamcmd_servers/README.md @@ -12,7 +12,9 @@ This is a collection of servers that use SteamCMD to install. ## Arma -[Arma 3](arma/arma3) +* [Arma](arma) + * [Arma 3](arma/arma3) + * [Arma Reforger](arma/arma_reforger) ## Assetto Corsa @@ -35,6 +37,7 @@ This is a collection of servers that use SteamCMD to install. [Conan Exiles](conan_exiles) ## Craftopia + [Craftopia](craftopia) ## CryoFall @@ -70,9 +73,11 @@ This is a collection of servers that use SteamCMD to install. [Killing Floor 2](killing_floor_2) ## Left 4 Dead + [Left 4 Dead](left4dead) ## Left 4 Dead 2 + [Left 4 Dead](left4dead_2) ## Modiverse @@ -182,7 +187,6 @@ This is a collection of servers that use SteamCMD to install. ## Valheim -[Valheim](valheim) - -* [Valheim Vanilla](valheim/valheim_vanilla) -* [Valheim Plus Mod](valheim/valheim_plus) +* [Valheim](valheim) + * [Valheim Vanilla](valheim/valheim_vanilla) + * [Valheim Plus Mod](valheim/valheim_plus) diff --git a/game_eggs/steamcmd_servers/arma/README.md b/game_eggs/steamcmd_servers/arma/README.md index 9e667cb5d..e86d12e7c 100644 --- a/game_eggs/steamcmd_servers/arma/README.md +++ b/game_eggs/steamcmd_servers/arma/README.md @@ -5,3 +5,4 @@ ARMA is a series of first-person tactical military shooters, originally released ## Arma Titles * [Arma 3](arma3) +* [Arma Reforger](arma_reforger) diff --git a/game_eggs/steamcmd_servers/arma/arma_reforger/README.md b/game_eggs/steamcmd_servers/arma/arma_reforger/README.md new file mode 100644 index 000000000..7a4c9c4a2 --- /dev/null +++ b/game_eggs/steamcmd_servers/arma/arma_reforger/README.md @@ -0,0 +1,90 @@ +# Arma Reforger + +***Server version currently marked as early access by the Arma developers! Check back often for egg updates as more features are added to the server software.*** +___ + +## Authors / Contributors + + + + + + + +
+ +
Red-Thirten +
+
+ 💻 + 🔨 +
+ + + +___ + +### Game Description + +From Bohemia Interactive's [Website](https://reforger.armaplatform.com/): +> Experience authentic Cold War combat and join friends in the struggle for a sprawling, 51 km² mid-Atlantic island — or take on the role of Game Master and create your very own scenarios for others to enjoy. +___ + +### Egg Capabilities + +- Configurable to automatically check for server updates on start via SteamCMD. Forcing validation is also configurable. +- Able to download and load Arma Reforger Workshop mods on startup (requires manual editing of the `config.json` file). +- Configuration of multiple common settings in the `config.json` file via Startup Parameters: + - Server Name, Passwords, Scenario ID, Disable Third Person, Max FPS, and more... +- Max Players is configurable and able to be host enforced (\*see [Recommended Egg Modifications](#restrict-max-players)). +- [WHMCS](https://www.whmcs.com/) compatible. + +___ + +### Server Ports + +| Port | Default (UDP) | Notes | +|---------|---------|---------| +| **Game** | 2001 | **Required** / Primary port in Pterodactyl | +| Steam communication | 50000..65000 | Documented, but not seemingly needed | +| Steam Query | 17777 | Used to provide Steam with server status (but does not seemingly need to be forwarded) | + +___ + +### Installation/System Requirements + +| | Bare Minimum | Recommended | +|---------|---------|---------| +| Processor | Recent x86/64 (AMD/Intel) processor. No ARM support. | Can use up to 300-600% CPU under load with uncapped FPS (set Max FPS to prevent). | +| RAM | 3328 MiB | 6144-8192 MiB | +| Storage | 5 GB | 7-10 GB (or more, depending on number of mods downloaded) | +| Network | If node is behind a NAT, will require Egg Modification (\*see [Define Host Registered Bind Address](#define-host-registered-bind-address) | Pterodactyl Node is not behind a NAT | +| Game Ownership | Not required to start or download mods. | ---- | + +___ + +### How to Add Mods + +**TODO** + +___ + +### Recommended Egg Modifications + +The following are highly recommended variable modifications you can make to the egg after importing it to your panel. + +#### Define Host Registered Bind Address + +Due to a current behavior of Pterodactyl, `SERVER_IP` will not return the node's public IP address if it is behind a NAT; it will return its private IP address. Unfortunately at this time, Arma Reforger **requires** the server's public IP address to be strictly defined within `config.json`. If you know your node is behind a NAT (or you are finding your node's private IP address being added to `config.json`), you will need to edit this egg after importing it by following these steps: + +1. As a panel admin, find and open the egg within your Nests tab. +2. On the first tab, "Configuration", find the "Configuration Files" box under the "Process Management" section. +3. Carefully (as to not touch anything else), find `{{server.build.default.ip}}` and replace it with your node's public IP address. If done correctly, the line should now look something like this: + +```json +" \"gameHostRegisterBindAddress\"": " \"gameHostRegisterBindAddress\": \"123.4.56.789\",", +``` + +#### Restrict Max Players + +If you would like to restrict the maximum number of players that can join your client's server, you can change the permissions of the "Max Players" variable so that clients can only view this value (and not edit it). It's default value can also be changed, or the value can be changed on a server-by-server basis as desired. diff --git a/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json b/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json new file mode 100644 index 000000000..90e9004b5 --- /dev/null +++ b/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json @@ -0,0 +1,168 @@ +{ + "_comment": "Pterodactyl Satisfactory Egg ~ Red-Thirten ~ 2022-05-19", + "meta": { + "version": "PTDL_v1", + "update_url": null + }, + "name": "Arma Reforger", + "author": "rehlmgaming@gmail.com", + "description": "Experience authentic Cold War combat and join friends in the struggle for a sprawling, 51 km\u00b2 mid-Atlantic island \u2014 or take on the role of Game Master and create your very own scenarios for others to enjoy.", + "features": [ + "steam_disk_space" + ], + "images": [ + "ghcr.io\/parkervcp\/games:source" + ], + "file_denylist": [], + "startup": ".\/ArmaReforgerServer -gproj .\/addons\/data\/ArmaReforger.gproj -config .\/config.json -profile .\/profile -backendlog -nothrow -listScenarios -logStats $(({{LOG_INTERVAL}}*1000)) -maxFPS {{MAX_FPS}}", + "config": { + "files": "{\r\n \"config.json\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \" \\\"region\\\"\": \" \\\"region\\\": \\\"{{server.build.env.REGION}}\\\",\",\r\n \" \\\"gameHostBindAddress\\\"\": \" \\\"gameHostBindAddress\\\": \\\"0.0.0.0\\\",\",\r\n \" \\\"gameHostBindPort\\\"\": \" \\\"gameHostBindPort\\\": {{server.build.default.port}},\",\r\n \" \\\"gameHostRegisterBindAddress\\\"\": \" \\\"gameHostRegisterBindAddress\\\": \\\"{{server.build.default.ip}}\\\",\",\r\n \" \\\"gameHostRegisterPort\\\"\": \" \\\"gameHostRegisterPort\\\": {{server.build.default.port}},\",\r\n \" \\\"adminPassword\\\"\": \" \\\"adminPassword\\\": \\\"{{server.build.env.ADMIN_PASS}}\\\",\",\r\n \" \\\"name\\\"\": \" \\\"name\\\": \\\"{{server.build.env.SERVER_NAME}}\\\",\",\r\n \" \\\"password\\\"\": \" \\\"password\\\": \\\"{{server.build.env.SERVER_PASS}}\\\",\",\r\n \" \\\"scenarioId\\\"\": \" \\\"scenarioId\\\": \\\"{{server.build.env.SCENARIO_ID}}\\\",\",\r\n \" \\\"playerCountLimit\\\"\": \" \\\"playerCountLimit\\\": {{server.build.env.MAX_PLAYERS}},\",\r\n\t\t\t\" \\\"autoJoinable\\\"\": \" \\\"autoJoinable\\\": {{server.build.env.AUTO_JOINABLE}},\",\r\n\t\t\t\" \\\"visible\\\"\": \" \\\"visible\\\": {{server.build.env.VISIBLE}},\",\r\n\t\t\t\" \\\"disableThirdPerson\\\"\": \" \\\"disableThirdPerson\\\": {{server.build.env.DISABLE_THIRD}},\",\r\n\t\t\t\" \\\"battlEye\\\"\": \" \\\"battlEye\\\": {{server.build.env.BATTLEYE}},\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \"Starting RPL server\"\r\n}", + "logs": "{}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl Arma Reforger Egg - egg-arma-reforger.json\r\n## Author: David Wolfe (Red-Thirten)\r\n## Date: 2022\/05\/20\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n# Download and install SteamCMD\r\nexport HOME=\/mnt\/server\r\ncd \/tmp\r\nmkdir -p $HOME\/steamcmd $HOME\/steamapps\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C $HOME\/steamcmd\r\ncd $HOME\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir $HOME +login anonymous +app_update ${SRCDS_APPID} validate +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p $HOME\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so $HOME\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so $HOME\/.steam\/sdk64\/steamclient.so\r\n\r\n## Arma Reforger setup\r\n# Check for successful installation\r\nif [[ ! -f $HOME\/ArmaReforgerServer ]]; then\r\n echo -e \"\\n\\nSteamCMD failed to install the Arma Reforger Dedicated Server!\"\r\n echo -e \"\\tTry reinstalling the server again.\\n\"\r\n exit 1\r\nfi\r\n\r\nmkdir -p $HOME\/profile\r\n\r\necho -e 'Creating default \"config.json\" configuration file...'\r\ncat > $HOME\/config.json << EOF\r\n{\r\n\t\"dedicatedServerId\": \"\",\r\n\t\"region\": \"${REGION}\",\r\n\t\"gameHostBindAddress\": \"0.0.0.0\",\r\n\t\"gameHostBindPort\": ${SERVER_PORT},\r\n\t\"gameHostRegisterBindAddress\": \"${SERVER_IP}\",\r\n\t\"gameHostRegisterPort\": ${SERVER_PORT},\r\n\t\"adminPassword\": \"${ADMIN_PASS}\",\r\n\t\"game\": {\r\n\t\t\"name\": \"${SERVER_NAME}\",\r\n\t\t\"password\": \"${SERVER_PASS}\",\r\n\t\t\"scenarioId\": \"${SCENARIO_ID}\",\r\n\t\t\"playerCountLimit\": ${MAX_PLAYERS},\r\n\t\t\"autoJoinable\": ${AUTO_JOINABLE},\r\n\t\t\"visible\": ${VISIBLE},\r\n\t\t\"gameProperties\": {\r\n\t\t\t\"serverMaxViewDistance\": 2500,\r\n\t\t\t\"serverMinGrassDistance\": 50,\r\n\t\t\t\"networkViewDistance\": 1000,\r\n\t\t\t\"disableThirdPerson\": ${DISABLE_THIRD},\r\n\t\t\t\"fastValidation\": true,\r\n\t\t\t\"battlEye\": ${BATTLEYE},\r\n\t\t\t\"missionHeader\": {}\r\n\t\t},\r\n\t\t\"mods\": []\r\n\t}\r\n}\r\nEOF\r\n\r\necho -e \"\\nArma Reforger Dedicated Server successfully installed!\\n\"", + "container": "ghcr.io\/parkervcp\/installers:debian", + "entrypoint": "\/bin\/bash" + } + }, + "variables": [ + { + "name": "Automatic Updates", + "description": "Quickly checks for any server or mod updates on startup, and updates if necessary.", + "env_variable": "AUTO_UPDATE", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "Server Region", + "description": "Region listed in the server browser. ISO 3166-1 alpha-2 codes can be used in this field.", + "env_variable": "REGION", + "default_value": "US", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:AD,AE,AF,AG,AI,AL,AM,AO,AQ,AR,AS,AT,AU,AW,AX,AZ,BA,BB,BD,BE,BF,BG,BH,BI,BJ,BL,BM,BN,BO,BQ,BR,BS,BT,BV,BW,BY,BZ,CA,CC,CD,CF,CG,CH,CI,CK,CL,CM,CN,CO,CR,CU,CV,CW,CX,CY,CZ,DE,DJ,DK,DM,DO,DZ,EC,EE,EG,EH,ER,ES,ET,EU,FI,FJ,FK,FM,FO,FR,GA,GB,GD,GE,GF,GG,GH,GI,GL,GM,GN,GP,GQ,GR,GS,GT,GU,GW,GY,HK,HM,HN,HR,HT,HU,ID,IE,IL,IM,IN,IO,IQ,IR,IS,IT,JE,JM,JO,JP,KE,KG,KH,KI,KM,KN,KP,KR,KW,KY,KZ,LA,LB,LC,LI,LK,LR,LS,LT,LU,LV,LY,MA,MC,MD,ME,MF,MG,MH,MK,ML,MM,MN,MO,MP,MQ,MR,MS,MT,MU,MV,MW,MX,MY,MZ,NA,NC,NE,NF,NG,NI,NL,NO,NP,NR,NU,NZ,OM,PA,PE,PF,PG,PH,PK,PL,PM,PN,PR,PS,PT,PW,PY,QA,RE,RO,RS,RU,RW,SA,SB,SC,SD,SE,SG,SH,SI,SJ,SK,SL,SM,SN,SO,SR,SS,ST,SV,SX,SY,SZ,TC,TD,TF,TG,TH,TJ,TK,TL,TM,TN,TO,TR,TT,TV,TW,TZ,UA,UG,UM,US,UY,UZ,VA,VC,VE,VG,VI,VN,VU,WF,WS,YE,YT,ZA,ZM,ZW" + }, + { + "name": "Server Name", + "description": "Name displayed in the server browser.", + "env_variable": "SERVER_NAME", + "default_value": "Arma Reforger Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:255" + }, + { + "name": "Max Players", + "description": "Maximum number of players allowed to join the server.", + "env_variable": "MAX_PLAYERS", + "default_value": "32", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|between:1,64" + }, + { + "name": "Server Password", + "description": "Password required for clients to enter before they can join the server. Leave empty to have no password.", + "env_variable": "SERVER_PASS", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string|max:32" + }, + { + "name": "Admin Password", + "description": "", + "env_variable": "ADMIN_PASS", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string|max:32" + }, + { + "name": "Scenario ID", + "description": "ID of scenario to run\/play. Valid IDs can be viewed in the console upon startup of the server.", + "env_variable": "SCENARIO_ID", + "default_value": "{ECC61978EDCC2B5A}Missions\/23_Campaign.conf", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "Auto Joinable", + "description": "Set if the session can be selected through the auto join feature.", + "env_variable": "AUTO_JOINABLE", + "default_value": "true", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false" + }, + { + "name": "Visible in Server Browser", + "description": "Set the visibility of the server in the Server Browser.", + "env_variable": "VISIBLE", + "default_value": "true", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false" + }, + { + "name": "Enable BattlEye", + "description": "Enables the anti-cheat engine on the server and requires all clients to be running it.", + "env_variable": "BATTLEYE", + "default_value": "true", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false" + }, + { + "name": "Disable Third Person", + "description": "", + "env_variable": "DISABLE_THIRD", + "default_value": "false", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false" + }, + { + "name": "[Advanced] Max FPS", + "description": "Sets a maximum FPS limit for the server, saving performance in some cases. Leave empty for no limit.", + "env_variable": "MAX_FPS", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|integer|gt:0" + }, + { + "name": "[Advanced] Log FPS Interval", + "description": "How often (in seconds) to log the FPS and other debug stats to the console. Set to 0 to disable.", + "env_variable": "LOG_INTERVAL", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|min:0" + }, + { + "name": "[Repair] Validate Server Files", + "description": "\"true\" to enable; empty to disable. Validates all server files when Automatic Updates is enabled. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed.", + "env_variable": "VALIDATE", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "name": "[Advanced] Arma Reforger Dedicated Server App ID", + "description": "Used for installation and updates. Rarely needs to be changed.", + "env_variable": "SRCDS_APPID", + "default_value": "1874900", + "user_viewable": false, + "user_editable": false, + "rules": "required|integer" + } + ] +} \ No newline at end of file From 1db3cab7382ccd568fea6753c869853a8f3a91d1 Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Fri, 20 May 2022 15:14:56 -0700 Subject: [PATCH 19/43] Updated README & Small Fix - Added "How to Add Mods" section to egg's README. - Fixed copy/paste mistake on `_comment` line of egg. --- .../arma/arma_reforger/README.md | 39 ++++++++++++++++++- .../arma/arma_reforger/egg-arma-reforger.json | 2 +- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/game_eggs/steamcmd_servers/arma/arma_reforger/README.md b/game_eggs/steamcmd_servers/arma/arma_reforger/README.md index 7a4c9c4a2..ad9856607 100644 --- a/game_eggs/steamcmd_servers/arma/arma_reforger/README.md +++ b/game_eggs/steamcmd_servers/arma/arma_reforger/README.md @@ -17,6 +17,13 @@ ___ 💻 🔨 + + +
Soljian +
+
+ 💡 + @@ -65,7 +72,35 @@ ___ ### How to Add Mods -**TODO** +Currently, adding mods to your server is tricky because there is very little documentation and it is difficult to find mod IDs. Hopefully this will change in the future, but following these steps will get it to work: + +1. Open up a client copy of Arma Reforger and subscribe/download any mods you want to add to the server (at this time, I do not know of a way to find mod IDs without requiring use of the game). +2. Once done, close the game and navigate to this folder on your computer: `My Documents\My Games\ArmaReforger\addons\` +3. Aimlessly open each folder to find which mods you want to add and open each of their `ServerData.json` files in a text editor. +4. Then, on your server panel, open the `config.json` file for editing. +5. Find `"mods": []` and replace it with the following: + +```json +"mods": [ + { + "modId": "591AF5BDA9F7CE8B", + "name": "Capture & Hold", + "version": "1.0.0" + }, + { + "modId": "9A51598BACFBFDE7", + "name": "Explosive Goats Beta", + "version": "0.5.42" + } +] +``` + +6. Change `modId` to equal the `id` value found at the top of the `ServerData.json` file you found. +7. Change `name` to equal the `name` value found at the **top** of the `ServerData.json` file you found. +8. Change `version` to equal the `version` value found at the top of the `ServerData.json` file you found. +9. Repeat for each mod you want to add by copy/pasting the `{}` sections like shown above. Make sure each `{}` section has a `,` after it, **except** for the last item. + +The server will automatically download and run the mods you specify on startup. For mods that add scenarios, you can find the Scenario IDs listed as `gameId` in the `ServerData.json` file. Lastly, if a mod updates, you will likely have to change the `version` value to match it's new version. You may also have to delete the mod folder in the `addons/` directory to have it re-download (reports on this have been mixed). ___ @@ -78,7 +113,7 @@ The following are highly recommended variable modifications you can make to the Due to a current behavior of Pterodactyl, `SERVER_IP` will not return the node's public IP address if it is behind a NAT; it will return its private IP address. Unfortunately at this time, Arma Reforger **requires** the server's public IP address to be strictly defined within `config.json`. If you know your node is behind a NAT (or you are finding your node's private IP address being added to `config.json`), you will need to edit this egg after importing it by following these steps: 1. As a panel admin, find and open the egg within your Nests tab. -2. On the first tab, "Configuration", find the "Configuration Files" box under the "Process Management" section. +2. On the first tab "Configuration", find the "Configuration Files" box under the "Process Management" section. 3. Carefully (as to not touch anything else), find `{{server.build.default.ip}}` and replace it with your node's public IP address. If done correctly, the line should now look something like this: ```json diff --git a/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json b/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json index 90e9004b5..de4ff7258 100644 --- a/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json +++ b/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json @@ -1,5 +1,5 @@ { - "_comment": "Pterodactyl Satisfactory Egg ~ Red-Thirten ~ 2022-05-19", + "_comment": "Pterodactyl Arma Reforger Egg ~ Red-Thirten ~ 2022-05-20", "meta": { "version": "PTDL_v1", "update_url": null From 65d5978e8c1d3e60637f37c7fa47380be23dbfc6 Mon Sep 17 00:00:00 2001 From: softwarenoob Date: Sat, 21 May 2022 18:31:51 +0300 Subject: [PATCH 20/43] fix: update Paper API Paper api endpoints have been updated to api.papermc.io/v2 from the old papermc.io/api/v2 This is a copy of default Paper egg from the Panel, but without PTDL_V2 changes, which requires Panel 1.8+ that has not been released yet. --- game_eggs/minecraft/java/paper/egg-paper.json | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/game_eggs/minecraft/java/paper/egg-paper.json b/game_eggs/minecraft/java/paper/egg-paper.json index bbb9de1b9..98d3195e7 100644 --- a/game_eggs/minecraft/java/paper/egg-paper.json +++ b/game_eggs/minecraft/java/paper/egg-paper.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2021-12-09T13:30:53-05:00", + "exported_at": "2022-05-21T10:48:18-04:00", "name": "Paper", "author": "parker@pterodactyl.io", "description": "High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies.", @@ -14,24 +14,24 @@ "pid_limit" ], "images": [ - "ghcr.io\/pterodactyl\/yolks:java_17", - "ghcr.io\/pterodactyl\/yolks:java_16", + "ghcr.io\/pterodactyl\/yolks:java_8", "ghcr.io\/pterodactyl\/yolks:java_11", - "ghcr.io\/pterodactyl\/yolks:java_8" + "ghcr.io\/pterodactyl\/yolks:java_16", + "ghcr.io\/pterodactyl\/yolks:java_17" ], "file_denylist": [], "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -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 }\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": "{\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# Paper Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nPROJECT=paper\r\n\r\napt update\r\napt install -y curl jq\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\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", - "container": "debian:buster-slim", - "entrypoint": "bash" + "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\/pterodactyl\/installers:alpine", + "entrypoint": "ash" } }, "variables": [ @@ -41,7 +41,7 @@ "env_variable": "MINECRAFT_VERSION", "default_value": "latest", "user_viewable": true, - "user_editable": false, + "user_editable": true, "rules": "nullable|string|max:20" }, { @@ -51,7 +51,7 @@ "default_value": "server.jar", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20" + "rules": "required|regex:\/^([\\w\\d._-]+)(\\.jar)$\/" }, { "name": "Download Path", @@ -68,7 +68,7 @@ "env_variable": "BUILD_NUMBER", "default_value": "latest", "user_viewable": true, - "user_editable": false, + "user_editable": true, "rules": "required|string|max:20" } ] From d0d92996a3340c9526abc895df23f957fc7a70b2 Mon Sep 17 00:00:00 2001 From: Doc Date: Sun, 22 May 2022 00:21:59 -0400 Subject: [PATCH 21/43] Update download API for Magma --- game_eggs/minecraft/java/magma/egg-magma.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/game_eggs/minecraft/java/magma/egg-magma.json b/game_eggs/minecraft/java/magma/egg-magma.json index 49e639305..9be55697b 100644 --- a/game_eggs/minecraft/java/magma/egg-magma.json +++ b/game_eggs/minecraft/java/magma/egg-magma.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2022-01-11T09:07:47-05:00", + "exported_at": "2022-05-22T00:20:47-04:00", "name": "Magma", "author": "support@pterodactyl.io", "description": "Magma is most powerful Forge server providing you with Forge mods and Bukkit Plugins using Spigot and Paper for Performance Optimization and Stability.", @@ -28,7 +28,7 @@ }, "scripts": { "installation": { - "script": "apt 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# get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.magmafoundation.org\/api\/resources\/magma\/1.16.5\/${BRANCH}\/latest\")\r\nOLD_JSON=$(curl --silent \"https:\/\/api.magmafoundation.org\/api\/resources\/magma\/1.12\/${BRANCH}\/latest\")\r\n\r\nif [[ -z \"${MC_VERSION}\" ]] || [[ \"${MC_VERSION}\" == \"latest\" ]]; then\r\n echo -e \"Version not set. Defaulting to latest\"\r\n DOWNLOAD_LINK=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i installer.jar)\r\n\r\nelif [[ $MC_VERSION =~ ^1\\.(16|17|18|19|20|21|22|23) ]]; then\r\n CUSTOM_JSON=$(curl --silent \"https:\/\/api.magmafoundation.org\/api\/resources\/magma\/${MC_VERSION}\/${BRANCH}\/latest\")\r\n DOWNLOAD_LINK=$(echo ${CUSTOM_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i installer.jar)\r\nelif [[ \"${MC_VERSION}\" == \"1.12\" ]]; then\r\n CUSTOM_JSON=$(curl --silent \"https:\/\/api.magmafoundation.org\/api\/resources\/magma\/1.12\/${BRANCH}\/latest\")\r\n DOWNLOAD_LINK=$(echo ${OLD_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i server.jar)\r\nelse\r\n # Try to locate version by exact tag name. This will most likely always fail, because the tag names are in a weird format. Leaving it here just in case someone wants to fetch exact tag releases.\r\n VERSION_CHECK=$(echo ${OLD_JSON} | jq -r --arg MC_VERSION \"${MC_VERSION}\" '.[] | select(.tag_name==$MC_VERSION) | .tag_name')\r\n if [[ \"${MC_VERSION}\" == \"${VERSION_CHECK}\" ]]; then\r\n DOWNLOAD_LINK=$(echo ${OLD_JSON} | jq -r --arg MC_VERSION \"${MC_VERSION}\" '.[] | select(.tag_name==$MC_VERSION) | .assets[].browser_download_url' | grep -i installer.jar)\r\n else\r\n echo -e \"Specified ${MC_VERSION} version not found. Defaulting to latest\"\r\n DOWNLOAD_LINK=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\n# validate download link\r\nif [ ! -z \"${DOWNLOAD_LINK}\" ]; then\r\n echo -e \"Validating downlaod link\"\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 \"Download URL ${DOWNLOAD_LINK} is invalid. Terminating install.\"\r\n exit 2\r\n fi\r\nfi\r\n\r\nfunction downloadMagma {\r\n echo -e \"running: curl -sSL -o installer.jar ${DOWNLOAD_LINK}\"\r\n curl -sSL -o installer.jar -sSL ${DOWNLOAD_LINK}\r\n}\r\n\r\nif [[ $MC_VERSION =~ ^1\\.(16|17|18|19|20|21|22|23) ]] || [[ -z \"${MC_VERSION}\" ]] || [[ \"${MC_VERSION}\" == \"latest\" ]] ; then\r\n downloadMagma\r\n echo -e \"1.16.5 or newer version detected. Running installer\"\r\n java -jar installer.jar --installServer || { echo -e \"install failed\" exit 4; }\r\n mv forge-*.jar $SERVER_JARFILE\r\n echo -e \"Deleting installer.jar file.\\n\"\r\n rm -rf *installer.jar\r\nelse\r\n downloadMagma\r\n echo -e \"Older magma version detected. Skipping installer\"\r\n mv installer.jar $SERVER_JARFILE\r\nfi\r\n\r\necho -e \"Install Complete\"", + "script": "apt 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# get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.magmafoundation.org\/api\/v2\/1.16.5\/latest\")\r\n\r\nif [[ -z \"${TAG_VERSION}\" ]]; then\r\n TAG_VERSION = \"latest\"\r\nfi\r\n\r\nif [[ -z \"${MC_VERSION}\" ]] || [[ \"${MC_VERSION}\" == \"latest\" ]]; then\r\n echo -e \"Version not set. Defaulting to latest\"\r\n DOWNLOAD_LINK=$(echo ${LATEST_JSON} | jq -r .link | grep -i installer.jar)\r\nelif [[ $MC_VERSION =~ ^1\\.(16|17|18|19|20|21|22|23) ]]; then\r\n CUSTOM_JSON=$(curl --silent \"https:\/\/api.magmafoundation.org\/api\/v2\/${MC_VERSION}\/${TAG_VERSION}\")\r\n DOWNLOAD_LINK=$(echo ${CUSTOM_JSON} | jq -r .link | grep -i installer.jar)\r\nelif [[ \"${MC_VERSION}\" == \"1.12\" ]]; then\r\n CUSTOM_JSON=$(curl --silent \"https:\/\/api.magmafoundation.org\/api\/v2\/1.12\/${TAG_VERSION}\")\r\n DOWNLOAD_LINK=$(echo ${CUSTOM_JSON} | jq -r .link | grep -i server.jar)\r\nelse\r\n echo -e \"Specified ${MC_VERSION} version not found. Defaulting to latest\"\r\n DOWNLOAD_LINK=$(echo ${LATEST_JSON} | jq .link)\r\nfi\r\n\r\n# validate download link\r\nif [ ! -z \"${DOWNLOAD_LINK}\" ]; then\r\n echo -e \"Validating download link\"\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 \"Download URL ${DOWNLOAD_LINK} is invalid. Terminating install.\"\r\n exit 2\r\n fi\r\nfi\r\n\r\nfunction downloadMagma {\r\n echo -e \"running: curl -sSL -o installer.jar ${DOWNLOAD_LINK}\"\r\n curl -sSL -o installer.jar -sSL ${DOWNLOAD_LINK}\r\n}\r\n\r\nif [[ $MC_VERSION =~ ^1\\.(16|17|18|19|20|21|22|23) ]] || [[ -z \"${MC_VERSION}\" ]] || [[ \"${MC_VERSION}\" == \"latest\" ]] ; then\r\n downloadMagma\r\n echo -e \"1.16.5 or newer version detected. Running installer\"\r\n java -jar installer.jar --installServer || { echo -e \"install failed\" exit 4; }\r\n mv forge-*.jar $SERVER_JARFILE\r\n echo -e \"Deleting installer.jar file.\\n\"\r\n rm -rf *installer.jar\r\nelse\r\n downloadMagma\r\n echo -e \"Older magma version detected. Skipping installer\"\r\n mv installer.jar $SERVER_JARFILE\r\nfi\r\n\r\necho -e \"Install Complete\"", "container": "openjdk:8-jdk-slim", "entrypoint": "bash" } @@ -53,13 +53,13 @@ "rules": "nullable|string|max:20" }, { - "name": "Branch [dev or stable]", - "description": "Branch to install. Valid options: dev or stable", - "env_variable": "BRANCH", - "default_value": "dev", + "name": "Tag Version", + "description": "Optional.\r\n\r\nSpecify the tag version to install. Leave empty or set latest to install latest", + "env_variable": "TAG_VERSION", + "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:dev,stable" + "rules": "nullable|string|max:20" } ] -} +} \ No newline at end of file From 0f48b962183053f3eb3a0b705285b07a1c9aa332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Dobo=C5=A1?= Date: Wed, 20 Apr 2022 01:29:38 +0200 Subject: [PATCH 22/43] Remove unmaintaned Tuinity As it poses a security risk both with present log4j vuln & the CI is dismantled, it no longer works. --- README.md | 1 - game_eggs/README.md | 1 - game_eggs/minecraft/README.md | 1 - game_eggs/minecraft/java/README.md | 5 -- game_eggs/minecraft/java/tuinity/README.MD | 13 ----- .../minecraft/java/tuinity/egg-tuinity.json | 48 ------------------- 6 files changed, 69 deletions(-) delete mode 100644 game_eggs/minecraft/java/tuinity/README.MD delete mode 100644 game_eggs/minecraft/java/tuinity/egg-tuinity.json diff --git a/README.md b/README.md index bbed65502..5939a1caa 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,6 @@ If you are reading this it looks like you are looking to add an egg to your serv * [SpongeForge](game_eggs/minecraft/java/spongeforge) * [SpongeVanilla](game_eggs/minecraft/java/spongevanilla) * [Technic](game_eggs/minecraft/java/technic) - * [Tuinity](game_eggs/minecraft/java/tuinity) * [VanillaCord](game_eggs/minecraft/java/vanillacord) * [Proxies](game_eggs/minecraft/proxy) Minecraft Server Proxies diff --git a/game_eggs/README.md b/game_eggs/README.md index 5458c143c..0d71380f1 100644 --- a/game_eggs/README.md +++ b/game_eggs/README.md @@ -70,7 +70,6 @@ * [SpongeForge](minecraft/java/spongeforge) * [SpongeVanilla](minecraft/java/spongevanilla) * [Technic](minecraft/java/technic) - * [Tuinity](minecraft/java/tuinity) * [VanillaCord](minecraft/java/vanillacord) * [Proxies](minecraft/proxy) Minecraft Server Proxies diff --git a/game_eggs/minecraft/README.md b/game_eggs/minecraft/README.md index e10d63b22..e29d0c8cb 100644 --- a/game_eggs/minecraft/README.md +++ b/game_eggs/minecraft/README.md @@ -32,7 +32,6 @@ It’s set in infinitely-generated worlds of wide open terrain - icy mountains, * [SpongeForge](minecraft/java/spongeforge) * [SpongeVanilla](minecraft/java/spongevanilla) * [Technic](minecraft/java/technic) -* [Tuinity](minecraft/java/tuinity) * [VanillaCord](minecraft/java/vanillacord) ## [Proxies](proxy) Minecraft Server Proxies diff --git a/game_eggs/minecraft/java/README.md b/game_eggs/minecraft/java/README.md index af6d5ae3b..fdd1b58a2 100644 --- a/game_eggs/minecraft/java/README.md +++ b/game_eggs/minecraft/java/README.md @@ -115,11 +115,6 @@ This is a direct fork of the default spigot service with the added benefit of be [Airplane Github](https://github.com/TECHNOVE/Airplane) A stable, optimized and well supported Paper fork. -### [Tuinity](tuinity) - -[Tuinity GitHub](https://github.com/Spottedleaf/Tuinity) -Fork of Paper aimed at improving server performance at high playercounts. - ## Sponge Powered ### [SpongeForge](spongeforge) diff --git a/game_eggs/minecraft/java/tuinity/README.MD b/game_eggs/minecraft/java/tuinity/README.MD deleted file mode 100644 index e57fcef3c..000000000 --- a/game_eggs/minecraft/java/tuinity/README.MD +++ /dev/null @@ -1,13 +0,0 @@ -# Tuinity - -Fork of Paper aimed at improving server performance at high playercounts. - -[Tuinity GitHub](https://github.com/Tuinity/Tuinity) - -## Server Ports - -The minecraft server requires a single port for access (default 25565) but plugins may require extra ports to enabled for the server. - -| Port | default | -|-------|---------| -| Game | 25565 | diff --git a/game_eggs/minecraft/java/tuinity/egg-tuinity.json b/game_eggs/minecraft/java/tuinity/egg-tuinity.json deleted file mode 100644 index e8af6c52c..000000000 --- a/game_eggs/minecraft/java/tuinity/egg-tuinity.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", - "meta": { - "version": "PTDL_v1", - "update_url": null - }, - "exported_at": "2021-12-09T13:30:24-05:00", - "name": "Tuinity", - "author": "unknown@unknown.com", - "description": "Fork of Paper aimed at improving server performance at high playercounts.", - "features": [ - "eula", - "java_version", - "pid_limit" - ], - "images": [ - "ghcr.io\/pterodactyl\/yolks:java_17", - "ghcr.io\/pterodactyl\/yolks:java_16", - "ghcr.io\/pterodactyl\/yolks:java_11", - "ghcr.io\/pterodactyl\/yolks:java_8" - ], - "file_denylist": [], - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -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 }\r\n }\r\n}", - "startup": "{\r\n \"done\": \")! For help, type \"\r\n}", - "logs": "{}", - "stop": "stop" - }, - "scripts": { - "installation": { - "script": "#!\/bin\/bash\r\n# Tuinity Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\napt update\r\napt -y install curl\r\ncd \/mnt\/server\r\n\r\nif [ ! -f server.properties ]; then\r\ncurl -o server.properties https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/java\/server.properties\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} https:\/\/ci.codemc.io\/job\/Spottedleaf\/job\/Tuinity\/lastStableBuild\/artifact\/tuinity-paperclip.jar", - "container": "debian:buster-slim", - "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|string|max:20" - } - ] -} From a485c6c97478f815e7292a2f10e054bfca1353e6 Mon Sep 17 00:00:00 2001 From: Gorian <1012176+Gorian@users.noreply.github.com> Date: Sun, 22 May 2022 13:38:08 -0700 Subject: [PATCH 23/43] added link to foundry website --- game_eggs/FoundryVTT/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_eggs/FoundryVTT/README.md b/game_eggs/FoundryVTT/README.md index 1e4fdacf9..eb85dd3c1 100644 --- a/game_eggs/FoundryVTT/README.md +++ b/game_eggs/FoundryVTT/README.md @@ -1,5 +1,5 @@ # Foundry VTT -Foundry VTT is a standalone application built for experiencing multiplayer tabletop RPGs using a feature-rich and modern self-hosted application where your players connect directly through the browser. +[Foundry VTT](https://foundryvtt.com/) is a standalone application built for experiencing multiplayer tabletop RPGs using a feature-rich and modern self-hosted application where your players connect directly through the browser. # Installation Foundry requires a license. In order to use this egg, you will need to purchase a foundry license, select the linux platform from your profile on the website, and then paste the "Timed URL" into the variable when seting up the server. From bd8ac8d6dfbe7c18d85deb5401419d2624f18ae2 Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Sun, 22 May 2022 16:28:29 -0700 Subject: [PATCH 24/43] Fix root README invalid link League Sandbox had an invalid sub-list item with a link that lead to a 404. --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 4710d74da..b00240da9 100644 --- a/README.md +++ b/README.md @@ -126,8 +126,6 @@ If you are reading this it looks like you are looking to add an egg to your serv [League Sandbox](game_eggs/leaguesandbox) -* [League Sandbox](game_eggs/leaguesandbox/leaguesandbox) - [Minetest](game_eggs/minetest) (including MTG) * [Minetest](game_eggs/minetest/minetest) From da7bfab43dafb0f2cb19126756fadad2fdd33c4a Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Sun, 22 May 2022 18:17:59 -0700 Subject: [PATCH 25/43] General Egg Cleanup - Fixed typo in description - Fixed BattlEye path in startup command - Wrapped extra startup parameters in quotations to prevent a malicious client from executing arbitrary bash commands on the container via a (potentially forced) Arma server application crash. - Stop command no longer requires extra "C" and was fixed. - Updated install script to check for valid Steam credentials (required for Arma 3) and removed an un-needed directory creation. Also made the Script Entrypoint Command more specific. - Removed long gone depreciated startup variables (not even used in startup or entrypoint anymore). --- .../arma/arma3/egg-arma3.json | 33 ++++--------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/game_eggs/steamcmd_servers/arma/arma3/egg-arma3.json b/game_eggs/steamcmd_servers/arma/arma3/egg-arma3.json index c4bc36b35..fc781d8f0 100644 --- a/game_eggs/steamcmd_servers/arma/arma3/egg-arma3.json +++ b/game_eggs/steamcmd_servers/arma/arma3/egg-arma3.json @@ -1,13 +1,12 @@ { - "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "_comment": "Pterodactyl Arma 3 Egg ~ David Wolfe (Red-Thirten) ~ 2022-05-22", "meta": { "version": "PTDL_v1", "update_url": null }, - "exported_at": "2021-11-26T13:51:11+01:00", "name": "Arma 3", "author": "rehlmgaming@gmail.com", - "description": "Experience true combat gameplay in a massive military sandbox. Deploying a wide variety of single- and multiplayer content, over 20 vehicles and 40 weapons, and limitless opportunities for content creation, this is the PC's premier military game. Authentic, diverse, open - Arma 3 sends you to war.", + "description": "Experience true combat gameplay in a massive military sandbox. Deploying a wide variety of single and multiplayer content, over 20 vehicles and 40 weapons, and limitless opportunities for content creation, this is the PC's premier military game. Authentic, diverse, open - Arma 3 sends you to war.", "features": [ "steam_disk_space" ], @@ -15,18 +14,18 @@ "ghcr.io\/parkervcp\/games:arma3" ], "file_denylist": [], - "startup": ".\/{{SERVER_BINARY}} -ip=0.0.0.0 -port={{SERVER_PORT}} -profiles=.\/serverprofile -bepath=.\/battleye -cfg=basic.cfg -config=server.cfg -mod=\\\"{{CLIENT_MODS}}\\\" -serverMod=\\\"{{SERVERMODS}}\\\" {{STARTUP_PARAMS}}", + "startup": ".\/{{SERVER_BINARY}} -ip=0.0.0.0 -port={{SERVER_PORT}} -profiles=.\/serverprofile -bepath=.\/ -cfg=basic.cfg -config=server.cfg -mod=\\\"{{CLIENT_MODS}}\\\" -serverMod=\\\"{{SERVERMODS}}\\\" \\\"{{STARTUP_PARAMS}}\\\"", "config": { "files": "{\r\n \"server.cfg\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"password=\": \"password = \\\"{{env.SERVER_PASSWORD}}\\\";\",\r\n \"\/\/password=\": \"password = \\\"{{env.SERVER_PASSWORD}}\\\";\",\r\n \"password =\": \"password = \\\"{{env.SERVER_PASSWORD}}\\\";\",\r\n \"\/\/password =\": \"password = \\\"{{env.SERVER_PASSWORD}}\\\";\",\r\n \"maxPlayers\": \"maxPlayers = {{env.MAX_PLAYERS}};\",\r\n \"headlessClients\": \"headlessClients[] = { \\\"127.0.0.1\\\" };\",\r\n \"localClient\": \"localClient[] = { \\\"127.0.0.1\\\" };\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"Host identity created.\"\r\n}", "logs": "{}", - "stop": "^CC" + "stop": "^C" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl Arma 3 Egg - egg-arma3.json\r\n## Author: David Wolfe (Red-Thirten)\r\n## Date: 2021\/07\/11\r\n## License: MIT License\r\n\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n# Download and install SteamCMD\r\ncd \/tmp\r\nmkdir -p \"\/mnt\/server\/steamcmd\" \"\/mnt\/server\/steamapps\"\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server \"+login \\\"${STEAM_USER}\\\" \\\"${STEAM_PASS}\\\"\" +app_update ${STEAMCMD_APPID} ${STEAMCMD_EXTRA_FLAGS} validate +quit\r\n\r\n# Set up 32 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v linux32\/steamclient.so ..\/.steam\/sdk32\/steamclient.so\r\n\r\n# Set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so\r\n\r\n# Arma 3 setup\r\ncd \/mnt\/server\/\r\n\r\nmkdir -p \"\/mnt\/server\/.local\/share\/Arma 3\" \"\/mnt\/server\/.local\/share\/Arma 3 - Other Profiles\"\r\n\r\n[[ -f basic.cfg ]] || curl -sSLO ${BASIC_URL}\r\n[[ -f server.cfg ]] || curl -sSLO ${BASIC_URL%\/*}\/server.cfg\r\nchmod 755 basic.cfg server.cfg", + "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl Arma 3 Egg - egg-arma3.json\r\n## Author: David Wolfe (Red-Thirten)\r\n## Date: 2022\/05\/22\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n# Check for valid Steam credentials to download Arma 3 with (requires valid Steam account)\r\nif [[ \"${STEAM_USER}\" == \"\" ]] || [[ \"${STEAM_USER}\" == \"anonymous\" ]] || [[ \"${STEAM_PASS}\" == \"\" ]]; then\r\n echo -e \"INSTALLATION ERROR: A valid REAL Steam account is required to download the Arma 3 Dedicated Server.\"\r\n echo -e \"\\t(\\\"anonymous\\\" account cannot be used. Game ownership is not required.)\"\r\n exit 1\r\nfi\r\n\r\n# Download and install SteamCMD\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd \/mnt\/server\/steamapps\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server \"+login \\\"${STEAM_USER}\\\" \\\"${STEAM_PASS}\\\"\" +app_update ${STEAMCMD_APPID} ${STEAMCMD_EXTRA_FLAGS} validate +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so \/mnt\/server\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so \/mnt\/server\/.steam\/sdk64\/steamclient.so\r\n\r\n# Arma 3 setup\r\ncd \/mnt\/server\/\r\n[[ -f basic.cfg ]] || curl -sSLO ${BASIC_URL}\r\n[[ -f server.cfg ]] || curl -sSLO ${BASIC_URL%\/*}\/server.cfg\r\nchmod 644 basic.cfg server.cfg", "container": "ghcr.io\/parkervcp\/installers:debian", - "entrypoint": "bash" + "entrypoint": "\/bin\/bash" } }, "variables": [ @@ -227,24 +226,6 @@ "user_viewable": false, "user_editable": false, "rules": "required|url" - }, - { - "name": "[Depreciated] Server Configuration File", - "description": "This is a depreciated variable that is only included for servers running on an older Startup Command.", - "env_variable": "CONFIG", - "default_value": "server.cfg", - "user_viewable": false, - "user_editable": false, - "rules": "string|nullable" - }, - { - "name": "[Depreciated] Basic Configuration File", - "description": "This is a depreciated variable that is only included for servers running on an older Startup Command.", - "env_variable": "BASIC", - "default_value": "basic.cfg", - "user_viewable": false, - "user_editable": false, - "rules": "required|string" } ] -} +} \ No newline at end of file From c109097ee4af0094ff66402d45f55627a01c9a4e Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Sun, 22 May 2022 20:36:57 -0700 Subject: [PATCH 26/43] Cleaned up README - Added IAmSilK as a code contributor - Condensed System Requirements/Recommendations to a nice table --- .../steamcmd_servers/arma/arma3/README.md | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/game_eggs/steamcmd_servers/arma/arma3/README.md b/game_eggs/steamcmd_servers/arma/arma3/README.md index c06131db1..b55706503 100644 --- a/game_eggs/steamcmd_servers/arma/arma3/README.md +++ b/game_eggs/steamcmd_servers/arma/arma3/README.md @@ -25,6 +25,14 @@ ___ 💻 💡 + + +
IAmSilK +
+
+ 💻 + 💡 +
Daave @@ -76,31 +84,25 @@ ___ Default server ports are listed below, but the Main port can be any port. There are three more ports after the Main port are relative to the Main port (For example: The BattlEye port is always 4 ports higher than the main port). **All four ports are required for normal server behavior.** It is [recommended](https://community.bistudio.com/wiki/Arma_3:_Dedicated_Server#Port_Forwarding) that each server be 100 ports separate from each other. -| Port | Default | +| Port | Default (UDP) | |---------|---------| | **Arma 3 Game & VON (Main)** | 2302 | | Steam Query (+1) | 2303 | | Steam Port (+2) | 2304 | | BattleEye (+4) | 2306 | -#### Mods/Plugins may require ports to be added to the server - ___ -### CPU Usage Information - -ARMA 3 is mainly CPU intensive. Contrary to popular belief, the server binary *can* run on multiple cores/threads. However, it's ability to manage asynchronous tasks and hyperthread is *very* limited, meaning additional cores/threads reach diminishing returns very quickly. In addition, it's ability to utilize all of the CPU allotted to it for AI processing seems to be limited as well. Therefore, a Headless Client ***and*** a properly written mission file are highly recommended if large amounts of AI units will be used. - -___ - -### Minimum RAM Requirement - -This server requires about 2048 MB of RAM to run properly. If used, every Headless Client uses an additional 2048 MB of RAM as well. -___ +### Installation/System Requirements -### Minimum Disk Requirement +| | Bare Minimum | Recommended | +|---------|---------|---------| +| Processor | Recent x86/64 (AMD/Intel) processor. No ARM support. | ARMA 3 is mainly CPU intensive. Contrary to popular belief, the server binary *can* run on multiple cores/threads. However, it's ability to manage asynchronous tasks and hyperthread is *very* limited, meaning additional cores/threads reach diminishing returns very quickly. In addition, it's ability to utilize all of the CPU allotted to it for AI processing seems to be limited as well. Therefore, a Headless Client ***and*** a properly written mission file are highly recommended if large amounts of AI units will be used. | +| RAM | 2048 MiB | 3072 MiB (If used, every Headless Client uses an additional 2048 MB of RAM as well) | +| Storage | 10 GB | 50+ GB (depends on how many mods are installed) | +| Network | 0.512 Mbit/s/player | 1-5 Mbit/s/player | +| Host OS | Most stable Linux OS branches should work | Using the latest kernel version for your installed OS can prevent some edge-case installation/boot issues. | -This server requires just under 10 GB of disk space to safely run properly with no mods. However, mods can easily increase disk usage to 50 GB or more, depending on how many are downloaded. ___ ### Recommended Egg Modifications From 54054579ef47991b9778005dbe23340fe1bb7da5 Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Mon, 23 May 2022 19:40:24 -0700 Subject: [PATCH 27/43] Initial Upload --- README.md | 1 + game_eggs/README.md | 1 + game_eggs/steamcmd_servers/README.md | 4 + .../dayz-experimental/README.md | 83 ++++++ .../egg-dayz-experimental.json | 276 ++++++++++++++++++ 5 files changed, 365 insertions(+) create mode 100644 game_eggs/steamcmd_servers/dayz-experimental/README.md create mode 100644 game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json diff --git a/README.md b/README.md index 14ab3907d..912231053 100644 --- a/README.md +++ b/README.md @@ -200,6 +200,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Conan Exiles](game_eggs/steamcmd_servers/conan_exiles) * [Craftopia](game_eggs/steamcmd_servers/craftopia) * [Cryofall](game_eggs/steamcmd_servers/cryofall) +* [DayZ (Experimental)](game_eggs/steamcmd_servers/dayz-experimental) * [Don't Starve Together](game_eggs/steamcmd_servers/dont_starve) * [ECO](game_eggs/steamcmd_servers/eco) * [Fistful of Frags](game_eggs/steamcmd_servers/fof) diff --git a/game_eggs/README.md b/game_eggs/README.md index 5458c143c..305fbe512 100644 --- a/game_eggs/README.md +++ b/game_eggs/README.md @@ -115,6 +115,7 @@ * [Citadel: Forged with Fire](steamcmd_servers/citadel) * [Conan Exiles](steamcmd_servers/conan_exiles) * [CryoFall](steamcmd_servers/cryofall) +* [DayZ (Experimental)](steamcmd_servers/dayz-experimental) * [Don't Starve Together](steamcmd_servers/dont_starve) * [ECO](steamcmd_servers/eco) * [Fistful of Frags](steamcmd_servers/fof) diff --git a/game_eggs/steamcmd_servers/README.md b/game_eggs/steamcmd_servers/README.md index 448c6b728..471644511 100644 --- a/game_eggs/steamcmd_servers/README.md +++ b/game_eggs/steamcmd_servers/README.md @@ -41,6 +41,10 @@ This is a collection of servers that use SteamCMD to install. [Cryofall](cryofall) +## DayZ (Experimental) + +[DayZ (Experimental)](dayz-experimental) + ## Don't Starve Together [Don't Starve Together](dont_starve) diff --git a/game_eggs/steamcmd_servers/dayz-experimental/README.md b/game_eggs/steamcmd_servers/dayz-experimental/README.md new file mode 100644 index 000000000..9e6f0f78f --- /dev/null +++ b/game_eggs/steamcmd_servers/dayz-experimental/README.md @@ -0,0 +1,83 @@ +# DayZ (Experimental) + +**Author's Notice:** This egg ***only*** works with the experimental branch of DayZ (Standalone), and it will ***only*** accept players who are running the experimental client! At time of writing (May 2022), there is ***no*** Stable branch native Linux server binary, and compatibility with Wine is poor. + +___ + +## Authors / Contributors + + + + + + + +
+ +
Red-Thirten +
+
+ 💻 + 🔨 +
+ + + +___ + +### Game Description + +From Bohemia Interactive's [Website](https://dayz.com/): +> How long can you survive a post-apocalyptic world? A land overrun with an infected "zombie" population, where you compete with other survivors for limited resources. Will you team up with strangers and stay strong together? Or play as a lone wolf to avoid betrayal? This is DayZ – this is your story. +___ + +### Egg Capabilities + +- Able to download server updates on startup +- Able to download, update, and load Steam Workshop mods on startup (\*see [Installation/System Requirements](#installationsystem-requirements)) + - Also accepts server-side only mods. + - Checks for mod updates against their Steam Workshop page's last update for quick and efficient update checks. + - Automatically moves mod `.bikey`'s to the `/keys/` directory. +- Multiple basic settings found within the `serverDZ.cfg` file can be easily set from the server's Startup tab + - Server name, passwords, disable third person, persistant time, and more... +- Max Players is configurable and able to be host enforced (\*see [Recommended Egg Modifications](#recommended-egg-modifications)) +- Additional [DayZ startup parameters](https://community.bistudio.com/wiki/DayZ:Server_Configuration#Launch_Parameters) can be added to fine-tune performance +- [WHMCS](https://www.whmcs.com/) compatible (\*see [Recommended Egg Modifications](#recommended-egg-modifications)) + +___ + +### Server Ports + +Default server ports are listed below, but the Main port can be any port. + +| Port | Default (UDP) | +|---------|---------| +| **DayZ Game (Main)** | 2302 | +| Steam Query (Optional?) | 27016 | + +___ + +### Installation/System Requirements + +| | Bare Minimum | Recommended | +|---------|---------|---------| +| Processor | Recent x86/64 (AMD/Intel) processor. No 32-bit or ARM support. | ---- | +| RAM | 4096 MiB | 8192 MiB | +| Storage | 3 GB | 7+ GB (depends on how many mods are installed) | +| Network | 0.512 Mbit/s/player | 1-5 Mbit/s/player | +| Host OS | Most stable Linux OS branches should work | Using the latest kernel version for your installed OS can prevent some edge-case installation/boot issues. | +| Game Ownership | Not required to start. | Required for automatic Steam Workshop mod downloading to work. However, this is optional functionality, and mods can be manually uploaded to the server if desired. Hosts may feel free to change the "Disable Mod Downloads/Updates" variable to `1` if they would not like to offer it's functionality to clients. | + +___ + +### Recommended Egg Modifications + +The following are highly recommended variable modifications you can make to the egg after importing it to your panel. While viewing this egg, simply go to the "Variables" tab of the egg editor to make these changes. + +#### Default Steam Username & Password + +- To make deploying servers easy (**or if you are using WHMCS**), it is recommended to edit the default values of "Steam Username" and "Steam Password" to your Steam account dedicated for hosting. This will make all newly installed servers use these credentials. **DO NOT** make these fields visible to the end user so that they can use their own Steam accounts; the panel will save their Steam credentials in **plain text**, which is a BIG NO NO for security and privacy. + +#### Restrict Max Players + +- If you would like to restrict the maximum number of players that can join your client's server, you can change the permissions of the "Max Players" variable so that clients can only view this value (and not edit it). It's default value can also be changed, or the value can be changed on a server-by-server basis as desired. diff --git a/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json b/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json new file mode 100644 index 000000000..4b9fcf807 --- /dev/null +++ b/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json @@ -0,0 +1,276 @@ +{ + "_comment": "Pterodactyl DayZ (Experimental) Egg ~ David Wolfe (Red-Thirten) ~ 2022-05-22", + "meta": { + "version": "PTDL_v1", + "update_url": null + }, + "name": "DayZ (Experimental)", + "author": "rehlmgaming@gmail.com", + "description": "How long can you survive a post-apocalyptic world? A land overrun with an infected \"zombie\" population, where you compete with other survivors for limited resources. Will you team up with strangers and stay strong together? Or play as a lone wolf to avoid betrayal? This is DayZ \u2013 this is your story.", + "features": [ + "steam_disk_space" + ], + "images": [ + "ghcr.io\/parkervcp\/games:dayz" + ], + "file_denylist": [], + "startup": ".\/{{SERVER_BINARY}} -ip=0.0.0.0 -port={{SERVER_PORT}} -profiles=.\/serverprofile -BEpath=.\/ -config=serverDZ.cfg -mod=\\\"{{CLIENT_MODS}}\\\" -serverMod=\\\"{{SERVERMODS}}\\\" \\\"{{STARTUP_PARAMS}}\\\"", + "config": { + "files": "{\r\n \"serverDZ.cfg\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"hostname =\": \"hostname = \\\"{{env.SERVER_HOSTNAME}}\\\";\",\r\n \"password =\": \"password = \\\"{{env.SERVER_PASSWORD}}\\\";\",\r\n \"passwordAdmin =\": \"passwordAdmin = \\\"{{env.ADMIN_PASSWORD}}\\\";\",\r\n \"maxPlayers\": \"maxPlayers = {{env.MAX_PLAYERS}};\",\r\n \"verifySignatures\": \"verifySignatures = {{env.VERIFY_SIGNATURES}};\",\r\n \"forceSameBuild\": \"forceSameBuild = {{env.ENFORCE_BUILD}};\",\r\n \"disableVoN\": \"disableVoN = {{env.DISABLE_VON}};\",\r\n \"vonCodecQuality\": \"vonCodecQuality = {{env.VON_QUALITY}};\",\r\n \"disable3rdPerson\": \"disable3rdPerson = {{env.DISABLE_THIRD}};\",\r\n \"disableCrosshair\": \"disableCrosshair = {{env.DISABLE_CROSSHAIR}};\",\r\n \"disablePersonalLight\": \"disablePersonalLight = {{env.DISABLE_PERSONAL_LIGHT}};\",\r\n \"lightingConfig\": \"lightingConfig = {{env.LIGHTING_CONFIG}};\",\r\n \"serverTimeAcceleration\": \"serverTimeAcceleration = {{env.TIME_MULT}};\",\r\n \"serverNightTimeAcceleration\": \"serverNightTimeAcceleration = {{env.NIGHT_MULT}};\",\r\n \"serverTimePersistent\": \"serverTimePersistent = {{env.PERSISTENT_TIME}};\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \"Mission read.\"\r\n}", + "logs": "{}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl DayZ (Experimental) Egg - egg-dayz-experimental.json\r\n## Author: David Wolfe (Red-Thirten)\r\n## Date: 2022\/05\/22\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n# Download and install SteamCMD\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd \/mnt\/server\/steamapps\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server \"+login \\\"${STEAM_USER}\\\" \\\"${STEAM_PASS}\\\"\" +app_update ${STEAMCMD_APPID} ${STEAMCMD_EXTRA_FLAGS} validate +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so \/mnt\/server\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so \/mnt\/server\/.steam\/sdk64\/steamclient.so", + "container": "ghcr.io\/parkervcp\/installers:debian", + "entrypoint": "\/bin\/bash" + } + }, + "variables": [ + { + "name": "Steam Username", + "description": "Used for installation and updates. \"anonymous\" username can be used for server download, but a real account that owns DayZ is required for mod downloads. For security reasons it is recommended that you create a new Steam account just for your dedicated servers. *This info is not visible to the server owner.*", + "env_variable": "STEAM_USER", + "default_value": "anonymous", + "user_viewable": false, + "user_editable": false, + "rules": "required|string" + }, + { + "name": "Steam Password", + "description": "Used for installation and updates. Steam Guard MUST be completely TURNED OFF for mod downloads to work. *This info is not visible to the server owner, BUT IS stored in PLAIN TEXT. It is NOT advised to use a personal account; best to use a dummy account.*", + "env_variable": "STEAM_PASS", + "default_value": "", + "user_viewable": false, + "user_editable": false, + "rules": "nullable|string" + }, + { + "name": "Disable Mod Downloads\/Updates", + "description": "If the Steam account does not own the base DayZ game, Steam Workshop mod downloads\/updates will not work. If so, this setting allows disabling of this feature to avoid errors. (1 ON | 0 OFF)", + "env_variable": "DISABLE_MOD_UPDATES", + "default_value": "0", + "user_viewable": false, + "user_editable": false, + "rules": "boolean" + }, + { + "name": "Number of SteamCMD Retry Attempts", + "description": "How many times SteamCMD should retry downloading a server or mod after a recoverable error. (ie. A particularly large mod like CUP or RHS download times out)", + "env_variable": "STEAMCMD_ATTEMPTS", + "default_value": "3", + "user_viewable": false, + "user_editable": false, + "rules": "required|integer" + }, + { + "name": "Server Name", + "description": "Name of the server that will appear in the server list.", + "env_variable": "SERVER_HOSTNAME", + "default_value": "DayZ Server", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "name": "Max Players", + "description": "Maximum number of players allowed to join the server.", + "env_variable": "MAX_PLAYERS", + "default_value": "60", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|gt:0" + }, + { + "name": "Server Password", + "description": "Password required to join the server. Leave blank to have no password.", + "env_variable": "SERVER_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "name": "Admin Password", + "description": "Password to log in as an admin on the server.", + "env_variable": "ADMIN_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "name": "Automatic Updates", + "description": "Quickly checks for any server or mod updates on startup, and updates if necessary. (1 ON | 0 OFF)", + "env_variable": "UPDATE_SERVER", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "Client Mods", + "description": "A semicolon-separated list of mod folders to load. Any mods in this list that are in \"@workshopID\" form will also be included in Automatic Updates (if enabled). NO capital letters, spaces, or folders starting with a number! (ex. myMod;@123456789;@987654321;etc;)", + "env_variable": "MODIFICATIONS", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "name": "Enforce Game Version", + "description": "When ON, the server will allow the connection only to clients with same the .exe revision as the server. (1 ON | 0 OFF)", + "env_variable": "ENFORCE_BUILD", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "Verify Signatures", + "description": "Ensures all clients have exactly the same version of mods or addons that the server is running. Otherwise, they will be kicked upon connection. (2 ON | 0 OFF)", + "env_variable": "VERIFY_SIGNATURES", + "default_value": "2", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:0,2" + }, + { + "name": "Disable VoN", + "description": "When ON, will disable Voice over Network (voice chat) in the server. (1 ON | 0 OFF)", + "env_variable": "DISABLE_VON", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "VoN Quality", + "description": "Voice over Network codec quality; the higher the better. (Values 0-30)", + "env_variable": "VON_QUALITY", + "default_value": "20", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|between:0,30" + }, + { + "name": "Disable Third Person", + "description": "When ON, will disable third person view while on the server. (1 ON | 0 OFF)", + "env_variable": "DISABLE_THIRD", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "Disable Crosshair", + "description": "When ON, will disable the crosshair from being visible while on the server. (1 ON | 0 OFF)", + "env_variable": "DISABLE_CROSSHAIR", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "Disable Personal Light", + "description": "When ON, will disable a personal light positioned above all clients during the night time while on the server. (1 ON | 0 OFF)", + "env_variable": "DISABLE_PERSONAL_LIGHT", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "Darker Nights", + "description": "When ON, will make nights darker (more accurate nights, but hard to see without a light). (1 ON | 0 OFF)", + "env_variable": "LIGHTING_CONFIG", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "Persistent Time", + "description": "The actual server time is saved to storage, so when ON, the next server start will use the saved time value. (1 ON | 0 OFF)", + "env_variable": "PERSISTENT_TIME", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "Time Multiplier", + "description": "This is a time multiplier for in-game time (ie. 12 would move a full 24-hour day in-game 12 times faster, making it last 2 hours \"in real life\"). (Values: 0-24)", + "env_variable": "TIME_MULT", + "default_value": "12", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|between:0,24" + }, + { + "name": "Night Multiplier", + "description": "This is an additional multiplier to either speed up or slow down nights in-game. It is multiplied with the \"Time Multiplier\" variable to get it's final multiplier for night time speed. (Values: 0.1-64.0)", + "env_variable": "NIGHT_MULT", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric|between:0.1,64" + }, + { + "name": "[Repair] Make Mod Files Lowercase", + "description": "Every mod that is set to be loaded will have its folder and files changed to lowercase (to prevent errors). It is recommended to enable this for one server boot after copying a mod from a Windows machine to the server, or if mods seem to not be loading. (1 ON | 0 OFF)", + "env_variable": "MODS_LOWERCASE", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "[Repair] Validate Server Files", + "description": "Validates all server files when Automatic Updates is ON. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed. (1 ON | 0 OFF)", + "env_variable": "VALIDATE_SERVER", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "[Advanced] Server-Side Only Mods", + "description": "Mod folders to be used with the \"-serverMods\" startup option. They only run server-side and are not required by clients if \"Verify Signatures\" is ON. Any mods in this list that are in \"@workshopID\" form will also be included in Automatic Updates (if enabled). NO capital letters, spaces, or folders starting with a number! Each folder must be followed with a semicolon (ex. @123456789;@987654321;etc;)", + "env_variable": "SERVERMODS", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "name": "[Advanced] Extra Startup Parameters", + "description": "See https:\/\/community.bistudio.com\/wiki\/DayZ:Server_Configuration#Launch_Parameters for more info on valid flags for this field.", + "env_variable": "STARTUP_PARAMS", + "default_value": "-doLogs", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "name": "[Advanced] Server Binary", + "description": "Cannot currently be changed. Left in case other branches with different executable names are introduced at a later date.", + "env_variable": "SERVER_BINARY", + "default_value": "DayZServer", + "user_viewable": true, + "user_editable": false, + "rules": "required|string|in:DayZServer" + }, + { + "name": "[Advanced] DayZ SA Dedicated Server App ID", + "description": "Used for installation and updates. Rarely needs to be changed. Only the Experimental app ID currently works.", + "env_variable": "STEAMCMD_APPID", + "default_value": "1042420", + "user_viewable": true, + "user_editable": false, + "rules": "required|integer" + } + ] +} \ No newline at end of file From c748b5a7e8d902a0a92e45a7b44b0b7a5cb2307e Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Tue, 24 May 2022 10:12:10 -0700 Subject: [PATCH 28/43] Fix "Max Players" Startup parameter range Increased to maximum of 256 players, which aligns with BI documentation. --- .../steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json b/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json index de4ff7258..97519c047 100644 --- a/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json +++ b/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json @@ -63,7 +63,7 @@ "default_value": "32", "user_viewable": true, "user_editable": true, - "rules": "required|integer|between:1,64" + "rules": "required|integer|between:1,256" }, { "name": "Server Password", From ebc02d607f8ac6a1988e0ddc9b56603a73247716 Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Tue, 24 May 2022 10:17:42 -0700 Subject: [PATCH 29/43] Set default "Max FPS" value Set default "Max FPS" Startup Parameter value to 120, as recommended by BI documentation. --- .../steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json b/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json index 97519c047..569471da2 100644 --- a/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json +++ b/game_eggs/steamcmd_servers/arma/arma_reforger/egg-arma-reforger.json @@ -132,7 +132,7 @@ "name": "[Advanced] Max FPS", "description": "Sets a maximum FPS limit for the server, saving performance in some cases. Leave empty for no limit.", "env_variable": "MAX_FPS", - "default_value": "", + "default_value": "120", "user_viewable": true, "user_editable": true, "rules": "nullable|integer|gt:0" From f10379b2282b6050488aa03061988a06bee91894 Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Tue, 24 May 2022 10:22:19 -0700 Subject: [PATCH 30/43] Update default "[Advanced] Extra Startup Parameters" value Added `-limitFPS=120` flag to the default value to prevent runaway FPS and crashing for vanilla servers. --- .../dayz-experimental/egg-dayz-experimental.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json b/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json index 4b9fcf807..12e102cab 100644 --- a/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json +++ b/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json @@ -249,7 +249,7 @@ "name": "[Advanced] Extra Startup Parameters", "description": "See https:\/\/community.bistudio.com\/wiki\/DayZ:Server_Configuration#Launch_Parameters for more info on valid flags for this field.", "env_variable": "STARTUP_PARAMS", - "default_value": "-doLogs", + "default_value": "-doLogs -limitFPS=120", "user_viewable": true, "user_editable": true, "rules": "nullable|string" From db4fc77381a65a7064abd52fa5dd8f2392df7d8c Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Thu, 26 May 2022 16:19:03 -0700 Subject: [PATCH 31/43] Add Mod List functionality & descriptions clean up --- .../dayz-experimental/README.md | 3 +- .../egg-dayz-experimental.json | 53 +++++++++++-------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/game_eggs/steamcmd_servers/dayz-experimental/README.md b/game_eggs/steamcmd_servers/dayz-experimental/README.md index 9e6f0f78f..57b69c359 100644 --- a/game_eggs/steamcmd_servers/dayz-experimental/README.md +++ b/game_eggs/steamcmd_servers/dayz-experimental/README.md @@ -1,6 +1,6 @@ # DayZ (Experimental) -**Author's Notice:** This egg ***only*** works with the experimental branch of DayZ (Standalone), and it will ***only*** accept players who are running the experimental client! At time of writing (May 2022), there is ***no*** Stable branch native Linux server binary, and compatibility with Wine is poor. +**Author's Notice:** This egg ***only*** works with the experimental branch of DayZ (Standalone), and it will ***only*** accept players who are running the experimental client! At time of writing (May 2022), there is ***no*** native Linux server binary for the Stable branch, and compatibility with Wine is poor for the Windows binary. ___ @@ -38,6 +38,7 @@ ___ - Also accepts server-side only mods. - Checks for mod updates against their Steam Workshop page's last update for quick and efficient update checks. - Automatically moves mod `.bikey`'s to the `/keys/` directory. + - Note: These features only work with mods in the `@workshopID#` format. Manually uploaded mods are not automatically updated. - Multiple basic settings found within the `serverDZ.cfg` file can be easily set from the server's Startup tab - Server name, passwords, disable third person, persistant time, and more... - Max Players is configurable and able to be host enforced (\*see [Recommended Egg Modifications](#recommended-egg-modifications)) diff --git a/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json b/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json index 12e102cab..4dda878cb 100644 --- a/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json +++ b/game_eggs/steamcmd_servers/dayz-experimental/egg-dayz-experimental.json @@ -1,5 +1,5 @@ { - "_comment": "Pterodactyl DayZ (Experimental) Egg ~ David Wolfe (Red-Thirten) ~ 2022-05-22", + "_comment": "Pterodactyl DayZ (Experimental) Egg ~ David Wolfe (Red-Thirten) ~ 2022-05-26", "meta": { "version": "PTDL_v1", "update_url": null @@ -23,7 +23,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl DayZ (Experimental) Egg - egg-dayz-experimental.json\r\n## Author: David Wolfe (Red-Thirten)\r\n## Date: 2022\/05\/22\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n# Download and install SteamCMD\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd \/mnt\/server\/steamapps\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server \"+login \\\"${STEAM_USER}\\\" \\\"${STEAM_PASS}\\\"\" +app_update ${STEAMCMD_APPID} ${STEAMCMD_EXTRA_FLAGS} validate +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so \/mnt\/server\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so \/mnt\/server\/.steam\/sdk64\/steamclient.so", + "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl DayZ (Experimental) Egg - egg-dayz-experimental.json\r\n## Author: David Wolfe (Red-Thirten)\r\n## Date: 2022\/05\/26\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n# Download and install SteamCMD\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd \/mnt\/server\/steamapps\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server \"+login \\\"${STEAM_USER}\\\" \\\"${STEAM_PASS}\\\"\" +app_update ${STEAMCMD_APPID} ${STEAMCMD_EXTRA_FLAGS} validate +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so \/mnt\/server\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so \/mnt\/server\/.steam\/sdk64\/steamclient.so", "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "\/bin\/bash" } @@ -58,7 +58,7 @@ }, { "name": "Number of SteamCMD Retry Attempts", - "description": "How many times SteamCMD should retry downloading a server or mod after a recoverable error. (ie. A particularly large mod like CUP or RHS download times out)", + "description": "How many times SteamCMD should retry downloading a server or mod after a recoverable error. (ie. A particularly large mod download times out)", "env_variable": "STEAMCMD_ATTEMPTS", "default_value": "3", "user_viewable": false, @@ -78,7 +78,7 @@ "name": "Max Players", "description": "Maximum number of players allowed to join the server.", "env_variable": "MAX_PLAYERS", - "default_value": "60", + "default_value": "64", "user_viewable": true, "user_editable": true, "rules": "required|integer|gt:0" @@ -103,7 +103,7 @@ }, { "name": "Automatic Updates", - "description": "Quickly checks for any server or mod updates on startup, and updates if necessary. (1 ON | 0 OFF)", + "description": "Quickly checks for any server or mod updates on startup, and updates if necessary.", "env_variable": "UPDATE_SERVER", "default_value": "1", "user_viewable": true, @@ -111,22 +111,22 @@ "rules": "boolean" }, { - "name": "Client Mods", - "description": "A semicolon-separated list of mod folders to load. Any mods in this list that are in \"@workshopID\" form will also be included in Automatic Updates (if enabled). NO capital letters, spaces, or folders starting with a number! (ex. myMod;@123456789;@987654321;etc;)", - "env_variable": "MODIFICATIONS", - "default_value": "", + "name": "Modlist File (Exported from DayZ Launcher)", + "description": "Filename for an exported modlist. This file will be parsed for mod installation and loading. Upload your HTML file to the root directory (eg. \/home\/container\/modlist.html). Leave blank to disable loading mods from a modlist.", + "env_variable": "MOD_FILE", + "default_value": "modlist.html", "user_viewable": true, "user_editable": true, "rules": "nullable|string" }, { - "name": "Enforce Game Version", - "description": "When ON, the server will allow the connection only to clients with same the .exe revision as the server. (1 ON | 0 OFF)", - "env_variable": "ENFORCE_BUILD", - "default_value": "1", + "name": "Additional Mods", + "description": "A semicolon-separated list of mod folders to load from the root directory. Useful for loading manually uploaded mods. Any mods in this list that are in \"@workshopID\" form will also be included in Automatic Updates (if enabled). NO capital letters, spaces, or folders starting with a number! (ex. myMod;@123456789;@987654321;etc;)", + "env_variable": "MODIFICATIONS", + "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "boolean" + "rules": "nullable|string" }, { "name": "Verify Signatures", @@ -137,9 +137,18 @@ "user_editable": true, "rules": "required|string|in:0,2" }, + { + "name": "Enforce Game Version", + "description": "When ON, the server will allow the connection only to clients with same the version as the server.", + "env_variable": "ENFORCE_BUILD", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, { "name": "Disable VoN", - "description": "When ON, will disable Voice over Network (voice chat) in the server. (1 ON | 0 OFF)", + "description": "When ON, will disable Voice over Network (voice chat) in the server.", "env_variable": "DISABLE_VON", "default_value": "0", "user_viewable": true, @@ -157,7 +166,7 @@ }, { "name": "Disable Third Person", - "description": "When ON, will disable third person view while on the server. (1 ON | 0 OFF)", + "description": "When ON, will disable third person view while on the server.", "env_variable": "DISABLE_THIRD", "default_value": "0", "user_viewable": true, @@ -166,7 +175,7 @@ }, { "name": "Disable Crosshair", - "description": "When ON, will disable the crosshair from being visible while on the server. (1 ON | 0 OFF)", + "description": "When ON, will disable the crosshair from being visible while on the server.", "env_variable": "DISABLE_CROSSHAIR", "default_value": "0", "user_viewable": true, @@ -175,7 +184,7 @@ }, { "name": "Disable Personal Light", - "description": "When ON, will disable a personal light positioned above all clients during the night time while on the server. (1 ON | 0 OFF)", + "description": "When ON, will disable a personal light positioned above all clients during the night time while on the server.", "env_variable": "DISABLE_PERSONAL_LIGHT", "default_value": "1", "user_viewable": true, @@ -184,7 +193,7 @@ }, { "name": "Darker Nights", - "description": "When ON, will make nights darker (more accurate nights, but hard to see without a light). (1 ON | 0 OFF)", + "description": "When ON, will make nights darker (more accurate nights, but hard to see without a light).", "env_variable": "LIGHTING_CONFIG", "default_value": "0", "user_viewable": true, @@ -193,7 +202,7 @@ }, { "name": "Persistent Time", - "description": "The actual server time is saved to storage, so when ON, the next server start will use the saved time value. (1 ON | 0 OFF)", + "description": "The actual server time is saved to storage, so when ON, the next server start will use the saved time value.", "env_variable": "PERSISTENT_TIME", "default_value": "0", "user_viewable": true, @@ -220,7 +229,7 @@ }, { "name": "[Repair] Make Mod Files Lowercase", - "description": "Every mod that is set to be loaded will have its folder and files changed to lowercase (to prevent errors). It is recommended to enable this for one server boot after copying a mod from a Windows machine to the server, or if mods seem to not be loading. (1 ON | 0 OFF)", + "description": "Every mod that is set to be loaded will have its folder and files changed to lowercase (to prevent errors). It is recommended to enable this for one server boot after copying a mod from a Windows machine to the server, or if mods seem to not be loading.", "env_variable": "MODS_LOWERCASE", "default_value": "0", "user_viewable": true, @@ -229,7 +238,7 @@ }, { "name": "[Repair] Validate Server Files", - "description": "Validates all server files when Automatic Updates is ON. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed. (1 ON | 0 OFF)", + "description": "Validates all server files when Automatic Updates is ON. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed.", "env_variable": "VALIDATE_SERVER", "default_value": "0", "user_viewable": true, From 3452e05f8d909ad808cde2ec2dd6abacd1a6484f Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Fri, 27 May 2022 23:53:53 -0700 Subject: [PATCH 32/43] Initial Upload --- README.md | 1 + game_eggs/README.md | 1 + game_eggs/steamcmd_servers/README.md | 4 + game_eggs/steamcmd_servers/v_rising/README.md | 102 ++++++++ .../v_rising/egg-v-rising.json | 231 ++++++++++++++++++ 5 files changed, 339 insertions(+) create mode 100644 game_eggs/steamcmd_servers/v_rising/README.md create mode 100644 game_eggs/steamcmd_servers/v_rising/egg-v-rising.json diff --git a/README.md b/README.md index 14ab3907d..3e15b853c 100644 --- a/README.md +++ b/README.md @@ -243,6 +243,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Valheim](game_eggs/steamcmd_servers/valheim) * [Valheim Vanilla](game_eggs/steamcmd_servers/valheim/valheim_vanilla) * [Valheim Plus Mod](game_eggs/steamcmd_servers/valheim/valheim_plus) +* [V Rising](game_eggs/steamcmd_servers/v_rising) [Teeworlds](game_eggs/teeworlds) diff --git a/game_eggs/README.md b/game_eggs/README.md index 5458c143c..a4c28f039 100644 --- a/game_eggs/README.md +++ b/game_eggs/README.md @@ -159,6 +159,7 @@ * [Valheim](steamcmd_servers/valheim) * [Valheim Plus Mod](steamcmd_servers/valheim/valheim_plus) * [Valheim Vanilla](steamcmd_servers/valheim/valheim_vanilla) +* [V Rising](steamcmd_servers/v_rising) [Teeworlds](teeworlds) diff --git a/game_eggs/steamcmd_servers/README.md b/game_eggs/steamcmd_servers/README.md index 448c6b728..12f49acd3 100644 --- a/game_eggs/steamcmd_servers/README.md +++ b/game_eggs/steamcmd_servers/README.md @@ -186,3 +186,7 @@ This is a collection of servers that use SteamCMD to install. * [Valheim Vanilla](valheim/valheim_vanilla) * [Valheim Plus Mod](valheim/valheim_plus) + +## V Rising + +[V Rising](v_rising) diff --git a/game_eggs/steamcmd_servers/v_rising/README.md b/game_eggs/steamcmd_servers/v_rising/README.md new file mode 100644 index 000000000..a489dc801 --- /dev/null +++ b/game_eggs/steamcmd_servers/v_rising/README.md @@ -0,0 +1,102 @@ +# V Rising + +***NOTE: Server version currently marked as Early Access by the V Rising developers. Your mileage may vary as updates are released.*** +___ + +### Authors / Contributors + + + + + + + + +
+ +
Red-Thirten +
+
+ 💻 + 🔨 +
+ +
Kapatheus +
+
+ 💻 + 💡 +
+ + + +___ + +### Game Description + +From Stunlock Studios's [Website](https://playvrising.com/): +> Awaken as a vampire. Hunt for blood in nearby settlements to regain your strength and evade the scorching sun to survive. Raise your castle and thrive in an ever-changing open world full of mystery. Gain allies online and conquer the land of the living. + +___ + +### Egg Capabilities + +- Currently runs the Windows build of the server via Wine. This egg will be updated when a proper, native Linux server binary is released. +- Configurable to automatically check for server updates on start via SteamCMD. Forcing validation is also configurable. +- All `ServerHostSettings.json` settings can be automatically configured via Startup variables. + - This includes: Server name, game settings preset, password, max players, auto save settings, and more... +- RCON ready (\*requires extra port – see [Server Ports](#server-ports)). See the RCON section under [Manual Configuration Topics](#manual-configuration-topics) for more info. + +___ + +### Server Ports + +- Default server ports are listed below, but all three ports can be changed freely. +- The only *required* port is the Game port, but the Query port is needed for the server to appear in the server list (Direct connect is still possible without the Query port). There have also been reports that servers only appear in the server list if they are popular, so consider this when troubleshooting. +- Clients connect via the Game port. +- The RCON port is optional and only required if the server owner enables/uses RCON. + +| Port | Default | Protocol | +|---------|---------| +| **Game (Primary Port in Pterodactyl)** | 9876 | UDP | +| Query | 9877 | UDP | +| RCON | 25575 | TCP | + +___ + +### Installation/System Requirements + +| | Bare Minimum | Recommended | +|---------|---------|---------| +| Processor | Recent x86/64 (AMD/Intel) processor. No 32 bit or ARM support. | Unsubstantiated reports say that RCON uses significantly more CPU when enabled, but I have not been able to replicate myself. | +| RAM | 3072 MiB | 4096-6144 MiB | +| Storage | 3.5 GB | 5-10 GB (or more, depending on save size or frequency) | +| Game Ownership | Not required at all. | ---- | + +___ + +### Manual Configuration Topics + +The following are various topics covering manual configuration procedures the egg does not handle automatically that may be useful to server owners: + +#### Save File and Custom Settings Location + +You can find the game settings and saves in the `~/save-data/` directory. + +#### Server Game Settings + +Standardized game settings can be applied via the "Game Mode" startup parameter. If you would like a more custom array of settings to adjust, you can copy the `ServerGameSettings.json` file located in `~/VRisingServer_Data/StreamingAssets/Settings/` to `~/save-data/Settings` and adjust as needed. Also, ensure "Game Mode" is set to empty/null. A list of settings, with a description of what each setting does and the min/max values where applicable, [can be found here](https://cdn.stunlock.com/blog/2022/05/25083113/Game-Server-Settings.pdf). + +#### Becoming an Administrator + +To become an administrator in the game you will first need to modify the `adminlist.txt` file under `~/save-data/Settings` with your SteamID (one SteamID per line). This can be done without restarting your server. To become an administrator in the game you need to enable the console in the options menu, bring it down with `~` and authenticate using the `adminauth` console command. Once an administrator you can use a number of administrative commands like `banuser`, `bancharacter`, `banned`, `unban` and `kick`. + +If you ban users through the in-game console the server will automatically modify the `banlist.txt` file, but you can also modify this manually (one SteamID per line). + +#### Transfer Local/Client Save to the Server + +[Follow these instructions by the developer very carefully](https://github.com/StunlockStudios/vrising-dedicated-server-instructions#transfer-localclient-save-to-a-dedicated-server). Note: The `-saveName ` command line parameter and `GameSettingsPreset` setting are handled automatically by the Egg's "Save Name" and "Game Mode" startup parameters, respectively. Also, if a custom `ServerGameSettings.json` file exists for any reason in the `~/save-data/Settings` directory, delete it. + +#### RCON + +RCON can allow general and restart announcements to be made to the server remotely (functions which are not currently supported by the console command line). You can enable RCON by properly configuring the relevant variables under the Startup tab of your Pterodactyl server. The RCON port must be allocated to the server. [Click here for list of valid commands and recommended RCON client](https://github.com/StunlockStudios/vrising-dedicated-server-instructions#rcon). diff --git a/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json b/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json new file mode 100644 index 000000000..77346dae9 --- /dev/null +++ b/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json @@ -0,0 +1,231 @@ +{ + "_comment": "Pterodactyl V Rising Egg ~ David Wolfe (Red-Thirten) and Kapatheus ~ 2022-05-26", + "meta": { + "version": "PTDL_v1", + "update_url": null + }, + "name": "V Rising", + "author": "rehlmgaming@gmail.com", + "description": "Awaken as a vampire. Hunt for blood in nearby settlements to regain your strength and evade the scorching sun to survive. Raise your castle and thrive in an ever-changing open world full of mystery. Gain allies online and conquer the land of the living.", + "features": [ + "steam_disk_space" + ], + "images": [ + "ghcr.io\/parkervcp\/yolks:wine_latest" + ], + "file_denylist": [], + "startup": "wine64 .\/VRisingServer.exe -persistentDataPath save-data -address 0.0.0.0", + "config": { + "files": "{\r\n\t\"save-data\/Settings\/ServerHostSettings.json\": {\r\n\t\t\"parser\": \"json\",\r\n\t\t\"find\": {\r\n\t\t\t\"Name\": \"{{server.build.env.SERVER_NAME}}\",\r\n\t\t\t\"Description\": \"{{server.build.env.DESCRIPTION}}\",\r\n\t\t\t\"Port\": \"{{server.build.default.port}}\",\r\n\t\t\t\"QueryPort\": \"{{server.build.env.QUERY_PORT}}\",\r\n\t\t\t\"MaxConnectedUsers\": \"{{server.build.env.MAX_PLAYERS}}\",\r\n\t\t\t\"MaxConnectedAdmins\": \"{{server.build.env.MAX_ADMINS}}\",\r\n\t\t\t\"ServerFps\": \"{{server.build.env.FPS}}\",\r\n\t\t\t\"SaveName\": \"{{server.build.env.SAVE_NAME}}\",\r\n\t\t\t\"Password\": \"{{server.build.env.SERVER_PASSWORD}}\",\r\n\t\t\t\"Secure\": \"{{server.build.env.SERVER_SECURE}}\",\r\n\t\t\t\"ListOnMasterServer\": \"{{server.build.env.SERVER_LIST}}\",\r\n\t\t\t\"AutoSaveCount\": \"{{server.build.env.SAVE_COUNT}}\",\r\n\t\t\t\"AutoSaveInterval\": \"{{server.build.env.SAVE_INTERVAL}}\",\r\n\t\t\t\"GameSettingsPreset\": \"{{server.build.env.GAME_SETTINGS_PRESET}}\",\r\n\t\t\t\"AdminOnlyDebugEvents\": \"{{server.build.env.ADMIN_ONLY_DEBUG_EVENTS}}\",\r\n\t\t\t\"DisableDebugEvents\": \"{{server.build.env.DEBUG_EVENTS}}\",\r\n\t\t\t\"Rcon.Enabled\": \"{{server.build.env.RCON}}\",\r\n\t\t\t\"Rcon.Password\": \"{{server.build.env.RCON_PASS}}\",\r\n\t\t\t\"Rcon.Port\": \"{{server.build.env.RCON_PORT}}\"\r\n\t\t}\r\n\t}\r\n}", + "startup": "{\r\n \"done\": \"Loaded ServerGameSettings\"\r\n}", + "logs": "{}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl V Rising Egg - egg-v-rising.json\r\n## Authors: David Wolfe (Red-Thirten), Kapatheus\r\n## Date: 2022\/05\/26\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n# Download and install SteamCMD\r\nexport HOME=\/mnt\/server\r\ncd \/tmp\r\nmkdir -p $HOME\/steamcmd $HOME\/steamapps\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C $HOME\/steamcmd\r\ncd $HOME\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir $HOME +login anonymous $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} validate +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p $HOME\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so $HOME\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so $HOME\/.steam\/sdk64\/steamclient.so\r\n\r\n## V Rising Setup\r\nmkdir -p $HOME\/save-data\/Settings && cd \"$_\"\r\ntouch adminlist.txt banlist.txt\r\ncat > ServerHostSettings.json << EOF\r\n{\r\n \"Name\": \"${SERVER_NAME}\",\r\n \"Description\": \"${DESCRIPTION}\",\r\n \"Port\": ${SERVER_PORT},\r\n \"QueryPort\": ${QUERY_PORT},\r\n \"MaxConnectedUsers\": ${MAX_PLAYERS},\r\n \"MaxConnectedAdmins\": ${MAX_ADMINS},\r\n \"ServerFps\": ${FPS},\r\n \"SaveName\": \"${SAVE_NAME}\",\r\n \"Password\": \"${SERVER_PASSWORD}\",\r\n \"Secure\": ${SERVER_SECURE},\r\n \"ListOnMasterServer\": ${SERVER_LIST},\r\n \"AutoSaveCount\": ${SAVE_COUNT},\r\n \"AutoSaveInterval\": ${SAVE_INTERVAL},\r\n \"GameSettingsPreset\": \"${GAME_SETTINGS_PRESET}\",\r\n \"AdminOnlyDebugEvents\": ${ADMIN_ONLY_DEBUG_EVENTS},\r\n \"DisableDebugEvents\": ${DEBUG_EVENTS},\r\n \"Rcon\": {\r\n \"Enabled\": ${RCON},\r\n \"Password\": \"${RCON_PASS}\",\r\n \"Port\": ${RCON_PORT}\r\n }\r\n}\r\nEOF", + "container": "ghcr.io\/pterodactyl\/installers:debian", + "entrypoint": "\/bin\/bash" + } + }, + "variables": [ + { + "name": "[REQUIRED] Server Query Port", + "description": "UDP port for Steam server list features.", + "env_variable": "QUERY_PORT", + "default_value": "9877", + "user_viewable": false, + "user_editable": false, + "rules": "required|integer|between:1024,65536" + }, + { + "name": "Automatic Updates", + "description": "Quickly checks for any server updates on startup, and updates if necessary.", + "env_variable": "AUTO_UPDATE", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "boolean" + }, + { + "name": "Game Mode", + "description": "What preset of game settings the server should run. Some settings may not apply after the save file is first created. Leave empty\/null if you are using a single-player uploaded save or a custom ServerGameSettings.json file.", + "env_variable": "GAME_SETTINGS_PRESET", + "default_value": "StandardPvP", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string|in:,DuoPvP,HardcorePvP,Level30PvE,Level30PvP,Level50PvE,Level50PvP,Level70PvE,Level70PvP,SoloPvP,StandardPvE_Easy,StandardPvE_Hard,StandardPvE,StandardPvP_Easy,StandardPvP_Hard,StandardPVP" + }, + { + "name": "Server Name", + "description": "Name of the server that will appear in the server list.", + "env_variable": "SERVER_NAME", + "default_value": "V Rising Dedicated Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "Server Description", + "description": "Short description of server purpose, rules, and the message of the day.", + "env_variable": "DESCRIPTION", + "default_value": "Welcome to the server!", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "name": "Max Connected Users", + "description": "Max number of concurrent players on the server.", + "env_variable": "MAX_PLAYERS", + "default_value": "40", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|min:1" + }, + { + "name": "Max Connected Admins", + "description": "Max number of admins to allow connection even when the server is full.", + "env_variable": "MAX_ADMINS", + "default_value": "4", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|min:0" + }, + { + "name": "Server Password", + "description": "Password required to join the server. Leave blank to have no password.", + "env_variable": "SERVER_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "name": "Save Name", + "description": "Name of save file \/ directory.", + "env_variable": "SAVE_NAME", + "default_value": "world1", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "Auto Save Count", + "description": "Number of autosaves to keep.", + "env_variable": "SAVE_COUNT", + "default_value": "50", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|min:0" + }, + { + "name": "Auto Save Interval", + "description": "Interval in seconds between each autosave.", + "env_variable": "SAVE_INTERVAL", + "default_value": "600", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|min:1" + }, + { + "name": "List On Master Server", + "description": "Set to true to list on the server list, else set to false.", + "env_variable": "SERVER_LIST", + "default_value": "true", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false" + }, + { + "name": "[Repair] Validate Server Files", + "description": "Leave empty (no value) for OFF or type \"true\" or \"1\" for ON. Validates all server files when Automatic Updates is enabled. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed.", + "env_variable": "VALIDATE", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "string|nullable" + }, + { + "name": "[Advanced] Server FPS", + "description": "How often the server refreshes. (Default: 30)", + "env_variable": "FPS", + "default_value": "30", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|min:1" + }, + { + "name": "[Advanced] Enable RCON", + "description": "See the following link for info on how to connect and use RCON: https:\/\/github.com\/StunlockStudios\/vrising-dedicated-server-instructions#rcon", + "env_variable": "RCON", + "default_value": "false", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false" + }, + { + "name": "[Advanced] RCON Password", + "description": "Password required to connect to RCON if it is enabled.", + "env_variable": "RCON_PASS", + "default_value": "somepassword", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "[Advanced] RCON Port", + "description": "Port used to connect to RCON. Must be allocated to the server for RCON to work.", + "env_variable": "RCON_PORT", + "default_value": "25575", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|between:1024,65536" + }, + { + "name": "[Advanced] Secure Server", + "description": "(true or false)", + "env_variable": "SERVER_SECURE", + "default_value": "true", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false" + }, + { + "name": "[Advanced] Admin Only Debug Events", + "description": "(true or false)", + "env_variable": "ADMIN_ONLY_DEBUG_EVENTS", + "default_value": "true", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false" + }, + { + "name": "[Advanced] Disable Debug Events", + "description": "(true or false)", + "env_variable": "DEBUG_EVENTS", + "default_value": "false", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false" + }, + { + "name": "[Advanced] V Rising Dedicated Server App ID", + "description": "Used for installation and updates. Rarely needs to be changed.", + "env_variable": "SRCDS_APPID", + "default_value": "1829350", + "user_viewable": false, + "user_editable": false, + "rules": "required|integer" + }, + { + "name": "[Advanced] Use Windows Branch", + "description": "Tells the installer\/updater to only download the Windows branch of the server (the only branch currently available) so that it can run on Wine. Cannot be changed.", + "env_variable": "WINDOWS_INSTALL", + "default_value": "1", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|in:1" + } + ] +} \ No newline at end of file From 2a00bb04add8ee60013a07e19ecb5afdc3fc9b37 Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Fri, 27 May 2022 23:56:32 -0700 Subject: [PATCH 33/43] Fix typo in README Fixes table formatting in Server Ports section --- game_eggs/steamcmd_servers/v_rising/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_eggs/steamcmd_servers/v_rising/README.md b/game_eggs/steamcmd_servers/v_rising/README.md index a489dc801..a648066a6 100644 --- a/game_eggs/steamcmd_servers/v_rising/README.md +++ b/game_eggs/steamcmd_servers/v_rising/README.md @@ -57,7 +57,7 @@ ___ - The RCON port is optional and only required if the server owner enables/uses RCON. | Port | Default | Protocol | -|---------|---------| +|---------|---------|---------| | **Game (Primary Port in Pterodactyl)** | 9876 | UDP | | Query | 9877 | UDP | | RCON | 25575 | TCP | From bd77d26939a8b18887771d0d52fb0d4164996c93 Mon Sep 17 00:00:00 2001 From: Red-Thirten Date: Sat, 28 May 2022 13:21:01 -0700 Subject: [PATCH 34/43] Verbiage Fixes & Bug Accommodations - `adminlist.txt` and `banlist.txt` are not currently recognized from within the persistent data path, so they were removed from the installation script, and the README was updated to point users to the currently working file location. - "Game Mode" startup parameter was renamed to "Game Settings Preset" to avoid confusion, and it's default value set to null to match documentation. - V Rising was in the wrong alphabetical spot for all the directory READMEs and was fixed. --- README.md | 2 +- game_eggs/README.md | 2 +- game_eggs/steamcmd_servers/README.md | 8 ++++---- game_eggs/steamcmd_servers/v_rising/README.md | 8 ++++---- .../steamcmd_servers/v_rising/egg-v-rising.json | 12 ++++++------ 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 3e15b853c..846cf4b81 100644 --- a/README.md +++ b/README.md @@ -240,10 +240,10 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Team Fortress 2 Classic](game_eggs/steamcmd_servers/team_fortress_2_classic) * [Tower Unite](game_eggs/steamcmd_servers/tower_unite) * [Unturned](game_eggs/steamcmd_servers/unturned) +* [V Rising](game_eggs/steamcmd_servers/v_rising) * [Valheim](game_eggs/steamcmd_servers/valheim) * [Valheim Vanilla](game_eggs/steamcmd_servers/valheim/valheim_vanilla) * [Valheim Plus Mod](game_eggs/steamcmd_servers/valheim/valheim_plus) -* [V Rising](game_eggs/steamcmd_servers/v_rising) [Teeworlds](game_eggs/teeworlds) diff --git a/game_eggs/README.md b/game_eggs/README.md index a4c28f039..942e303e3 100644 --- a/game_eggs/README.md +++ b/game_eggs/README.md @@ -156,10 +156,10 @@ * [The Forest](steamcmd_servers/the_forest) * [Tower Unite](steamcmd_servers/tower_unite) * [Unturned](steamcmd_servers/unturned) +* [V Rising](steamcmd_servers/v_rising) * [Valheim](steamcmd_servers/valheim) * [Valheim Plus Mod](steamcmd_servers/valheim/valheim_plus) * [Valheim Vanilla](steamcmd_servers/valheim/valheim_vanilla) -* [V Rising](steamcmd_servers/v_rising) [Teeworlds](teeworlds) diff --git a/game_eggs/steamcmd_servers/README.md b/game_eggs/steamcmd_servers/README.md index 12f49acd3..3d2f1ea32 100644 --- a/game_eggs/steamcmd_servers/README.md +++ b/game_eggs/steamcmd_servers/README.md @@ -180,13 +180,13 @@ This is a collection of servers that use SteamCMD to install. [Unturned](unturned) +## V Rising + +[V Rising](v_rising) + ## Valheim [Valheim](valheim) * [Valheim Vanilla](valheim/valheim_vanilla) * [Valheim Plus Mod](valheim/valheim_plus) - -## V Rising - -[V Rising](v_rising) diff --git a/game_eggs/steamcmd_servers/v_rising/README.md b/game_eggs/steamcmd_servers/v_rising/README.md index a648066a6..5045e67eb 100644 --- a/game_eggs/steamcmd_servers/v_rising/README.md +++ b/game_eggs/steamcmd_servers/v_rising/README.md @@ -85,17 +85,17 @@ You can find the game settings and saves in the `~/save-data/` directory. #### Server Game Settings -Standardized game settings can be applied via the "Game Mode" startup parameter. If you would like a more custom array of settings to adjust, you can copy the `ServerGameSettings.json` file located in `~/VRisingServer_Data/StreamingAssets/Settings/` to `~/save-data/Settings` and adjust as needed. Also, ensure "Game Mode" is set to empty/null. A list of settings, with a description of what each setting does and the min/max values where applicable, [can be found here](https://cdn.stunlock.com/blog/2022/05/25083113/Game-Server-Settings.pdf). +Standardized game settings can be applied via the "Game Settings Preset" startup parameter. If you would like a more custom array of settings to adjust, you can copy the `ServerGameSettings.json` file located in `~/VRisingServer_Data/StreamingAssets/Settings/` to `~/save-data/Settings/` and adjust as needed. Also, ensure "Game Settings Preset" is set to empty/null. A list of settings, with a description of what each setting does and the min/max values where applicable, [can be found here](https://cdn.stunlock.com/blog/2022/05/25083113/Game-Server-Settings.pdf). #### Becoming an Administrator -To become an administrator in the game you will first need to modify the `adminlist.txt` file under `~/save-data/Settings` with your SteamID (one SteamID per line). This can be done without restarting your server. To become an administrator in the game you need to enable the console in the options menu, bring it down with `~` and authenticate using the `adminauth` console command. Once an administrator you can use a number of administrative commands like `banuser`, `bancharacter`, `banned`, `unban` and `kick`. +To become an administrator in the game you will first need to open the `adminlist.txt` file under `~/VRisingServer_Data/StreamingAssets/Settings/` and add your [steamID64](https://steamid.io/) (one steamID64 per line). This can be done without restarting your server. To become an administrator in the game you need to enable the console in the options menu, bring it down with `~` and authenticate using the `adminauth` console command. Once an administrator you can use a number of administrative commands like `banuser`, `bancharacter`, `banned`, `unban` and `kick`. -If you ban users through the in-game console the server will automatically modify the `banlist.txt` file, but you can also modify this manually (one SteamID per line). +If you ban users through the in-game console the server will automatically modify the `banlist.txt` file, but you can also modify this manually (one steamID64 per line). #### Transfer Local/Client Save to the Server -[Follow these instructions by the developer very carefully](https://github.com/StunlockStudios/vrising-dedicated-server-instructions#transfer-localclient-save-to-a-dedicated-server). Note: The `-saveName ` command line parameter and `GameSettingsPreset` setting are handled automatically by the Egg's "Save Name" and "Game Mode" startup parameters, respectively. Also, if a custom `ServerGameSettings.json` file exists for any reason in the `~/save-data/Settings` directory, delete it. +[Follow these instructions by the developer very carefully](https://github.com/StunlockStudios/vrising-dedicated-server-instructions#transfer-localclient-save-to-a-dedicated-server). Note: The `-saveName ` command line parameter and `GameSettingsPreset` setting are handled automatically by the Egg's "Save Name" and "Game Settings Preset" startup parameters, respectively. Also, if a custom `ServerGameSettings.json` file exists for any reason in the `~/save-data/Settings` directory, delete it. #### RCON diff --git a/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json b/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json index 77346dae9..5b7a68b8e 100644 --- a/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json +++ b/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json @@ -1,5 +1,5 @@ { - "_comment": "Pterodactyl V Rising Egg ~ David Wolfe (Red-Thirten) and Kapatheus ~ 2022-05-26", + "_comment": "Pterodactyl V Rising Egg ~ David Wolfe (Red-Thirten) and Kapatheus ~ 2022-05-28", "meta": { "version": "PTDL_v1", "update_url": null @@ -16,14 +16,14 @@ "file_denylist": [], "startup": "wine64 .\/VRisingServer.exe -persistentDataPath save-data -address 0.0.0.0", "config": { - "files": "{\r\n\t\"save-data\/Settings\/ServerHostSettings.json\": {\r\n\t\t\"parser\": \"json\",\r\n\t\t\"find\": {\r\n\t\t\t\"Name\": \"{{server.build.env.SERVER_NAME}}\",\r\n\t\t\t\"Description\": \"{{server.build.env.DESCRIPTION}}\",\r\n\t\t\t\"Port\": \"{{server.build.default.port}}\",\r\n\t\t\t\"QueryPort\": \"{{server.build.env.QUERY_PORT}}\",\r\n\t\t\t\"MaxConnectedUsers\": \"{{server.build.env.MAX_PLAYERS}}\",\r\n\t\t\t\"MaxConnectedAdmins\": \"{{server.build.env.MAX_ADMINS}}\",\r\n\t\t\t\"ServerFps\": \"{{server.build.env.FPS}}\",\r\n\t\t\t\"SaveName\": \"{{server.build.env.SAVE_NAME}}\",\r\n\t\t\t\"Password\": \"{{server.build.env.SERVER_PASSWORD}}\",\r\n\t\t\t\"Secure\": \"{{server.build.env.SERVER_SECURE}}\",\r\n\t\t\t\"ListOnMasterServer\": \"{{server.build.env.SERVER_LIST}}\",\r\n\t\t\t\"AutoSaveCount\": \"{{server.build.env.SAVE_COUNT}}\",\r\n\t\t\t\"AutoSaveInterval\": \"{{server.build.env.SAVE_INTERVAL}}\",\r\n\t\t\t\"GameSettingsPreset\": \"{{server.build.env.GAME_SETTINGS_PRESET}}\",\r\n\t\t\t\"AdminOnlyDebugEvents\": \"{{server.build.env.ADMIN_ONLY_DEBUG_EVENTS}}\",\r\n\t\t\t\"DisableDebugEvents\": \"{{server.build.env.DEBUG_EVENTS}}\",\r\n\t\t\t\"Rcon.Enabled\": \"{{server.build.env.RCON}}\",\r\n\t\t\t\"Rcon.Password\": \"{{server.build.env.RCON_PASS}}\",\r\n\t\t\t\"Rcon.Port\": \"{{server.build.env.RCON_PORT}}\"\r\n\t\t}\r\n\t}\r\n}", + "files": "{\r\n \"save-data\/Settings\/ServerHostSettings.json\": {\r\n \"parser\": \"json\",\r\n \"find\": {\r\n \"Name\": \"{{server.build.env.SERVER_NAME}}\",\r\n \"Description\": \"{{server.build.env.DESCRIPTION}}\",\r\n \"Port\": \"{{server.build.default.port}}\",\r\n \"QueryPort\": \"{{server.build.env.QUERY_PORT}}\",\r\n \"MaxConnectedUsers\": \"{{server.build.env.MAX_PLAYERS}}\",\r\n \"MaxConnectedAdmins\": \"{{server.build.env.MAX_ADMINS}}\",\r\n \"ServerFps\": \"{{server.build.env.FPS}}\",\r\n \"SaveName\": \"{{server.build.env.SAVE_NAME}}\",\r\n \"Password\": \"{{server.build.env.SERVER_PASSWORD}}\",\r\n \"Secure\": \"{{server.build.env.SERVER_SECURE}}\",\r\n \"ListOnMasterServer\": \"{{server.build.env.SERVER_LIST}}\",\r\n \"AutoSaveCount\": \"{{server.build.env.SAVE_COUNT}}\",\r\n \"AutoSaveInterval\": \"{{server.build.env.SAVE_INTERVAL}}\",\r\n \"GameSettingsPreset\": \"{{server.build.env.GAME_SETTINGS_PRESET}}\",\r\n \"AdminOnlyDebugEvents\": \"{{server.build.env.ADMIN_ONLY_DEBUG_EVENTS}}\",\r\n \"DisableDebugEvents\": \"{{server.build.env.DEBUG_EVENTS}}\",\r\n \"Rcon.Enabled\": \"{{server.build.env.RCON}}\",\r\n \"Rcon.Password\": \"{{server.build.env.RCON_PASS}}\",\r\n \"Rcon.Port\": \"{{server.build.env.RCON_PORT}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"Loaded ServerGameSettings\"\r\n}", "logs": "{}", "stop": "^C" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl V Rising Egg - egg-v-rising.json\r\n## Authors: David Wolfe (Red-Thirten), Kapatheus\r\n## Date: 2022\/05\/26\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n# Download and install SteamCMD\r\nexport HOME=\/mnt\/server\r\ncd \/tmp\r\nmkdir -p $HOME\/steamcmd $HOME\/steamapps\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C $HOME\/steamcmd\r\ncd $HOME\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir $HOME +login anonymous $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} validate +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p $HOME\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so $HOME\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so $HOME\/.steam\/sdk64\/steamclient.so\r\n\r\n## V Rising Setup\r\nmkdir -p $HOME\/save-data\/Settings && cd \"$_\"\r\ntouch adminlist.txt banlist.txt\r\ncat > ServerHostSettings.json << EOF\r\n{\r\n \"Name\": \"${SERVER_NAME}\",\r\n \"Description\": \"${DESCRIPTION}\",\r\n \"Port\": ${SERVER_PORT},\r\n \"QueryPort\": ${QUERY_PORT},\r\n \"MaxConnectedUsers\": ${MAX_PLAYERS},\r\n \"MaxConnectedAdmins\": ${MAX_ADMINS},\r\n \"ServerFps\": ${FPS},\r\n \"SaveName\": \"${SAVE_NAME}\",\r\n \"Password\": \"${SERVER_PASSWORD}\",\r\n \"Secure\": ${SERVER_SECURE},\r\n \"ListOnMasterServer\": ${SERVER_LIST},\r\n \"AutoSaveCount\": ${SAVE_COUNT},\r\n \"AutoSaveInterval\": ${SAVE_INTERVAL},\r\n \"GameSettingsPreset\": \"${GAME_SETTINGS_PRESET}\",\r\n \"AdminOnlyDebugEvents\": ${ADMIN_ONLY_DEBUG_EVENTS},\r\n \"DisableDebugEvents\": ${DEBUG_EVENTS},\r\n \"Rcon\": {\r\n \"Enabled\": ${RCON},\r\n \"Password\": \"${RCON_PASS}\",\r\n \"Port\": ${RCON_PORT}\r\n }\r\n}\r\nEOF", + "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl V Rising Egg - egg-v-rising.json\r\n## Authors: David Wolfe (Red-Thirten), Kapatheus\r\n## Date: 2022\/05\/28\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n# Download and install SteamCMD\r\nexport HOME=\/mnt\/server\r\ncd \/tmp\r\nmkdir -p $HOME\/steamcmd $HOME\/steamapps\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C $HOME\/steamcmd\r\ncd $HOME\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir $HOME +login anonymous $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} validate +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p $HOME\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so $HOME\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so $HOME\/.steam\/sdk64\/steamclient.so\r\n\r\n## V Rising Setup\r\nmkdir -p $HOME\/save-data\/Settings && cd \"$_\"\r\ncat > ServerHostSettings.json << EOF\r\n{\r\n \"Name\": \"${SERVER_NAME}\",\r\n \"Description\": \"${DESCRIPTION}\",\r\n \"Port\": ${SERVER_PORT},\r\n \"QueryPort\": ${QUERY_PORT},\r\n \"MaxConnectedUsers\": ${MAX_PLAYERS},\r\n \"MaxConnectedAdmins\": ${MAX_ADMINS},\r\n \"ServerFps\": ${FPS},\r\n \"SaveName\": \"${SAVE_NAME}\",\r\n \"Password\": \"${SERVER_PASSWORD}\",\r\n \"Secure\": ${SERVER_SECURE},\r\n \"ListOnMasterServer\": ${SERVER_LIST},\r\n \"AutoSaveCount\": ${SAVE_COUNT},\r\n \"AutoSaveInterval\": ${SAVE_INTERVAL},\r\n \"GameSettingsPreset\": \"${GAME_SETTINGS_PRESET}\",\r\n \"AdminOnlyDebugEvents\": ${ADMIN_ONLY_DEBUG_EVENTS},\r\n \"DisableDebugEvents\": ${DEBUG_EVENTS},\r\n \"Rcon\": {\r\n \"Enabled\": ${RCON},\r\n \"Password\": \"${RCON_PASS}\",\r\n \"Port\": ${RCON_PORT}\r\n }\r\n}\r\nEOF", "container": "ghcr.io\/pterodactyl\/installers:debian", "entrypoint": "\/bin\/bash" } @@ -48,10 +48,10 @@ "rules": "boolean" }, { - "name": "Game Mode", - "description": "What preset of game settings the server should run. Some settings may not apply after the save file is first created. Leave empty\/null if you are using a single-player uploaded save or a custom ServerGameSettings.json file.", + "name": "Game Settings Preset", + "description": "What preset of game settings the server should run. Some settings may not apply after the save file is first created. Leave empty\/null if you are using a single-player uploaded save or a custom ServerGameSettings.json file in the `~\/save-data\/Settings\/` directory.", "env_variable": "GAME_SETTINGS_PRESET", - "default_value": "StandardPvP", + "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string|in:,DuoPvP,HardcorePvP,Level30PvE,Level30PvP,Level50PvE,Level50PvP,Level70PvE,Level70PvP,SoloPvP,StandardPvE_Easy,StandardPvE_Hard,StandardPvE,StandardPvP_Easy,StandardPvP_Hard,StandardPVP" From 873d27ec4e9fec4df009ccf2a45e11368a1003e2 Mon Sep 17 00:00:00 2001 From: gOOvER Date: Sun, 29 May 2022 05:38:19 +0200 Subject: [PATCH 35/43] update/Stormworks --- .../egg-stormworks--build-and-rescue.json | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/game_eggs/steamcmd_servers/stormworks/egg-stormworks--build-and-rescue.json b/game_eggs/steamcmd_servers/stormworks/egg-stormworks--build-and-rescue.json index 9cb54cebd..e2ad6f908 100644 --- a/game_eggs/steamcmd_servers/stormworks/egg-stormworks--build-and-rescue.json +++ b/game_eggs/steamcmd_servers/stormworks/egg-stormworks--build-and-rescue.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2022-01-20T13:01:27-05:00", + "exported_at": "2022-05-29T05:37:19+02:00", "name": "Stormworks: Build and Rescue", "author": "iamkubi@gmail.com", "description": "Join a world where you design, create and pilot your own air sea rescue service. Release your inner hero as you battle fierce storms out at sea to rescue those in need.", @@ -12,7 +12,7 @@ "steam_disk_space" ], "images": [ - "quay.io\/parkervcp\/pterodactyl-images:debian_wine-5" + "ghcr.io\/parkervcp\/yolks:wine_latest" ], "file_denylist": [], "startup": "xvfb-run wine server.exe +server_dir \/home\/container", @@ -24,20 +24,29 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt -y --no-install-recommends install curl unzip libstdc++6 lib32gcc1 ca-certificates xvfb screen\r\ncd \/tmp\r\ncurl -sSL -o steamcmd.tar.gz http:\/\/media.steampowered.com\/installer\/steamcmd_linux.tar.gz\r\nmkdir -p \/mnt\/server\/steam\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steam\r\ncd \/mnt\/server\/steam\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n.\/steamcmd.sh +login anonymous +@sSteamCmdForcePlatformType windows +force_install_dir \/mnt\/server +app_update ${APPID} validate +quit\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v \/mnt\/server\/steam\/linux32\/steamclient.so \/mnt\/server\/.steam\/sdk32\/steamclient.so", - "container": "debian:buster-slim", + "script": "#!\/bin\/bash\r\n# steamcmd Base Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n# Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n##\r\n#\r\n# Variables\r\n# STEAM_USER, STEAM_PASS, STEAM_AUTH - Steam user setup. If a user has 2fa enabled it will most likely fail due to timeout. Leave blank for anon install.\r\n# WINDOWS_INSTALL - if it's a windows server you want to install set to 1\r\n# SRCDS_APPID - steam app id found here - https:\/\/developer.valvesoftware.com\/wiki\/Dedicated_Servers_List\r\n# SRCDS_BETAID - beta branch of a steam app. Leave blank to install normal branch\r\n# SRCDS_BETAPASS - password for a beta branch should one be required during private or closed testing phases.. Leave blank for no password.\r\n# INSTALL_FLAGS - Any additional SteamCMD flags to pass during install.. Keep in mind that steamcmd auto update process in the docker image might overwrite or ignore these when it performs update on server boot.\r\n# AUTO_UPDATE - Adding this variable to the egg allows disabling or enabling automated updates on boot. Boolean value. 0 to disable and 1 to enable.\r\n#\r\n ##\r\n\r\n# Install packages. Default packages below are not required if using our existing install image thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n## just in case someone removed the defaults.\r\nif [[ \"${STEAM_USER}\" == \"\" ]] || [[ \"${STEAM_PASS}\" == \"\" ]]; then\r\n echo -e \"steam user is not set.\\n\"\r\n echo -e \"Using anonymous user.\\n\"\r\n STEAM_USER=anonymous\r\n STEAM_PASS=\"\"\r\n STEAM_AUTH=\"\"\r\nelse\r\n echo -e \"user set to ${STEAM_USER}\"\r\nfi\r\n\r\n## download and install steamcmd\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\nmkdir -p \/mnt\/server\/steamapps # Fix steamcmd disk write error when this folder is missing\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n## install game using steamcmd\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s \"-beta ${SRCDS_BETAID}\" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s \"-betapassword ${SRCDS_BETAPASS}\" ) ${INSTALL_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6\r\n\r\n## set up 32 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v linux32\/steamclient.so ..\/.steam\/sdk32\/steamclient.so\r\n\r\n## set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so", + "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } }, "variables": [ { - "name": "App ID", + "name": "SRCDS_APPID", "description": "Steam App ID", - "env_variable": "APPID", + "env_variable": "SRCDS_APPID", "default_value": "1247090", "user_viewable": false, "user_editable": false, "rules": "required|string|max:20" + }, + { + "name": "WINDOWS_INSTALL", + "description": "", + "env_variable": "WINDOWS_INSTALL", + "default_value": "1", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:20" } ] -} +} \ No newline at end of file From 28cf456a38b6634f195142ca2bf715b49c0c2e92 Mon Sep 17 00:00:00 2001 From: gOOvER Date: Sun, 29 May 2022 05:41:24 +0200 Subject: [PATCH 36/43] fix --- .../stormworks/egg-stormworks--build-and-rescue.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_eggs/steamcmd_servers/stormworks/egg-stormworks--build-and-rescue.json b/game_eggs/steamcmd_servers/stormworks/egg-stormworks--build-and-rescue.json index e2ad6f908..e8907e4d9 100644 --- a/game_eggs/steamcmd_servers/stormworks/egg-stormworks--build-and-rescue.json +++ b/game_eggs/steamcmd_servers/stormworks/egg-stormworks--build-and-rescue.json @@ -15,7 +15,7 @@ "ghcr.io\/parkervcp\/yolks:wine_latest" ], "file_denylist": [], - "startup": "xvfb-run wine server.exe +server_dir \/home\/container", + "startup": "xvfb-run wine server64.exe +server_dir \/home\/container", "config": { "files": "{}", "startup": "{\r\n \"done\": \"Server: ready to spawn for peer\"\r\n}", From c317755b44804a64a53c53bae57f5158f69f4905 Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Mon, 30 May 2022 20:10:55 +0200 Subject: [PATCH 37/43] fix: multitheftauto archive type(#1669) --- game_eggs/gta/mtasa/egg-multi-theft-auto.json | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/game_eggs/gta/mtasa/egg-multi-theft-auto.json b/game_eggs/gta/mtasa/egg-multi-theft-auto.json index b06f9323a..d2cfbc2a5 100644 --- a/game_eggs/gta/mtasa/egg-multi-theft-auto.json +++ b/game_eggs/gta/mtasa/egg-multi-theft-auto.json @@ -1,13 +1,18 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1" + "version": "PTDL_v1", + "update_url": null }, - "exported_at": "2020-10-17T02:19:36+00:00", + "exported_at": "2022-05-25T15:27:15+02:00", "name": "Multi Theft Auto", "author": "info@six-gaming.com", "description": "What more could you want? Multi Theft Auto provides the best online Grand Theft Auto experience there is. Read on to find out more.", - "image": "quay.io\/parkervcp\/pterodactyl-images:ubuntu_source", + "features": null, + "images": [ + "ghcr.io\/parkervcp\/yolks:ubuntu" + ], + "file_denylist": [], "startup": ".\/mta-server64 --port {{SERVER_PORT}} --httpport {{SERVER_WEBPORT}} -n", "config": { "files": "{}", @@ -17,7 +22,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\napt -y update\r\napt -y --no-install-recommends install curl unzip lib32gcc1 ca-certificates\r\n\r\ncd \/tmp\r\ncurl -L -o multitheftauto_linux_x64.tar.gz https:\/\/linux.mtasa.com\/dl\/multitheftauto_linux_x64.tar.gz\r\ncurl -L -o mta-baseconfig.tar.gz https:\/\/linux.mtasa.com\/dl\/baseconfig.tar.gz\r\ncurl -L -o mtasa-resources-latest.zip http:\/\/mirror.mtasa.com\/mtasa\/resources\/mtasa-resources-latest.zip\r\n\r\nmkdir -p \/mnt\/server\r\ntar -xzvf multitheftauto_linux_x64.tar.gz\r\ncp -rf multitheftauto_linux_x64\/* \/mnt\/server\r\n\r\nif [ ! -f \/mnt\/server\/x64\/libmysqlclient.so.16 ]; then\r\n curl -L http:\/\/nightly.mtasa.com\/files\/libmysqlclient.so.16 -o \/mnt\/server\/x64\/libmysqlclient.so.16\r\nfi\r\n\r\nmkdir -p \/mnt\/server\/mods\/deathmatch\/resources\r\nunzip -o -d \/mnt\/server\/mods\/deathmatch\/resources mtasa-resources-latest.zip\r\n\r\nmkdir -p \/mnt\/server-conf\r\ntar -xzvf mta-baseconfig.tar.gz\r\ncp -rf baseconfig\/* \/mnt\/server\/mods\/deathmatch\r\n\r\nchown -R root:root \/mnt\r\n\r\nexport HOME=\/mnt\/server", + "script": "#!\/bin\/bash\r\napt -y update\r\napt -y --no-install-recommends install curl unzip lib32gcc1 ca-certificates\r\n\r\ncd \/tmp\r\ncurl -L -o multitheftauto_linux_x64.tar.gz https:\/\/linux.mtasa.com\/dl\/multitheftauto_linux_x64.tar.gz\r\ncurl -L -o mta-baseconfig.tar.gz https:\/\/linux.mtasa.com\/dl\/baseconfig.tar.gz\r\ncurl -L -o mtasa-resources-latest.zip http:\/\/mirror.mtasa.com\/mtasa\/resources\/mtasa-resources-latest.zip\r\n\r\nmkdir -p \/mnt\/server\r\ntar -xvf multitheftauto_linux_x64.tar.gz\r\ncp -rf multitheftauto_linux_x64\/* \/mnt\/server\r\n\r\nif [ ! -f \/mnt\/server\/x64\/libmysqlclient.so.16 ]; then\r\n curl -L http:\/\/nightly.mtasa.com\/files\/libmysqlclient.so.16 -o \/mnt\/server\/x64\/libmysqlclient.so.16\r\nfi\r\n\r\nmkdir -p \/mnt\/server\/mods\/deathmatch\/resources\r\nunzip -o -d \/mnt\/server\/mods\/deathmatch\/resources mtasa-resources-latest.zip\r\n\r\nmkdir -p \/mnt\/server-conf\r\ntar -xvf mta-baseconfig.tar.gz\r\ncp -rf baseconfig\/* \/mnt\/server\/mods\/deathmatch\r\n\r\nchown -R root:root \/mnt\r\n\r\nexport HOME=\/mnt\/server\r\necho \"done\"", "container": "ubuntu:18.04", "entrypoint": "bash" } @@ -33,4 +38,4 @@ "rules": "required|numeric" } ] -} \ No newline at end of file +} From a29ea8b1d1cccd7c6c8afa734b4928d65e2e7ef3 Mon Sep 17 00:00:00 2001 From: Elite Espeon Date: Wed, 1 Jun 2022 10:44:40 -0400 Subject: [PATCH 38/43] Fix outdated docker image and URL for tf2c content. --- .../egg-team-fortress-2-classic.json | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/game_eggs/steamcmd_servers/team_fortress_2_classic/egg-team-fortress-2-classic.json b/game_eggs/steamcmd_servers/team_fortress_2_classic/egg-team-fortress-2-classic.json index 73df31e8a..3fb85ff6e 100644 --- a/game_eggs/steamcmd_servers/team_fortress_2_classic/egg-team-fortress-2-classic.json +++ b/game_eggs/steamcmd_servers/team_fortress_2_classic/egg-team-fortress-2-classic.json @@ -1,21 +1,21 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2022-01-20T13:03:12-05:00", + "exported_at": "2022-06-01T09:25:22-04:00", "name": "Team Fortress 2 Classic", "author": "eggs@scattergun.io", "description": "Team Fortress 2 Classic is a free mod of the 2007 game Team Fortress 2, developed by Eminoma and utilizing the Source engine.", "features": [ "steam_disk_space" ], - "images": [ - "quay.io\/parkervcp\/pterodactyl-images:debian_base" - ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:games_source": "ghcr.io\/parkervcp\/yolks:games_source" + }, "file_denylist": [], - "startup": ".\/srcds_run -game {{SRCDS_GAME}} -console -port {{SERVER_PORT}} +map {{SRCDS_MAP}} +ip {{SERVER_IP}} -strictportbind -norestart -debug +maxplayers {{MAXPLAYERS}}", + "startup": ".\/srcds_run -game {{SRCDS_GAME}} -console -port {{SERVER_PORT}} +map {{SRCDS_MAP}} +ip 0.0.0.0 -strictportbind -norestart -debug +maxplayers {{MAXPLAYERS}}", "config": { "files": "{}", "startup": "{\r\n \"done\": \"gameserver Steam ID\"\r\n}", @@ -24,7 +24,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# steamcmd Base Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n# Image to install with is 'ubuntu:18.04'\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc1 ca-certificates p7zip-full wget \r\n\r\n## just in case someone removed the defaults.\r\nif [ \"${STEAM_USER}\" == \"\" ]; then\r\n STEAM_USER=anonymous\r\n STEAM_PASS=\"\"\r\n STEAM_AUTH=\"\"\r\nfi\r\n\r\n## download and install steamcmd\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n## install game using steamcmd\r\n.\/steamcmd.sh +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +force_install_dir \/mnt\/server +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} +quit ## other flags may be needed depending on install. looking at you cs 1.6\r\n\r\n## set up 32 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v linux32\/steamclient.so ..\/.steam\/sdk32\/steamclient.so\r\n\r\n## set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so\r\n\r\n## download TF2C from website\r\ncd \/mnt\/server\r\nwget -v https:\/\/chapo.services\/tf2c\/tf2classic-${GAMEVERSION}.7z -O tf2classic.7z\r\n7z x tf2classic.7z -y\r\n\r\n## fix issue \/w symlink\r\ncd \/mnt\/server\/bin\r\nln -s vphysics_srv.so vphysics.so\r\nln -s studiorender_srv.so studiorender.so\r\nln -s soundemittersystem_srv.so soundemittersystem.so\r\nln -s shaderapiempty_srv.so shaderapiempty.so\r\nln -s scenefilecache_srv.so scenefilecache.so\r\nln -s replay_srv.so replay.so\r\nln -s materialsystem_srv.so materialsystem.so", + "script": "#!\/bin\/bash\r\n# steamcmd Base Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n# Image to install with is 'ubuntu:18.04'\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc1 ca-certificates p7zip-full wget\r\n## just in case someone removed the defaults.\r\nif [ \"${STEAM_USER}\" == \"\" ]; then\r\nSTEAM_USER=anonymous\r\nSTEAM_PASS=\"\"\r\nSTEAM_AUTH=\"\"\r\nfi\r\n## download and install steamcmd\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n## install game using steamcmd\r\n.\/steamcmd.sh +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +force_install_dir \/mnt\/server +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} +quit ## other flags may be needed depending on install. looking at you cs 1.6\r\n## set up 32 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v linux32\/steamclient.so ..\/.steam\/sdk32\/steamclient.so\r\n## set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so\r\n## download TF2C from website\r\ncd \/mnt\/server\r\nwget -v https:\/\/wiki.tf2classic.com\/tf2classic-${GAMEVERSION}.zip -O tf2classic.zip\r\n7z x tf2classic.zip -y\r\nrm -rf tf2classic.zip\r\n## fix issue \/w symlink\r\ncd \/mnt\/server\/bin\r\nln -s vphysics_srv.so vphysics.so\r\nln -s studiorender_srv.so studiorender.so\r\nln -s soundemittersystem_srv.so soundemittersystem.so\r\nln -s shaderapiempty_srv.so shaderapiempty.so\r\nln -s scenefilecache_srv.so scenefilecache.so\r\nln -s replay_srv.so replay.so\r\nln -s materialsystem_srv.so materialsystem.so", "container": "ubuntu:18.04", "entrypoint": "bash" } @@ -37,7 +37,8 @@ "default_value": "244310", "user_viewable": true, "user_editable": false, - "rules": "required|regex:\/^(244310)$\/" + "rules": "required|regex:\/^(244310)$\/", + "field_type": "text" }, { "name": "Game Name", @@ -46,7 +47,8 @@ "default_value": "tf2classic", "user_viewable": true, "user_editable": false, - "rules": "required|regex:\/^(tf2classic)$\/" + "rules": "required|regex:\/^(tf2classic)$\/", + "field_type": "text" }, { "name": "Default Map", @@ -55,16 +57,18 @@ "default_value": "ctf_2fort", "user_viewable": true, "user_editable": true, - "rules": "required|regex:\/^(\\w{1,20})$\/" + "rules": "required|regex:\/^(\\w{1,20})$\/", + "field_type": "text" }, { "name": "Game Version", "description": "Version of TF2C to download.", "env_variable": "GAMEVERSION", - "default_value": "2.0.1", + "default_value": "2.0.3", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "Max Players", @@ -73,7 +77,8 @@ "default_value": "24", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" } ] -} +} \ No newline at end of file From 7bc6cbb92fcca1feac0ce80086ba29e1dea0bbe1 Mon Sep 17 00:00:00 2001 From: TuEye <26883979+TuEye@users.noreply.github.com> Date: Wed, 8 Jun 2022 01:28:49 +0200 Subject: [PATCH 39/43] fix: PostgresSQL (#1643) Fixes user creation and allowing remote connections --- database/sql/postgres/egg-postgres.json | 57 +- database/sql/postgres/postgres.conf | 658 ------------------------ 2 files changed, 22 insertions(+), 693 deletions(-) delete mode 100644 database/sql/postgres/postgres.conf diff --git a/database/sql/postgres/egg-postgres.json b/database/sql/postgres/egg-postgres.json index 638692e7e..ef8895847 100644 --- a/database/sql/postgres/egg-postgres.json +++ b/database/sql/postgres/egg-postgres.json @@ -1,62 +1,49 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1" + "version": "PTDL_v1", + "update_url": null }, - "exported_at": "2020-03-04T09:53:34-05:00", + "exported_at": "2022-05-08T21:54:05+02:00", "name": "Postgres", "author": "parker@parkervcp.com", "description": "A default Postgres install that is not really editable.", - "image": "quay.io\/parkervcp\/pterodactyl-images:db_postgres", + "features": null, + "images": [ + "ghcr.io\/parkervcp\/yolks:postgres_14" + ], + "file_denylist": [], "startup": "postgres -D \/home\/container\/postgres_db\/", "config": { - "files": "{\r\n \"postgres_db\/postgresql.conf\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n\t\t \"#port =\": \"port = {{server.build.default.port}}\",\r\n \"#external_pid_file =\": \"external_pid_file = '\/home\/container\/postgres_db\/run\/postgres.pid'\",\r\n \"#unix_socket_directories =\": \"unix_socket_directories = '\/home\/container\/postgres_db\/run\/'\"\r\n }\r\n }\r\n}", + "files": "{\r\n \"postgres_db\/postgresql.conf\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"#port =\": \"port = {{server.build.default.port}}\",\r\n \"#external_pid_file =\": \"external_pid_file = '\/home\/container\/postgres_db\/run\/postgres.pid'\",\r\n \"#unix_socket_directories =\": \"unix_socket_directories = '\/home\/container\/postgres_db\/run\/'\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"database system is ready to accept connections\"\r\n}", "logs": "{}", "stop": "^C" }, "scripts": { "installation": { - "script": "#! \/bin\/ash\r\nadduser -D -h \/home\/container container\r\n\r\necho $POSTGRES_PASSWORD > .passwd\r\n\r\nchown -R container: \/mnt\/server\/\r\n\r\ncat .passwd\r\n\r\nsu container -c 'initdb -D \/mnt\/server\/postgres_db\/ -A md5 -U container --pwfile .passwd'\r\n\r\nmkdir -p \/mnt\/server\/postgres_db\/run\/\r\n\r\necho -e \"Done\"", - "container": "postgres:13.1-alpine", - "entrypoint": "ash" + "script": "#! \/bin\/ash\r\nadduser -D -h \/home\/container container\r\n\r\nchown -R container: \/mnt\/server\/\r\n\r\nsu container -c 'initdb -D \/mnt\/server\/postgres_db\/ -A md5 -U \"$PGUSER\" --pwfile=<(echo \"$PGPASSWORD\")'\r\n\r\nmkdir -p \/mnt\/server\/postgres_db\/run\/\r\n\r\n## Add default \"allow from all\" auth rule to pg_hba\r\nif ! grep -q \"# Custom rules\" \"\/mnt\/server\/postgres_db\/pg_hba.conf\"; then\r\n echo -e \"# Custom rules\\nhost all all 0.0.0.0\/0 md5\" >> \"\/mnt\/server\/postgres_db\/pg_hba.conf\"\r\nfi\r\n\r\necho -e \"Done\"", + "container": "postgres:14-alpine", + "entrypoint": "bash" } }, "variables": [ { - "name": "Database Password", - "description": "The Postgres user password that can be changed and should change on server restart.", - "env_variable": "PGPASSWORD", - "default_value": "P@55word", - "user_viewable": 1, - "user_editable": 1, - "rules": "required|string|max:20" - }, - { - "name": "SuperUser Password", - "description": "The postgres super user password with a strong default.\r\nYou should be generating new ones for each server.\r\nIf you don't then users can hit other users DB's", - "env_variable": "PGROOT", - "default_value": "ZPWgpMN4hETqjXAV", - "user_viewable": 1, - "user_editable": 0, - "rules": "required|string|max:20" - }, - { - "name": "Postgres User", - "description": "The user for the postgres database", + "name": "Superuser Name", + "description": "The username for the postgres superuser", "env_variable": "PGUSER", "default_value": "pterodactyl", - "user_viewable": 1, - "user_editable": 0, + "user_viewable": true, + "user_editable": false, "rules": "required|string|max:20" }, { - "name": "Postgres Database", - "description": "The postgres database the user will have access too.", - "env_variable": "PGDATABASE", - "default_value": "pterodactyl", - "user_viewable": 1, - "user_editable": 0, + "name": "Superuser Password", + "description": "The postgres super user password with a strong default.\r\nYou should be generating new ones for each server.\r\nIf you don't then users can hit other users DB's", + "env_variable": "PGPASSWORD", + "default_value": "Pl3453Ch4n63M3!", + "user_viewable": true, + "user_editable": false, "rules": "required|string|max:20" } ] diff --git a/database/sql/postgres/postgres.conf b/database/sql/postgres/postgres.conf deleted file mode 100644 index 19a9762ff..000000000 --- a/database/sql/postgres/postgres.conf +++ /dev/null @@ -1,658 +0,0 @@ -# ----------------------------- -# PostgreSQL configuration file -# ----------------------------- -# -# This file consists of lines of the form: -# -# name = value -# -# (The "=" is optional.) Whitespace may be used. Comments are introduced with -# "#" anywhere on a line. The complete list of parameter names and allowed -# values can be found in the PostgreSQL documentation. -# -# The commented-out settings shown in this file represent the default values. -# Re-commenting a setting is NOT sufficient to revert it to the default value; -# you need to reload the server. -# -# This file is read on server startup and when the server receives a SIGHUP -# signal. If you edit the file on a running system, you have to SIGHUP the -# server for the changes to take effect, run "pg_ctl reload", or execute -# "SELECT pg_reload_conf()". Some parameters, which are marked below, -# require a server shutdown and restart to take effect. -# -# Any parameter can also be given as a command-line option to the server, e.g., -# "postgres -c log_connections=on". Some parameters can be changed at run time -# with the "SET" SQL command. -# -# Memory units: kB = kilobytes Time units: ms = milliseconds -# MB = megabytes s = seconds -# GB = gigabytes min = minutes -# TB = terabytes h = hours -# d = days - - -#------------------------------------------------------------------------------ -# FILE LOCATIONS -#------------------------------------------------------------------------------ - -# The default values of these variables are driven from the -D command-line -# option or PGDATA environment variable, represented here as ConfigDir. - -#data_directory = 'ConfigDir' # use data in another directory - # (change requires restart) -#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file - # (change requires restart) -#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file - # (change requires restart) - -# If external_pid_file is not explicitly set, no extra PID file is written. -#external_pid_file = '' # write an extra PID file - # (change requires restart) - - -#------------------------------------------------------------------------------ -# CONNECTIONS AND AUTHENTICATION -#------------------------------------------------------------------------------ - -# - Connection Settings - - -listen_addresses = '*' - # comma-separated list of addresses; - # defaults to 'localhost'; use '*' for all - # (change requires restart) -port = 5432 # (change requires restart) -#max_connections = 100 # (change requires restart) -#superuser_reserved_connections = 3 # (change requires restart) -#unix_socket_directories = '/tmp' # comma-separated list of directories - # (change requires restart) -#unix_socket_group = '' # (change requires restart) -#unix_socket_permissions = 0777 # begin with 0 to use octal notation - # (change requires restart) -#bonjour = off # advertise server via Bonjour - # (change requires restart) -#bonjour_name = '' # defaults to the computer name - # (change requires restart) - -# - Security and Authentication - - -#authentication_timeout = 1min # 1s-600s -#ssl = off -#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers -#ssl_prefer_server_ciphers = on -#ssl_ecdh_curve = 'prime256v1' -#ssl_dh_params_file = '' -#ssl_cert_file = 'server.crt' -#ssl_key_file = 'server.key' -#ssl_ca_file = '' -#ssl_crl_file = '' -#password_encryption = md5 # md5 or scram-sha-256 -#db_user_namespace = off -#row_security = on - -# GSSAPI using Kerberos -#krb_server_keyfile = '' -#krb_caseins_users = off - -# - TCP Keepalives - -# see "man 7 tcp" for details - -#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; - # 0 selects the system default -#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; - # 0 selects the system default -#tcp_keepalives_count = 0 # TCP_KEEPCNT; - # 0 selects the system default - - -#------------------------------------------------------------------------------ -# RESOURCE USAGE (except WAL) -#------------------------------------------------------------------------------ - -# - Memory - - -#shared_buffers = 32MB # min 128kB - # (change requires restart) -#huge_pages = try # on, off, or try - # (change requires restart) -#temp_buffers = 8MB # min 800kB -#max_prepared_transactions = 0 # zero disables the feature - # (change requires restart) -# Caution: it is not advisable to set max_prepared_transactions nonzero unless -# you actively intend to use prepared transactions. -#work_mem = 4MB # min 64kB -#maintenance_work_mem = 64MB # min 1MB -#replacement_sort_tuples = 150000 # limits use of replacement selection sort -#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem -#max_stack_depth = 2MB # min 100kB -#dynamic_shared_memory_type = posix # the default is the first option - # supported by the operating system: - # posix - # sysv - # windows - # mmap - # use none to disable dynamic shared memory - # (change requires restart) - -# - Disk - - -#temp_file_limit = -1 # limits per-process temp file space - # in kB, or -1 for no limit - -# - Kernel Resource Usage - - -#max_files_per_process = 1000 # min 25 - # (change requires restart) -#shared_preload_libraries = '' # (change requires restart) - -# - Cost-Based Vacuum Delay - - -#vacuum_cost_delay = 0 # 0-100 milliseconds -#vacuum_cost_page_hit = 1 # 0-10000 credits -#vacuum_cost_page_miss = 10 # 0-10000 credits -#vacuum_cost_page_dirty = 20 # 0-10000 credits -#vacuum_cost_limit = 200 # 1-10000 credits - -# - Background Writer - - -#bgwriter_delay = 200ms # 10-10000ms between rounds -#bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round -#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round -#bgwriter_flush_after = 0 # measured in pages, 0 disables - -# - Asynchronous Behavior - - -#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching -#max_worker_processes = 8 # (change requires restart) -#max_parallel_workers_per_gather = 2 # taken from max_parallel_workers -#max_parallel_workers = 8 # maximum number of max_worker_processes that - # can be used in parallel queries -#old_snapshot_threshold = -1 # 1min-60d; -1 disables; 0 is immediate - # (change requires restart) -#backend_flush_after = 0 # measured in pages, 0 disables - - -#------------------------------------------------------------------------------ -# WRITE AHEAD LOG -#------------------------------------------------------------------------------ - -# - Settings - - -#wal_level = replica # minimal, replica, or logical - # (change requires restart) -#fsync = on # flush data to disk for crash safety - # (turning this off can cause - # unrecoverable data corruption) -#synchronous_commit = on # synchronization level; - # off, local, remote_write, remote_apply, or on -#wal_sync_method = fsync # the default is the first option - # supported by the operating system: - # open_datasync - # fdatasync (default on Linux) - # fsync - # fsync_writethrough - # open_sync -#full_page_writes = on # recover from partial page writes -#wal_compression = off # enable compression of full-page writes -#wal_log_hints = off # also do full page writes of non-critical updates - # (change requires restart) -#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers - # (change requires restart) -#wal_writer_delay = 200ms # 1-10000 milliseconds -#wal_writer_flush_after = 1MB # measured in pages, 0 disables - -#commit_delay = 0 # range 0-100000, in microseconds -#commit_siblings = 5 # range 1-1000 - -# - Checkpoints - - -#checkpoint_timeout = 5min # range 30s-1d -#max_wal_size = 1GB -#min_wal_size = 80MB -#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0 -#checkpoint_flush_after = 0 # measured in pages, 0 disables -#checkpoint_warning = 30s # 0 disables - -# - Archiving - - -#archive_mode = off # enables archiving; off, on, or always - # (change requires restart) -#archive_command = '' # command to use to archive a logfile segment - # placeholders: %p = path of file to archive - # %f = file name only - # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' -#archive_timeout = 0 # force a logfile segment switch after this - # number of seconds; 0 disables - - -#------------------------------------------------------------------------------ -# REPLICATION -#------------------------------------------------------------------------------ - -# - Sending Server(s) - - -# Set these on the master and on any standby that will send replication data. - -#max_wal_senders = 10 # max number of walsender processes - # (change requires restart) -#wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables -#wal_sender_timeout = 60s # in milliseconds; 0 disables - -#max_replication_slots = 10 # max number of replication slots - # (change requires restart) -#track_commit_timestamp = off # collect timestamp of transaction commit - # (change requires restart) - -# - Master Server - - -# These settings are ignored on a standby server. - -#synchronous_standby_names = '' # standby servers that provide sync rep - # method to choose sync standbys, number of sync standbys, - # and comma-separated list of application_name - # from standby(s); '*' = all -#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed - -# - Standby Servers - - -# These settings are ignored on a master server. - -#hot_standby = on # "off" disallows queries during recovery - # (change requires restart) -#max_standby_archive_delay = 30s # max delay before canceling queries - # when reading WAL from archive; - # -1 allows indefinite delay -#max_standby_streaming_delay = 30s # max delay before canceling queries - # when reading streaming WAL; - # -1 allows indefinite delay -#wal_receiver_status_interval = 10s # send replies at least this often - # 0 disables -#hot_standby_feedback = off # send info from standby to prevent - # query conflicts -#wal_receiver_timeout = 60s # time that receiver waits for - # communication from master - # in milliseconds; 0 disables -#wal_retrieve_retry_interval = 5s # time to wait before retrying to - # retrieve WAL after a failed attempt - -# - Subscribers - - -# These settings are ignored on a publisher. - -#max_logical_replication_workers = 4 # taken from max_worker_processes - # (change requires restart) -#max_sync_workers_per_subscription = 2 # taken from max_logical_replication_workers - - -#------------------------------------------------------------------------------ -# QUERY TUNING -#------------------------------------------------------------------------------ - -# - Planner Method Configuration - - -#enable_bitmapscan = on -#enable_hashagg = on -#enable_hashjoin = on -#enable_indexscan = on -#enable_indexonlyscan = on -#enable_material = on -#enable_mergejoin = on -#enable_nestloop = on -#enable_seqscan = on -#enable_sort = on -#enable_tidscan = on - -# - Planner Cost Constants - - -#seq_page_cost = 1.0 # measured on an arbitrary scale -#random_page_cost = 4.0 # same scale as above -#cpu_tuple_cost = 0.01 # same scale as above -#cpu_index_tuple_cost = 0.005 # same scale as above -#cpu_operator_cost = 0.0025 # same scale as above -#parallel_tuple_cost = 0.1 # same scale as above -#parallel_setup_cost = 1000.0 # same scale as above -#min_parallel_table_scan_size = 8MB -#min_parallel_index_scan_size = 512kB -#effective_cache_size = 4GB - -# - Genetic Query Optimizer - - -#geqo = on -#geqo_threshold = 12 -#geqo_effort = 5 # range 1-10 -#geqo_pool_size = 0 # selects default based on effort -#geqo_generations = 0 # selects default based on effort -#geqo_selection_bias = 2.0 # range 1.5-2.0 -#geqo_seed = 0.0 # range 0.0-1.0 - -# - Other Planner Options - - -#default_statistics_target = 100 # range 1-10000 -#constraint_exclusion = partition # on, off, or partition -#cursor_tuple_fraction = 0.1 # range 0.0-1.0 -#from_collapse_limit = 8 -#join_collapse_limit = 8 # 1 disables collapsing of explicit - # JOIN clauses -#force_parallel_mode = off - - -#------------------------------------------------------------------------------ -# ERROR REPORTING AND LOGGING -#------------------------------------------------------------------------------ - -# - Where to Log - - -#log_destination = 'stderr' # Valid values are combinations of - # stderr, csvlog, syslog, and eventlog, - # depending on platform. csvlog - # requires logging_collector to be on. - -# This is used when logging to stderr: -#logging_collector = off # Enable capturing of stderr and csvlog - # into log files. Required to be on for - # csvlogs. - # (change requires restart) - -# These are only used if logging_collector is on: -#log_directory = 'log' # directory where log files are written, - # can be absolute or relative to PGDATA -#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern, - # can include strftime() escapes -#log_file_mode = 0600 # creation mode for log files, - # begin with 0 to use octal notation -#log_truncate_on_rotation = off # If on, an existing log file with the - # same name as the new log file will be - # truncated rather than appended to. - # But such truncation only occurs on - # time-driven rotation, not on restarts - # or size-driven rotation. Default is - # off, meaning append to existing files - # in all cases. -#log_rotation_age = 1d # Automatic rotation of logfiles will - # happen after that time. 0 disables. -#log_rotation_size = 10MB # Automatic rotation of logfiles will - # happen after that much log output. - # 0 disables. - -# These are relevant when logging to syslog: -#syslog_facility = 'LOCAL0' -#syslog_ident = 'postgres' -#syslog_sequence_numbers = on -#syslog_split_messages = on - -# This is only relevant when logging to eventlog (win32): -# (change requires restart) -#event_source = 'PostgreSQL' - -# - When to Log - - -#client_min_messages = notice # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # log - # notice - # warning - # error - -#log_min_messages = warning # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic - -#log_min_error_statement = error # values in order of decreasing detail: - # debug5 - # debug4 - # debug3 - # debug2 - # debug1 - # info - # notice - # warning - # error - # log - # fatal - # panic (effectively off) - -#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements - # and their durations, > 0 logs only - # statements running at least this number - # of milliseconds - - -# - What to Log - - -#debug_print_parse = off -#debug_print_rewritten = off -#debug_print_plan = off -#debug_pretty_print = on -#log_checkpoints = off -#log_connections = off -#log_disconnections = off -#log_duration = off -#log_error_verbosity = default # terse, default, or verbose messages -#log_hostname = off -#log_line_prefix = '%m [%p] ' # special values: - # %a = application name - # %u = user name - # %d = database name - # %r = remote host and port - # %h = remote host - # %p = process ID - # %t = timestamp without milliseconds - # %m = timestamp with milliseconds - # %n = timestamp with milliseconds (as a Unix epoch) - # %i = command tag - # %e = SQL state - # %c = session ID - # %l = session line number - # %s = session start timestamp - # %v = virtual transaction ID - # %x = transaction ID (0 if none) - # %q = stop here in non-session - # processes - # %% = '%' - # e.g. '<%u%%%d> ' -#log_lock_waits = off # log lock waits >= deadlock_timeout -#log_statement = 'none' # none, ddl, mod, all -#log_replication_commands = off -#log_temp_files = -1 # log temporary files equal or larger - # than the specified size in kilobytes; - # -1 disables, 0 logs all temp files -#log_timezone = 'GMT' - - -# - Process Title - - -#cluster_name = '' # added to process titles if nonempty - # (change requires restart) -#update_process_title = on - - -#------------------------------------------------------------------------------ -# RUNTIME STATISTICS -#------------------------------------------------------------------------------ - -# - Query/Index Statistics Collector - - -#track_activities = on -#track_counts = on -#track_io_timing = off -#track_functions = none # none, pl, all -#track_activity_query_size = 1024 # (change requires restart) -#stats_temp_directory = 'pg_stat_tmp' - - -# - Statistics Monitoring - - -#log_parser_stats = off -#log_planner_stats = off -#log_executor_stats = off -#log_statement_stats = off - - -#------------------------------------------------------------------------------ -# AUTOVACUUM PARAMETERS -#------------------------------------------------------------------------------ - -#autovacuum = on # Enable autovacuum subprocess? 'on' - # requires track_counts to also be on. -#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and - # their durations, > 0 logs only - # actions running at least this number - # of milliseconds. -#autovacuum_max_workers = 3 # max number of autovacuum subprocesses - # (change requires restart) -#autovacuum_naptime = 1min # time between autovacuum runs -#autovacuum_vacuum_threshold = 50 # min number of row updates before - # vacuum -#autovacuum_analyze_threshold = 50 # min number of row updates before - # analyze -#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum -#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze -#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum - # (change requires restart) -#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age - # before forced vacuum - # (change requires restart) -#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for - # autovacuum, in milliseconds; - # -1 means use vacuum_cost_delay -#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for - # autovacuum, -1 means use - # vacuum_cost_limit - - -#------------------------------------------------------------------------------ -# CLIENT CONNECTION DEFAULTS -#------------------------------------------------------------------------------ - -# - Statement Behavior - - -#search_path = '"$user", public' # schema names -#default_tablespace = '' # a tablespace name, '' uses the default -#temp_tablespaces = '' # a list of tablespace names, '' uses - # only default tablespace -#check_function_bodies = on -#default_transaction_isolation = 'read committed' -#default_transaction_read_only = off -#default_transaction_deferrable = off -#session_replication_role = 'origin' -#statement_timeout = 0 # in milliseconds, 0 is disabled -#lock_timeout = 0 # in milliseconds, 0 is disabled -#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled -#vacuum_freeze_min_age = 50000000 -#vacuum_freeze_table_age = 150000000 -#vacuum_multixact_freeze_min_age = 5000000 -#vacuum_multixact_freeze_table_age = 150000000 -#bytea_output = 'hex' # hex, escape -#xmlbinary = 'base64' -#xmloption = 'content' -#gin_fuzzy_search_limit = 0 -#gin_pending_list_limit = 4MB - -# - Locale and Formatting - - -#datestyle = 'iso, mdy' -#intervalstyle = 'postgres' -#timezone = 'GMT' -#timezone_abbreviations = 'Default' # Select the set of available time zone - # abbreviations. Currently, there are - # Default - # Australia (historical usage) - # India - # You can create your own file in - # share/timezonesets/. -#extra_float_digits = 0 # min -15, max 3 -#client_encoding = sql_ascii # actually, defaults to database - # encoding - -# These settings are initialized by initdb, but they can be changed. -#lc_messages = 'C' # locale for system error message - # strings -#lc_monetary = 'C' # locale for monetary formatting -#lc_numeric = 'C' # locale for number formatting -#lc_time = 'C' # locale for time formatting - -# default configuration for text search -#default_text_search_config = 'pg_catalog.simple' - -# - Other Defaults - - -#dynamic_library_path = '$libdir' -#local_preload_libraries = '' -#session_preload_libraries = '' - - -#------------------------------------------------------------------------------ -# LOCK MANAGEMENT -#------------------------------------------------------------------------------ - -#deadlock_timeout = 1s -#max_locks_per_transaction = 64 # min 10 - # (change requires restart) -#max_pred_locks_per_transaction = 64 # min 10 - # (change requires restart) -#max_pred_locks_per_relation = -2 # negative values mean - # (max_pred_locks_per_transaction - # / -max_pred_locks_per_relation) - 1 -#max_pred_locks_per_page = 2 # min 0 - - -#------------------------------------------------------------------------------ -# VERSION/PLATFORM COMPATIBILITY -#------------------------------------------------------------------------------ - -# - Previous PostgreSQL Versions - - -#array_nulls = on -#backslash_quote = safe_encoding # on, off, or safe_encoding -#default_with_oids = off -#escape_string_warning = on -#lo_compat_privileges = off -#operator_precedence_warning = off -#quote_all_identifiers = off -#standard_conforming_strings = on -#synchronize_seqscans = on - -# - Other Platforms and Clients - - -#transform_null_equals = off - - -#------------------------------------------------------------------------------ -# ERROR HANDLING -#------------------------------------------------------------------------------ - -#exit_on_error = off # terminate session on any error? -#restart_after_crash = on # reinitialize after backend crash? - - -#------------------------------------------------------------------------------ -# CONFIG FILE INCLUDES -#------------------------------------------------------------------------------ - -# These options allow settings to be loaded from files other than the -# default postgresql.conf. - -#include_dir = 'conf.d' # include files ending in '.conf' from - # directory 'conf.d' -#include_if_exists = 'exists.conf' # include file only if it exists -#include = 'special.conf' # include file - - -#------------------------------------------------------------------------------ -# CUSTOMIZED OPTIONS -#------------------------------------------------------------------------------ - -# Add settings for extensions here From 2e61f77c5509df29775b4ab3b448a9e92ce2a412 Mon Sep 17 00:00:00 2001 From: Michael Parker Date: Fri, 10 Jun 2022 15:09:30 -0400 Subject: [PATCH 40/43] update curseforge egg to use new api New api requires updates. tested with mod id 253026 --- .../curseforge-generic/egg-curseforge-generic.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json b/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json index 8cb53d171..66706ae4e 100644 --- a/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json +++ b/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2022-01-24T02:52:47+01:00", + "exported_at": "2022-06-10T15:03:34-04:00", "name": "Curseforge Generic", "author": "parker@parkervcp.com", "description": "A generic egg for a forge modpack", @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Forge 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\n\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq unzip dos2unix\r\n}\r\n\r\nfunction get_download {\r\n # get json data to work with\r\n echo -e \"Curling the json for the modpack\"\r\n echo -e \"running: curl -sSL https:\/\/addons-ecs.forgesvc.net\/api\/v2\/addon\/${MODPACK_ID}\"\r\n JSON_DATA=$(curl -sSL https:\/\/addons-ecs.forgesvc.net\/api\/v2\/addon\/${MODPACK_ID})\r\n\r\n # if no modpack version is set or is set to latest\r\n if [ -z ${MODPACK_VERSION} ] || [ \"${MODPACK_VERSION}\" = \"latest\" ]; then\r\n echo -e \"Getting latest download url\"\r\n # parse data to get the download url\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r .defaultFileId)\r\n echo -e \"File ID is: ${FILE_ID}\"\r\n if [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".latestFiles[] | select(.id==$FILE_ID) | .isServerPack\")\" == \"false\" ] && [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\" != \"null\" ]; then\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\r\n DOWNLOAD_URL=$(curl -sSL https:\/\/addons-ecs.forgesvc.net\/api\/v2\/addon\/${MODPACK_ID}\/file\/${FILE_ID}\/download-url)\r\n else\r\n DOWNLOAD_URL=$(curl -sSL https:\/\/addons-ecs.forgesvc.net\/api\/v2\/addon\/${MODPACK_ID}\/file\/${FILE_ID}\/download-url)\r\n fi\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n else\r\n echo -e \"Looking for download url for version ${MODPACK_VERSION}\"\r\n # parse files for version match\r\n FILES_JSON_DATA=$(curl -sSL https:\/\/addons-ecs.forgesvc.net\/api\/v2\/addon\/${MODPACK_ID}\/files)\r\n # get element number to get the exact location in the json\r\n FILES_JSON_ELEMENT=$(echo -e ${FILES_JSON_DATA} | jq --arg VERSION \"${MODPACK_VERSION}\" '.[] | select(.displayName) | .displayName | contains($VERSION)' | grep -n true | cut -f1 -d: | tail -1)\r\n # if there wasn't a match default to latest\r\n if [ ! -z ${FILES_JSON_ELEMENT} ]; then\r\n echo -e \"No matching version found\"\r\n echo -e \"defaulting to latest\"\r\n DOWNLOAD_URL=$(echo -e ${FILES_JSON_DATA} | jq --arg ELEMENT \"${FILES_JSON_ELEMENT}\" '.[$ELEMENT|tonumber-1] | .downloadUrl')\r\n else\r\n echo -e \"Version match found\"\r\n DOWNLOAD_URL=$(echo -e ${JSON_DATA} | jq -r .latestFiles[0].downloadUrl)\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n fi\r\n fi\r\n ## download modpack files\r\n cd \/mnt\/server\r\n echo \"Executing curl -L ${DOWNLOAD_URL} -o server.zip\"\r\n curl -L -g \"${DOWNLOAD_URL}\" -o server.zip\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction forge_install {\r\n echo -e \"\\nInstalling forge server using the installer jar file.\\n\"\r\n if [ -f \/mnt\/server\/*installer.jar ]; then\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n else\r\n echo \"No forge installer found moving on.\"\r\n fi\r\n mv FTBServer.jar server.jar\r\n}\r\n\r\nfunction forge_cleanup {\r\n echo -e \"\\nDeleting installer jar file and cleaning up.\\n\"\r\n rm -rf *installer.jar\r\n if [ ! -f \/mnt\/server\/*universal.jar ]; then\r\n mv -v \/mnt\/server\/*\/* \/mnt\/server\/\r\n if [ ! -f \/mnt\/server\/*universal.jar ]; then\r\n mv forge*.jar server.jar\r\n else\r\n mv *universal.jar server.jar \r\n fi\r\n else\r\n mv *universal.jar server.jar\r\n fi\r\n}\r\n\r\nfunction json_download_prework {\r\n mkdir -p \/mnt\/server\/mods\r\n cd \/mnt\/server\/mods\r\n}\r\n\r\nfunction json_download_mods {\r\n MANIFEST=\/mnt\/server\/manifest.json\r\n for mod in $(jq -c '.files[]' ${MANIFEST} ); do\r\n projID=$(echo $mod | jq -r \".projectID\")\r\n fileID=$(echo $mod | jq -r \".fileID\")\r\n URL=$(curl -sSL https:\/\/addons-ecs.forgesvc.net\/api\/v2\/addon\/${projID}\/file\/${fileID}\/download-url)\r\n # this is saving everything as \/mnt\/server\/mods\/download\r\n echo \"Mod direct url: ${URL}\"\r\n curl -JLO \"${URL}\"\r\n done\r\n}\r\n\r\nfunction json_download_forge {\r\n cd \/mnt\/server\r\n FORGE=$(jq -r '.minecraft.modLoaders[0].id' \/mnt\/server\/manifest.json | cut -d '-' -f2)\r\n MCVER=$(jq -r '.minecraft.version' \/mnt\/server\/manifest.json)\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n \r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\"\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-installer.jar -o installer.jar\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction json_download_overrides {\r\n if [ -d \/mnt\/server\/overrides ]; then\r\n mv \/mnt\/server\/overrides\/mods\/* \/mnt\/server\/mods\/\r\n rmdir \/mnt\/server\/overrides\/mods\r\n mv \/mnt\/server\/overrides\/* \/mnt\/server\r\n rmdir \/mnt\/server\/overrides\r\n fi\r\n}\r\n\r\nfunction cfg_download_forge {\r\n dos2unix settings.cfg # In case the pack was distributed with Windows-style line endings in the cfg file\r\n MCVER=`grep 'MCVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n FORGE=`grep 'FORGEVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n \r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n echo -e ${FORGE_VERSION}\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n \r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\"\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-installer.jar -o installer.jar\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction ftb_install {\r\n chmod +x \/mnt\/server\/settings.sh \r\n . \/mnt\/server\/settings.sh \r\n curl https:\/\/s3.amazonaws.com\/Minecraft.Download\/versions\/${MCVER}\/minecraft_server.${MCVER}.jar -o ${JARFILE} \r\n curl https:\/\/libraries.minecraft.net\/${LAUNCHWRAPPER} -o \/mnt\/server\/libraries\/${LAUNCHWRAPPER}\r\n}\r\n\r\ninstall_required\r\nget_download\r\n\r\nif [ -f \/mnt\/server\/manifest.json ]; then\r\n json_download_prework\r\n json_download_mods\r\n json_download_overrides\r\n json_download_forge\r\nelif [ -f \/mnt\/server\/settings.cfg ]; then\r\n cfg_download_forge\r\nelif [ -f \/mnt\/server\/version.json ]; then\r\n if [ \"$(cat \/mnt\/server\/version.json | jq -r '.packID | contains(\"FTB\")')\" == \"true\" ]; then\r\n ftb_install\r\n fi\r\nelse\r\n forge_install\r\n forge_cleanup\r\nfi\r\necho -e \"\\n\\nInstall completed succesfully, enjoy!\"", + "script": "#!\/bin\/bash\r\n# Forge 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\n\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq unzip dos2unix\r\n}\r\n\r\nfunction get_download {\r\n # get json data to work with\r\n echo -e \"Curling the json for the modpack\"\r\n echo -e \"running: curl -sSLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H 'x-api-key: API_KEY'\"\r\n JSON_DATA=$(curl -ssLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\")\r\n\r\n # if no modpack version is set or is set to latest\r\n if [ -z ${MODPACK_VERSION} ] || [ \"${MODPACK_VERSION}\" = \"latest\" ]; then\r\n echo -e \"Getting latest download url\"\r\n # parse data to get the download url\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r \".data.mainFileId\")\r\n echo -e \"File ID is: ${FILE_ID}\"\r\n if [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .isServerPack\")\" == \"false\" ] && [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\" != \"null\" ]; then\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n else\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n fi\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n else\r\n echo -e \"Looking for download url for version ${MODPACK_VERSION}\"\r\n # parse files for version match\r\n FILES_JSON_DATA=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files)\r\n # get element number to get the exact location in the json\r\n FILES_JSON_ELEMENT=$(echo -e ${FILES_JSON_DATA} | jq --arg VERSION \"${MODPACK_VERSION}\" '.[] | select(.displayName) | .displayName | contains($VERSION)' | grep -n true | cut -f1 -d: | tail -1)\r\n # if there wasn't a match default to latest\r\n if [ ! -z ${FILES_JSON_ELEMENT} ]; then\r\n echo -e \"No matching version found\"\r\n echo -e \"defaulting to latest\"\r\n DOWNLOAD_URL=$(echo -e ${FILES_JSON_DATA} | jq --arg ELEMENT \"${FILES_JSON_ELEMENT}\" '.[$ELEMENT|tonumber-1] | .downloadUrl')\r\n else\r\n echo -e \"Version match found\"\r\n DOWNLOAD_URL=$(echo -e ${JSON_DATA} | jq -r .latestFiles[0].downloadUrl)\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n fi\r\n fi\r\n ## download modpack files\r\n cd \/mnt\/server\r\n echo \"Executing curl -L ${DOWNLOAD_URL} -o server.zip\"\r\n curl -L -g \"${DOWNLOAD_URL}\" -o server.zip\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction forge_install {\r\n echo -e \"\\nInstalling forge server using the installer jar file.\\n\"\r\n if [ -f \/mnt\/server\/*installer.jar ]; then\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n else\r\n echo \"No forge installer found moving on.\"\r\n fi\r\n mv FTBServer.jar server.jar\r\n}\r\n\r\nfunction forge_cleanup {\r\n echo -e \"\\nDeleting installer jar file and cleaning up.\\n\"\r\n rm -rf *installer.jar\r\n if [ ! -f \/mnt\/server\/*universal.jar ]; then\r\n mv -v \/mnt\/server\/*\/* \/mnt\/server\/\r\n if [ ! -f \/mnt\/server\/*universal.jar ]; then\r\n mv forge*.jar server.jar\r\n else\r\n mv *universal.jar server.jar \r\n fi\r\n else\r\n mv forge*universal.jar server.jar\r\n fi\r\n}\r\n\r\nfunction json_download_prework {\r\n mkdir -p \/mnt\/server\/mods\r\n cd \/mnt\/server\/mods\r\n}\r\n\r\nfunction json_download_mods {\r\n MANIFEST=\/mnt\/server\/manifest.json\r\n for mod in $(jq -c '.files[]' ${MANIFEST} ); do\r\n projID=$(echo $mod | jq -r \".projectID\")\r\n fileID=$(echo $mod | jq -r \".fileID\")\r\n URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${projID}\/files\/${fileID}\/download-url jq -r \".data\")\r\n # this is saving everything as \/mnt\/server\/mods\/download\r\n echo \"Mod direct url: ${URL}\"\r\n curl -JLO \"${URL}\"\r\n done\r\n}\r\n\r\nfunction json_download_forge {\r\n cd \/mnt\/server\r\n FORGE=$(jq -r '.minecraft.modLoaders[0].id' \/mnt\/server\/manifest.json | cut -d '-' -f2)\r\n MCVER=$(jq -r '.minecraft.version' \/mnt\/server\/manifest.json)\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n \r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\"\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-installer.jar -o installer.jar\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction json_download_overrides {\r\n if [ -d \/mnt\/server\/overrides ]; then\r\n mv \/mnt\/server\/overrides\/mods\/* \/mnt\/server\/mods\/\r\n rmdir \/mnt\/server\/overrides\/mods\r\n mv \/mnt\/server\/overrides\/* \/mnt\/server\r\n rmdir \/mnt\/server\/overrides\r\n fi\r\n}\r\n\r\nfunction cfg_download_forge {\r\n dos2unix settings.cfg # In case the pack was distributed with Windows-style line endings in the cfg file\r\n MCVER=`grep 'MCVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n FORGE=`grep 'FORGEVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n \r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n echo -e ${FORGE_VERSION}\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n PARSED_LINK=$(echo -e \"$FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\" | sed 's\/ \/\/g')\r\n\r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $PARSED_LINK\"\r\n curl -sSL $PARSED_LINK-installer.jar -o installer.jar\r\n curl -sSL $PARSED_LINK-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction ftb_install {\r\n chmod +x \/mnt\/server\/settings.sh \r\n . \/mnt\/server\/settings.sh \r\n curl https:\/\/s3.amazonaws.com\/Minecraft.Download\/versions\/${MCVER}\/minecraft_server.${MCVER}.jar -o ${JARFILE} \r\n curl https:\/\/libraries.minecraft.net\/${LAUNCHWRAPPER} -o \/mnt\/server\/libraries\/${LAUNCHWRAPPER}\r\n}\r\n\r\ninstall_required\r\nget_download\r\n\r\nif [ -f \/mnt\/server\/manifest.json ]; then\r\n json_download_prework\r\n json_download_mods\r\n json_download_overrides\r\n json_download_forge\r\nelif [ -f \/mnt\/server\/settings.cfg ]; then\r\n cfg_download_forge\r\nelif [ -f \/mnt\/server\/version.json ]; then\r\n if [ \"$(cat \/mnt\/server\/version.json | jq -r '.packID | contains(\"FTB\")')\" == \"true\" ]; then\r\n ftb_install\r\n fi\r\nelse\r\n forge_install\r\n forge_cleanup\r\nfi\r\n\r\necho -e \"\\n\\nInstall completed succesfully, enjoy!\"", "container": "openjdk:8-jdk-slim", "entrypoint": "bash" } @@ -52,6 +52,15 @@ "user_viewable": true, "user_editable": true, "rules": "required|string|max:20" + }, + { + "name": "API Key", + "description": "This is a new requirement and will be needed to pull mods packs\r\n\r\nYou need and account to generate an api-key here\r\nhttps:\/\/console.curseforge.com\/#\/api-keys", + "env_variable": "API_KEY", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" } ] } \ No newline at end of file From 7f07ffb8b2f7fda20a2aa8360359d3f2379cf1d9 Mon Sep 17 00:00:00 2001 From: Michael Parker Date: Fri, 10 Jun 2022 15:13:28 -0400 Subject: [PATCH 41/43] Update README --- game_eggs/minecraft/java/forge/curseforge-generic/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/game_eggs/minecraft/java/forge/curseforge-generic/README.md b/game_eggs/minecraft/java/forge/curseforge-generic/README.md index 31a4eb0ea..defb1f5de 100644 --- a/game_eggs/minecraft/java/forge/curseforge-generic/README.md +++ b/game_eggs/minecraft/java/forge/curseforge-generic/README.md @@ -9,6 +9,12 @@ This will grab the latest release when the version is set to latest. It "should" grab versions of the pack based on the modpack version numbers +## API Kays + +You will need to get an API key to run the installer now. Make an account at https://console.curseforge.com/ + +https://console.curseforge.com/#/api-keys + ## Server Ports The minecraft server requires a single port for access (default 25565) but plugins may require extra ports to enabled for the server. From 14f8b288180a60ac3c235e739b0a5f076b6ca900 Mon Sep 17 00:00:00 2001 From: Michael Parker Date: Fri, 10 Jun 2022 15:55:11 -0400 Subject: [PATCH 42/43] Fix server jar issue fixes an issue renaming the server jar properly --- .../java/forge/curseforge-generic/egg-curseforge-generic.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json b/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json index 66706ae4e..8b9255afb 100644 --- a/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json +++ b/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2022-06-10T15:03:34-04:00", + "exported_at": "2022-06-10T15:54:18-04:00", "name": "Curseforge Generic", "author": "parker@parkervcp.com", "description": "A generic egg for a forge modpack", @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Forge 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\n\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq unzip dos2unix\r\n}\r\n\r\nfunction get_download {\r\n # get json data to work with\r\n echo -e \"Curling the json for the modpack\"\r\n echo -e \"running: curl -sSLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H 'x-api-key: API_KEY'\"\r\n JSON_DATA=$(curl -ssLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\")\r\n\r\n # if no modpack version is set or is set to latest\r\n if [ -z ${MODPACK_VERSION} ] || [ \"${MODPACK_VERSION}\" = \"latest\" ]; then\r\n echo -e \"Getting latest download url\"\r\n # parse data to get the download url\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r \".data.mainFileId\")\r\n echo -e \"File ID is: ${FILE_ID}\"\r\n if [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .isServerPack\")\" == \"false\" ] && [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\" != \"null\" ]; then\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n else\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n fi\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n else\r\n echo -e \"Looking for download url for version ${MODPACK_VERSION}\"\r\n # parse files for version match\r\n FILES_JSON_DATA=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files)\r\n # get element number to get the exact location in the json\r\n FILES_JSON_ELEMENT=$(echo -e ${FILES_JSON_DATA} | jq --arg VERSION \"${MODPACK_VERSION}\" '.[] | select(.displayName) | .displayName | contains($VERSION)' | grep -n true | cut -f1 -d: | tail -1)\r\n # if there wasn't a match default to latest\r\n if [ ! -z ${FILES_JSON_ELEMENT} ]; then\r\n echo -e \"No matching version found\"\r\n echo -e \"defaulting to latest\"\r\n DOWNLOAD_URL=$(echo -e ${FILES_JSON_DATA} | jq --arg ELEMENT \"${FILES_JSON_ELEMENT}\" '.[$ELEMENT|tonumber-1] | .downloadUrl')\r\n else\r\n echo -e \"Version match found\"\r\n DOWNLOAD_URL=$(echo -e ${JSON_DATA} | jq -r .latestFiles[0].downloadUrl)\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n fi\r\n fi\r\n ## download modpack files\r\n cd \/mnt\/server\r\n echo \"Executing curl -L ${DOWNLOAD_URL} -o server.zip\"\r\n curl -L -g \"${DOWNLOAD_URL}\" -o server.zip\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction forge_install {\r\n echo -e \"\\nInstalling forge server using the installer jar file.\\n\"\r\n if [ -f \/mnt\/server\/*installer.jar ]; then\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n else\r\n echo \"No forge installer found moving on.\"\r\n fi\r\n mv FTBServer.jar server.jar\r\n}\r\n\r\nfunction forge_cleanup {\r\n echo -e \"\\nDeleting installer jar file and cleaning up.\\n\"\r\n rm -rf *installer.jar\r\n if [ ! -f \/mnt\/server\/*universal.jar ]; then\r\n mv -v \/mnt\/server\/*\/* \/mnt\/server\/\r\n if [ ! -f \/mnt\/server\/*universal.jar ]; then\r\n mv forge*.jar server.jar\r\n else\r\n mv *universal.jar server.jar \r\n fi\r\n else\r\n mv forge*universal.jar server.jar\r\n fi\r\n}\r\n\r\nfunction json_download_prework {\r\n mkdir -p \/mnt\/server\/mods\r\n cd \/mnt\/server\/mods\r\n}\r\n\r\nfunction json_download_mods {\r\n MANIFEST=\/mnt\/server\/manifest.json\r\n for mod in $(jq -c '.files[]' ${MANIFEST} ); do\r\n projID=$(echo $mod | jq -r \".projectID\")\r\n fileID=$(echo $mod | jq -r \".fileID\")\r\n URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${projID}\/files\/${fileID}\/download-url jq -r \".data\")\r\n # this is saving everything as \/mnt\/server\/mods\/download\r\n echo \"Mod direct url: ${URL}\"\r\n curl -JLO \"${URL}\"\r\n done\r\n}\r\n\r\nfunction json_download_forge {\r\n cd \/mnt\/server\r\n FORGE=$(jq -r '.minecraft.modLoaders[0].id' \/mnt\/server\/manifest.json | cut -d '-' -f2)\r\n MCVER=$(jq -r '.minecraft.version' \/mnt\/server\/manifest.json)\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n \r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\"\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-installer.jar -o installer.jar\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction json_download_overrides {\r\n if [ -d \/mnt\/server\/overrides ]; then\r\n mv \/mnt\/server\/overrides\/mods\/* \/mnt\/server\/mods\/\r\n rmdir \/mnt\/server\/overrides\/mods\r\n mv \/mnt\/server\/overrides\/* \/mnt\/server\r\n rmdir \/mnt\/server\/overrides\r\n fi\r\n}\r\n\r\nfunction cfg_download_forge {\r\n dos2unix settings.cfg # In case the pack was distributed with Windows-style line endings in the cfg file\r\n MCVER=`grep 'MCVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n FORGE=`grep 'FORGEVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n \r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n echo -e ${FORGE_VERSION}\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n PARSED_LINK=$(echo -e \"$FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\" | sed 's\/ \/\/g')\r\n\r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $PARSED_LINK\"\r\n curl -sSL $PARSED_LINK-installer.jar -o installer.jar\r\n curl -sSL $PARSED_LINK-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction ftb_install {\r\n chmod +x \/mnt\/server\/settings.sh \r\n . \/mnt\/server\/settings.sh \r\n curl https:\/\/s3.amazonaws.com\/Minecraft.Download\/versions\/${MCVER}\/minecraft_server.${MCVER}.jar -o ${JARFILE} \r\n curl https:\/\/libraries.minecraft.net\/${LAUNCHWRAPPER} -o \/mnt\/server\/libraries\/${LAUNCHWRAPPER}\r\n}\r\n\r\ninstall_required\r\nget_download\r\n\r\nif [ -f \/mnt\/server\/manifest.json ]; then\r\n json_download_prework\r\n json_download_mods\r\n json_download_overrides\r\n json_download_forge\r\nelif [ -f \/mnt\/server\/settings.cfg ]; then\r\n cfg_download_forge\r\nelif [ -f \/mnt\/server\/version.json ]; then\r\n if [ \"$(cat \/mnt\/server\/version.json | jq -r '.packID | contains(\"FTB\")')\" == \"true\" ]; then\r\n ftb_install\r\n fi\r\nelse\r\n forge_install\r\n forge_cleanup\r\nfi\r\n\r\necho -e \"\\n\\nInstall completed succesfully, enjoy!\"", + "script": "#!\/bin\/bash\r\n# Forge 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\n\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq unzip dos2unix\r\n}\r\n\r\nfunction get_download {\r\n # get json data to work with\r\n echo -e \"Curling the json for the modpack\"\r\n echo -e \"running: curl -sSLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H 'x-api-key: API_KEY'\"\r\n JSON_DATA=$(curl -ssLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\")\r\n\r\n # if no modpack version is set or is set to latest\r\n if [ -z ${MODPACK_VERSION} ] || [ \"${MODPACK_VERSION}\" = \"latest\" ]; then\r\n echo -e \"Getting latest download url\"\r\n # parse data to get the download url\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r \".data.mainFileId\")\r\n echo -e \"File ID is: ${FILE_ID}\"\r\n if [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .isServerPack\")\" == \"false\" ] && [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\" != \"null\" ]; then\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n else\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n fi\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n else\r\n echo -e \"Looking for download url for version ${MODPACK_VERSION}\"\r\n # parse files for version match\r\n FILES_JSON_DATA=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files)\r\n # get element number to get the exact location in the json\r\n FILES_JSON_ELEMENT=$(echo -e ${FILES_JSON_DATA} | jq --arg VERSION \"${MODPACK_VERSION}\" '.[] | select(.displayName) | .displayName | contains($VERSION)' | grep -n true | cut -f1 -d: | tail -1)\r\n # if there wasn't a match default to latest\r\n if [ ! -z ${FILES_JSON_ELEMENT} ]; then\r\n echo -e \"No matching version found\"\r\n echo -e \"defaulting to latest\"\r\n DOWNLOAD_URL=$(echo -e ${FILES_JSON_DATA} | jq --arg ELEMENT \"${FILES_JSON_ELEMENT}\" '.[$ELEMENT|tonumber-1] | .downloadUrl')\r\n else\r\n echo -e \"Version match found\"\r\n DOWNLOAD_URL=$(echo -e ${JSON_DATA} | jq -r .latestFiles[0].downloadUrl)\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n fi\r\n fi\r\n ## download modpack files\r\n cd \/mnt\/server\r\n echo \"Executing curl -L ${DOWNLOAD_URL} -o server.zip\"\r\n curl -L -g \"${DOWNLOAD_URL}\" -o server.zip\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction forge_install {\r\n echo -e \"\\nInstalling forge server using the installer jar file.\\n\"\r\n if [ -f \/mnt\/server\/*installer.jar ]; then\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n else\r\n echo \"No forge installer found moving on.\"\r\n fi\r\n mv FTBServer.jar server.jar\r\n}\r\n\r\nfunction forge_cleanup {\r\n echo -e \"\\nDeleting installer jar file and cleaning up.\\n\"\r\n rm -rf *installer.jar\r\n if [ ! -f \/mnt\/server\/forge*universal.jar ]; then\r\n mv -v \/mnt\/server\/*\/* \/mnt\/server\/\r\n if [ ! -f \/mnt\/server\/*universal.jar ]; then\r\n mv forge*.jar server.jar\r\n else\r\n mv forge*universal.jar server.jar \r\n fi\r\n else\r\n mv forge*universal.jar server.jar\r\n fi\r\n}\r\n\r\nfunction json_download_prework {\r\n mkdir -p \/mnt\/server\/mods\r\n cd \/mnt\/server\/mods\r\n}\r\n\r\nfunction json_download_mods {\r\n MANIFEST=\/mnt\/server\/manifest.json\r\n for mod in $(jq -c '.files[]' ${MANIFEST} ); do\r\n projID=$(echo $mod | jq -r \".projectID\")\r\n fileID=$(echo $mod | jq -r \".fileID\")\r\n URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${projID}\/files\/${fileID}\/download-url jq -r \".data\")\r\n # this is saving everything as \/mnt\/server\/mods\/download\r\n echo \"Mod direct url: ${URL}\"\r\n curl -JLO \"${URL}\"\r\n done\r\n}\r\n\r\nfunction json_download_forge {\r\n cd \/mnt\/server\r\n FORGE=$(jq -r '.minecraft.modLoaders[0].id' \/mnt\/server\/manifest.json | cut -d '-' -f2)\r\n MCVER=$(jq -r '.minecraft.version' \/mnt\/server\/manifest.json)\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n \r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\"\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-installer.jar -o installer.jar\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction json_download_overrides {\r\n if [ -d \/mnt\/server\/overrides ]; then\r\n mv \/mnt\/server\/overrides\/mods\/* \/mnt\/server\/mods\/\r\n rmdir \/mnt\/server\/overrides\/mods\r\n mv \/mnt\/server\/overrides\/* \/mnt\/server\r\n rmdir \/mnt\/server\/overrides\r\n fi\r\n}\r\n\r\nfunction cfg_download_forge {\r\n dos2unix settings.cfg # In case the pack was distributed with Windows-style line endings in the cfg file\r\n MCVER=`grep 'MCVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n FORGE=`grep 'FORGEVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n \r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n echo -e ${FORGE_VERSION}\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n PARSED_LINK=$(echo -e \"$FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\" | sed 's\/ \/\/g')\r\n\r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $PARSED_LINK\"\r\n curl -sSL $PARSED_LINK-installer.jar -o installer.jar\r\n curl -sSL $PARSED_LINK-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction ftb_install {\r\n chmod +x \/mnt\/server\/settings.sh \r\n . \/mnt\/server\/settings.sh \r\n curl https:\/\/s3.amazonaws.com\/Minecraft.Download\/versions\/${MCVER}\/minecraft_server.${MCVER}.jar -o ${JARFILE} \r\n curl https:\/\/libraries.minecraft.net\/${LAUNCHWRAPPER} -o \/mnt\/server\/libraries\/${LAUNCHWRAPPER}\r\n}\r\n\r\ninstall_required\r\nget_download\r\n\r\nif [ -f \/mnt\/server\/manifest.json ]; then\r\n json_download_prework\r\n json_download_mods\r\n json_download_overrides\r\n json_download_forge\r\nelif [ -f \/mnt\/server\/settings.cfg ]; then\r\n cfg_download_forge\r\nelif [ -f \/mnt\/server\/version.json ]; then\r\n if [ \"$(cat \/mnt\/server\/version.json | jq -r '.packID | contains(\"FTB\")')\" == \"true\" ]; then\r\n ftb_install\r\n fi\r\nelse\r\n forge_install\r\n forge_cleanup\r\nfi\r\n\r\necho -e \"\\n\\nInstall completed succesfully, enjoy!\"", "container": "openjdk:8-jdk-slim", "entrypoint": "bash" } From 6db071c6886ee03163ee6903b9367c12549f0dee Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 12 Jun 2022 02:45:29 +0300 Subject: [PATCH 43/43] docs: fix typo in forge readme --- game_eggs/minecraft/java/forge/curseforge-generic/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_eggs/minecraft/java/forge/curseforge-generic/README.md b/game_eggs/minecraft/java/forge/curseforge-generic/README.md index defb1f5de..6dbb3c441 100644 --- a/game_eggs/minecraft/java/forge/curseforge-generic/README.md +++ b/game_eggs/minecraft/java/forge/curseforge-generic/README.md @@ -9,7 +9,7 @@ This will grab the latest release when the version is set to latest. It "should" grab versions of the pack based on the modpack version numbers -## API Kays +## API Keys You will need to get an API key to run the installer now. Make an account at https://console.curseforge.com/