Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ It’s set in infinitely-generated worlds of wide open terrain - icy mountains,

## [Java](java) Servers for Java Minecraft

* [Arclight](java/arclight)
* [Cuberite](java/cuberite)
* [CurseForge](java/curseforge)
* [Fabric](java/fabric)
Expand Down
15 changes: 15 additions & 0 deletions java/arclight/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Arclight 🚀

## This is a generic egg for the Arclight server software.

Arclight is a specialized Minecraft server implementation that allows you to run both Bukkit/Spigot plugins and modloader mods (Forge, NeoForge, or Fabric) simultaneously.

The egg supports downloading Arclight for the latest or a specified Minecraft version, as well as downloading a specific Arclight version and choosing your preferred modloader backend.

## Server Ports

The Minecraft server requires a single port for access (default 25565), but plugins or specific mods may require extra ports to be enabled for the server.

| Port | Default |
|------------|---------|
| Minecraft | 25565 |
100 changes: 100 additions & 0 deletions java/arclight/egg-arclight.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
{
"_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL",
"meta": {
"version": "PLCN_v3",
"update_url": null
},
"exported_at": "2026-06-18T00:00:00+00:00",
"name": "Arclight",
"author": "you@example.com",
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"description": "Arclight is a hybrid Minecraft server that combines Bukkit/Spigot plugin support with Forge, NeoForge, or Fabric mod support in a single server, powered by Mixin. Run plugins and mods side by side.",
"tags": [
"minecraft"
],
"features": [
"eula",
"java_version",
"pid_limit"
],
"docker_images": {
"Java 17": "ghcr.io/pelican-eggs/yolks:java_17",
"Java 21": "ghcr.io/pelican-eggs/yolks:java_21",
"Java 25": "ghcr.io/pelican-eggs/yolks:java_25"
},
"file_denylist": [],
"startup_commands": {
"Default": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}} nogui"
},
"config": {
"files": "{\n \"server.properties\": {\n \"parser\": \"properties\",\n \"find\": {\n \"server-ip\": \"0.0.0.0\",\n \"server-port\": \"{{server.allocations.default.port}}\",\n \"query.port\": \"{{server.allocations.default.port}}\"\n }\n }\n}",
"startup": "{\n \"done\": \")! For help, type \"\n}",
"logs": "{}",
"stop": "stop"
},
"scripts": {
"installation": {
"script": "#!/bin/bash\n# Arclight Installation Script for Pelican Panel\n#\n# Server Files: /mnt/server\n\napt-get update -y\napt-get install -y curl jq\n\nif [[ ! -d /mnt/server ]]; then\n mkdir -p /mnt/server\nfi\n\ncd /mnt/server\n\n# Trim whitespace from variables\nARCLIGHT_LOADER=\"$(echo \"${ARCLIGHT_LOADER}\" | tr -d ' ' | tr '[:upper:]' '[:lower:]')\"\nMC_VERSION=\"$(echo \"${MC_VERSION}\" | tr -d ' ')\"\nARCLIGHT_VERSION=\"$(echo \"${ARCLIGHT_VERSION}\" | tr -d ' ')\"\n\n# Validate loader\nif [[ \"${ARCLIGHT_LOADER}\" != \"neoforge\" && \"${ARCLIGHT_LOADER}\" != \"forge\" && \"${ARCLIGHT_LOADER}\" != \"fabric\" ]]; then\n echo \"ERROR: Invalid loader '${ARCLIGHT_LOADER}'. Must be one of: neoforge, forge, fabric\"\n exit 1\nfi\n\necho \"=====================================\"\necho \" Arclight Installer\"\necho \" Loader : ${ARCLIGHT_LOADER}\"\necho \" MC Ver : ${MC_VERSION}\"\necho \" AL Ver : ${ARCLIGHT_VERSION:-latest}\"\necho \"=====================================\"\n\nGITHUB_API=\"https://api.github.com/repos/IzzelAliz/Arclight\"\n\n# Fetch releases from GitHub API\necho \"Fetching releases from GitHub...\"\nif [[ -n \"${GITHUB_TOKEN}\" ]]; then\n RELEASES=$(curl -s -H \"Authorization: token ${GITHUB_TOKEN}\" \"${GITHUB_API}/releases\")\nelse\n RELEASES=$(curl -s \"${GITHUB_API}/releases\")\nfi\n\nif [[ -z \"${RELEASES}\" || \"${RELEASES}\" == \"null\" ]]; then\n echo \"ERROR: Could not fetch releases from GitHub API.\"\n exit 1\nfi\n\n# If a specific Arclight version is set, find that exact release tag\nif [[ -n \"${ARCLIGHT_VERSION}\" && \"${ARCLIGHT_VERSION}\" != \"latest\" ]]; then\n echo \"Looking for specific Arclight release: ${ARCLIGHT_VERSION}\"\n # Try exact tag match (e.g. \"FeudalKings/1.0.1\" or just \"1.0.1\")\n RELEASE=$(echo \"${RELEASES}\" | jq --arg ver \"${ARCLIGHT_VERSION}\" \\\n '[.[] | select(.tag_name | test($ver; \"i\"))] | first')\nelse\n echo \"Using the latest stable (non-prerelease) release...\"\n RELEASE=$(echo \"${RELEASES}\" | jq '[.[] | select(.prerelease == false)] | first')\n # If no stable found, fall back to the very latest\n if [[ \"$(echo \"${RELEASE}\" | jq -r '.tag_name')\" == \"null\" ]]; then\n echo \"No stable release found, falling back to latest release.\"\n RELEASE=$(echo \"${RELEASES}\" | jq 'first')\n fi\nfi\n\nRELEASE_TAG=$(echo \"${RELEASE}\" | jq -r '.tag_name')\nif [[ -z \"${RELEASE_TAG}\" || \"${RELEASE_TAG}\" == \"null\" ]]; then\n echo \"ERROR: No matching release found.\"\n exit 1\nfi\n\necho \"Using release: ${RELEASE_TAG}\"\n\n# List assets for this release\nASSETS=$(echo \"${RELEASE}\" | jq -r '.assets[] | .name + \"|||\" + .browser_download_url')\n\nif [[ -z \"${ASSETS}\" ]]; then\n echo \"ERROR: No assets found for release ${RELEASE_TAG}.\"\n exit 1\nfi\n\necho \"Available assets:\"\necho \"${ASSETS}\" | while IFS='|||' read -r name url; do echo \" - ${name}\"; done\n\n# Find the asset matching our loader (and optionally MC version)\n# Asset naming pattern: arclight-{loader}-{mc_version}-{arclight_version}-{commit}.jar\nif [[ -n \"${MC_VERSION}\" && \"${MC_VERSION}\" != \"latest\" ]]; then\n MATCH=$(echo \"${ASSETS}\" | grep -i \"arclight-${ARCLIGHT_LOADER}-${MC_VERSION}-\" | head -n 1)\nelse\n MATCH=$(echo \"${ASSETS}\" | grep -i \"arclight-${ARCLIGHT_LOADER}-\" | head -n 1)\nfi\n\nif [[ -z \"${MATCH}\" ]]; then\n echo \"ERROR: No asset found for loader '${ARCLIGHT_LOADER}' and MC version '${MC_VERSION}' in release ${RELEASE_TAG}.\"\n echo \"Available assets for this release:\"\n echo \"${ASSETS}\" | cut -d'|' -f1\n exit 1\nfi\n\nASSET_NAME=$(echo \"${MATCH}\" | cut -d'|' -f1)\nDOWNLOAD_URL=$(echo \"${MATCH}\" | cut -d'|' -f4)\n\necho \"\"\necho \"Downloading: ${ASSET_NAME}\"\necho \"From: ${DOWNLOAD_URL}\"\n\n# Back up existing jar if present\nif [[ -f \"${SERVER_JARFILE}\" ]]; then\n echo \"Backing up existing ${SERVER_JARFILE}...\"\n mv \"${SERVER_JARFILE}\" \"${SERVER_JARFILE}.bak\"\nfi\n\n# Download the jar\ncurl -L --fail --silent --show-error -o \"${SERVER_JARFILE}\" \"${DOWNLOAD_URL}\"\n\nif [[ $? -ne 0 || ! -f \"${SERVER_JARFILE}\" ]]; then\n echo \"ERROR: Download failed. Restoring backup if available.\"\n [[ -f \"${SERVER_JARFILE}.bak\" ]] && mv \"${SERVER_JARFILE}.bak\" \"${SERVER_JARFILE}\"\n exit 1\nfi\n\nFILE_SIZE=$(du -sh \"${SERVER_JARFILE}\" | cut -f1)\necho \"\"\necho \"=====================================\"\necho \" Installation complete!\"\necho \" File : ${SERVER_JARFILE} (${FILE_SIZE})\"\necho \" Release: ${RELEASE_TAG}\"\necho \" Asset : ${ASSET_NAME}\"\necho \"=====================================\"\necho \"Start the server to finish setup (EULA acceptance will be prompted).\"\n",
"container": "ghcr.io/pelican-eggs/installers:debian",
"entrypoint": "bash"
}
},
"variables": [
{
"sort": 1,
"name": "Server Jar File",
"description": "The filename for the downloaded Arclight jar. Change this only if you know what you are doing.",
"env_variable": "SERVER_JARFILE",
"default_value": "arclight.jar",
"user_viewable": true,
"user_editable": false,
"rules": [
"required",
"string",
"max:30"
]
},
{
"sort": 2,
"name": "Mod Loader",
"description": "The mod loader to use: neoforge, forge, or fabric.\n\nNote: As of Minecraft 1.21, only NeoForge and Fabric are available. Forge support for 1.21+ is not guaranteed.",
"env_variable": "ARCLIGHT_LOADER",
"default_value": "neoforge",
"user_viewable": true,
"user_editable": true,
"rules": [
"required",
"string",
"in:neoforge,forge,fabric"
]
},
{
"sort": 3,
"name": "Minecraft Version",
"description": "The Minecraft version to install (e.g. 1.21.1, 1.20.1).\n\nLeave blank or set to 'latest' to automatically pick the most recent release from GitHub.",
"env_variable": "MC_VERSION",
"default_value": "latest",
"user_viewable": true,
"user_editable": true,
"rules": [
"nullable",
"string",
"max:10"
]
},
{
"sort": 4,
"name": "Arclight Version / Release Tag",
"description": "Specific Arclight release tag to install (e.g. 1.0.1 or FeudalKings/1.0.1).\n\nLeave blank or set to 'latest' to automatically use the newest stable GitHub release.",
"env_variable": "ARCLIGHT_VERSION",
"default_value": "latest",
"user_viewable": true,
"user_editable": true,
"rules": [
"nullable",
"string",
"max:30"
]
}
]
}
93 changes: 93 additions & 0 deletions java/arclight/egg-pterodactyl-neo-forge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
{
"_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO",
"meta": {
"version": "PTDL_v2",
"update_url": null
},
"exported_at": "2026-04-26T20:16:38+02:00",
"name": "Arclight",
"author": "chredeur@pastanetwork.com",
"description": "A Bukkit server implementation on common mod loaders.",
"features": [
"eula",
"java_version",
"pid_limit"
],
"docker_images": {
"Java 8": "ghcr.io\/ptero-eggs\/yolks:java_8",
"Java 11": "ghcr.io\/ptero-eggs\/yolks:java_11",
"Java 16": "ghcr.io\/ptero-eggs\/yolks:java_16",
"Java 17": "ghcr.io\/ptero-eggs\/yolks:java_17",
"Java 19": "ghcr.io\/ptero-eggs\/yolks:java_19",
"Java 21": "ghcr.io\/ptero-eggs\/yolks:java_21",
"Java 22": "ghcr.io\/ptero-eggs\/yolks:java_22",
"Java 25": "ghcr.io\/ptero-eggs\/yolks:java_25"
},
"file_denylist": [],
"startup": "java -Xms128M -XX:MaxRAMPercentage=95.0 -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}} nogui",
"config": {
"files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-ip\": \"0.0.0.0\",\r\n \"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# Arclight Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nBASE_API_URL=\"https:\/\/files.hypoglycemia.icu\/v1\/files\/arclight\"\r\n\r\nif [ -n \"${DOWNLOAD_URL}\" ]; then\r\n echo \"Using custom download URL: ${DOWNLOAD_URL}\"\r\nelse\r\n echo \"Fetching available Minecraft versions for Arclight...\"\r\n ARCLIGHT_VERSION=$(curl -s \"${BASE_API_URL}\/minecraft\" | jq -r '.files[].name' | sort -Vr)\r\n if [ -z \"$ARCLIGHT_VERSION\" ] || [ \"$ARCLIGHT_VERSION\" == \"null\" ]; then\r\n echo \"Error: Could not fetch version list from API.\"\r\n exit 1\r\n fi\r\n if [ \"$MINECRAFT_VERSION\" == \"auto\" ]; then\r\n MINECRAFT_VERSION=$(echo \"$ARCLIGHT_VERSION\" | head -n 1)\r\n echo \"Auto-selected Minecraft version: ${MINECRAFT_VERSION}\"\r\n else\r\n VERSION_EXISTS=$(echo \"$ARCLIGHT_VERSION\" | grep -Fx \"$MINECRAFT_VERSION\")\r\n if [ -z \"$VERSION_EXISTS\" ]; then\r\n echo \"Warning: Specified version '${MINECRAFT_VERSION}' not found. Falling back to the latest available version.\"\r\n MINECRAFT_VERSION=$(echo \"$ARCLIGHT_VERSION\" | head -n 1)\r\n echo \"Fallback version: ${MINECRAFT_VERSION}\"\r\n fi\r\n fi\r\n\r\n echo \"Fetching available loaders for version ${MINECRAFT_VERSION}...\"\r\n LOADER_LIST=$(curl -s \"${BASE_API_URL}\/minecraft\/${MINECRAFT_VERSION}\/loaders\" | jq -r '.files[].name')\r\n if [ -z \"$LOADER_LIST\" ] || [ \"$LOADER_LIST\" == \"null\" ]; then\r\n echo \"Error: Could not fetch loader list from API.\"\r\n exit 1\r\n fi\r\n LOADER_EXISTS=$(echo \"$LOADER_LIST\" | grep -Fx \"$ARCLIGHT_LOADER\")\r\n if [ -z \"$LOADER_EXISTS\" ]; then\r\n echo \"Warning: Specified loader '${ARCLIGHT_LOADER}' not found for version ${MINECRAFT_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n echo \"Fetching available channels for version ${MINECRAFT_VERSION} and loader ${ARCLIGHT_LOADER}...\"\r\n CHANNEL_LIST=$(curl -s \"${BASE_API_URL}\/minecraft\/${MINECRAFT_VERSION}\/loaders\/${ARCLIGHT_LOADER}\")\r\n CHANNEL_LIST_NAME=$(echo \"$CHANNEL_LIST\" | jq -r '.files[].name')\r\n if [ \"$ARCLIGHT_CHANNEL\" == \"auto\" ]; then\r\n echo \"Selecting preferred channel for loader ${ARCLIGHT_LOADER} ${MINECRAFT_VERSION}...\"\r\n ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -E 'latest-stable|version-stable|latest-snapshot|version-snapshot' | \\\r\n grep -x 'latest-stable' || \\\r\n echo \"$CHANNEL_LIST_NAME\" | grep -x 'version-stable' || \\\r\n echo \"$CHANNEL_LIST_NAME\" | grep -x 'latest-snapshot' || \\\r\n echo \"$CHANNEL_LIST_NAME\" | grep -x 'version-snapshot' | head -n 1)\r\n \r\n if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\r\n echo \"No preferred channel found. Falling back to last in list.\"\r\n ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | tail -n 1)\r\n fi\r\n\r\n CHANNEL_TYPE=$(echo \"$CHANNEL_LIST\" | jq -r \".files[] | select(.name==\\\"${ARCLIGHT_CHANNEL}\\\") | .type\")\r\n echo \"Auto-selected channel: ${ARCLIGHT_CHANNEL}\"\r\n else\r\n if [ \"$ARCLIGHT_CHANNEL\" == \"beta\" ]; then\r\n CHANNELS=(\"latest-snapshot\" \"versions-snapshot\")\r\n elif [ \"$ARCLIGHT_CHANNEL\" == \"stable\" ]; then\r\n CHANNELS=(\"latest-stable\" \"versions-stable\")\r\n fi\r\n \r\n for CHANNEL in \"${CHANNELS[@]}\"; do\r\n if echo \"$CHANNEL_LIST_NAME\" | grep -q \"$CHANNEL\"; then\r\n ARCLIGHT_CHANNEL=\"$CHANNEL\"\r\n break\r\n fi\r\n done\r\n \r\n if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\r\n echo \"Warning: Specified channel '${ARCLIGHT_CHANNEL}' not found for loader ${ARCLIGHT_LOADER} and Minecraft version ${MINECRAFT_VERSION}. Falling back to default channel.\"\r\n \r\n ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -E 'latest-stable|version-stable|latest-snapshot|version-snapshot' | \\\r\n grep -x 'latest-stable' || \\\r\n echo \"$CHANNEL_LIST_NAME\" | grep -x 'version-stable' || \\\r\n echo \"$CHANNEL_LIST_NAME\" | grep -x 'latest-snapshot' || \\\r\n echo \"$CHANNEL_LIST_NAME\" | grep -x 'version-snapshot' | head -n 1)\r\n \r\n if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\r\n ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | tail -n 1)\r\n fi\r\n \r\n echo \"Fallback channel: ${ARCLIGHT_CHANNEL}\"\r\n fi\r\n\r\n CHANNEL_TYPE=$(echo \"$CHANNEL_LIST\" | jq -r \".files[] | select(.name==\\\"${ARCLIGHT_CHANNEL}\\\") | .type\")\r\n fi\r\n\r\n echo \"Fetching builds for ${ARCLIGHT_LOADER}-${MINECRAFT_VERSION}-${ARCLIGHT_CHANNEL}...\"\r\n if [ -z \"$CHANNEL_TYPE\" ] || [ \"$CHANNEL_TYPE\" == \"null\" ] || [ \"$CHANNEL_TYPE\" == \"link\" ]; then\r\n BUILD_NAME=${ARCLIGHT_CHANNEL}\r\n DOWNLOAD_URL=\"${BASE_API_URL}\/minecraft\/${MINECRAFT_VERSION}\/loaders\/${ARCLIGHT_LOADER}\/${ARCLIGHT_CHANNEL}\"\r\n elif [ \"$CHANNEL_TYPE\" == \"directory\" ]; then\r\n BUILD=$(curl -s \"${BASE_API_URL}\/minecraft\/${MINECRAFT_VERSION}\/loaders\/${ARCLIGHT_LOADER}\/${ARCLIGHT_CHANNEL}\" | jq -r '.files[0]')\r\n BUILD_NAME=$(echo \"${BUILD}\" | jq -r '.name')\r\n DOWNLOAD_URL=\"${BASE_API_URL}\/minecraft\/${MINECRAFT_VERSION}\/loaders\/${ARCLIGHT_LOADER}\/${ARCLIGHT_CHANNEL}\/${BUILD_NAME}\"\r\n else\r\n echo \"Error: Unknown channel type. Exiting.\"\r\n exit 1\r\n fi\r\n\r\n\r\n echo \"Selected build: ${BUILD_NAME}\"\r\nfi\r\n\r\necho \"Downloading Arclight from: ${DOWNLOAD_URL}\"\r\n\r\nif [ -f \"${SERVER_JARFILE}\" ]; then\r\n echo \"Backing up existing server jar...\"\r\n mv \"${SERVER_JARFILE}\" \"${SERVER_JARFILE}.old\"\r\nfi\r\n\r\ncurl -s -L -o \"${SERVER_JARFILE}\" \"${DOWNLOAD_URL}\"\r\n\r\nif [ $? -ne 0 ]; then\r\n echo \"Download failed. Please check the URL or your internet connection.\"\r\n exit 1\r\nfi\r\n\r\necho \"Download complete. File saved as ${SERVER_JARFILE}\"",
"container": "ghcr.io\/ptero-eggs\/installers:debian",
"entrypoint": "bash"
}
},
"variables": [
{
"name": "Server Jar File",
"description": "Name of the server JAR file that will be created (e.g. server.jar).",
"env_variable": "SERVER_JARFILE",
"default_value": "server.jar",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:20",
"field_type": "text"
},
{
"name": "Minecraft Version",
"description": "The version of Minecraft to download.",
"env_variable": "MINECRAFT_VERSION",
"default_value": "auto",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:20",
"field_type": "text"
},
{
"name": "Download Path",
"description": "Optional custom download URL. Leave empty to use the Arclight API.",
"env_variable": "DOWNLOAD_URL",
"default_value": "",
"user_viewable": false,
"user_editable": false,
"rules": "nullable|string",
"field_type": "text"
},
{
"name": "Arclight Channel",
"description": "Select the Arclight build channel (e.g. stable, beta). Use 'auto' to use the most recent one.",
"env_variable": "ARCLIGHT_CHANNEL",
"default_value": "auto",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|in:stable,beta,auto",
"field_type": "text"
},
{
"name": "Arclight Loader",
"description": "Select the mod loader you want to use (forge, neoforge, fabric).",
"env_variable": "ARCLIGHT_LOADER",
"default_value": "forge",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|in:forge,neoforge,fabric",
"field_type": "text"
}
]
}