{
  "meta": {
    "version": "PTDL_v2",
    "update_url": null
  },
  "exported_at": "2026-08-14T17:36:04+00:00",
  "name": "Arclight",
  "author": "chredeur@pastanetwork.com",
  "description": "Implementación de servidor Bukkit sobre cargadores de mods comunes.",
  "features": [
    "eula",
    "java_version",
    "pid_limit"
  ],
  "container_version_map": [
    {
      "version": "auto",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_21"
    },
    {
      "version": "1.21.1",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_21"
    },
    {
      "version": "1.21",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_21"
    },
    {
      "version": "1.20.4",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_17"
    },
    {
      "version": "1.20.2",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_17"
    },
    {
      "version": "1.20.1",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_17"
    },
    {
      "version": "1.20",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_17"
    },
    {
      "version": "1.19.4",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_17"
    },
    {
      "version": "1.19.2",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_17"
    },
    {
      "version": "1.18.2",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_17"
    },
    {
      "version": "1.17.1",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_16"
    },
    {
      "version": "1.16.5",
      "docker_image": "ghcr.io/ptero-eggs/yolks:java_8"
    }
  ],
  "file_denylist": [],
  "startup": "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.build.default.port}}\"\n        }\n    }\n}",
    "startup": "{\"done\":\")! For help, type\"}",
    "logs": "{}",
    "stop": "stop"
  },
  "scripts": {
    "installation": {
      "script": "#!/bin/bash\n# Arclight Installation Script\n# Server Files: /mnt/server\n\nset -euo pipefail\n\ncd /mnt/server\n\nBASE_API_URL=\"https://files.hypoglycemia.icu/v1/files/arclight\"\n\nif [ -n \"${DOWNLOAD_URL}\" ]; then\n  echo \"Using custom download URL: ${DOWNLOAD_URL}\"\nelse\n  echo \"Fetching available Minecraft versions for Arclight...\"\n  ARCLIGHT_VERSION=$(curl -s \"${BASE_API_URL}/minecraft\" | jq -r '.files[].name' | sort -Vr)\n  if [ -z \"$ARCLIGHT_VERSION\" ] || [ \"$ARCLIGHT_VERSION\" == \"null\" ]; then\n    echo \"Error: Could not fetch version list from API.\"\n    exit 1\n  fi\n\n  if [ \"$MINECRAFT_VERSION\" == \"auto\" ]; then\n    MINECRAFT_VERSION=$(echo \"$ARCLIGHT_VERSION\" | head -n 1)\n    echo \"Auto-selected Minecraft version: ${MINECRAFT_VERSION}\"\n  else\n    VERSION_EXISTS=$(echo \"$ARCLIGHT_VERSION\" | grep -Fx \"$MINECRAFT_VERSION\" || true)\n    if [ -z \"$VERSION_EXISTS\" ]; then\n      echo \"Warning: Specified version '${MINECRAFT_VERSION}' not found. Falling back to latest available version.\"\n      MINECRAFT_VERSION=$(echo \"$ARCLIGHT_VERSION\" | head -n 1)\n      echo \"Fallback version: ${MINECRAFT_VERSION}\"\n    fi\n  fi\n\n  echo \"Fetching available loaders for version ${MINECRAFT_VERSION}...\"\n  LOADER_LIST=$(curl -s \"${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders\" | jq -r '.files[].name')\n  if [ -z \"$LOADER_LIST\" ] || [ \"$LOADER_LIST\" == \"null\" ]; then\n    echo \"Error: Could not fetch loader list from API.\"\n    exit 1\n  fi\n\n  LOADER_EXISTS=$(echo \"$LOADER_LIST\" | grep -Fx \"$ARCLIGHT_LOADER\" || true)\n  if [ -z \"$LOADER_EXISTS\" ]; then\n    echo \"Warning: Specified loader '${ARCLIGHT_LOADER}' not found for version ${MINECRAFT_VERSION}\"\n    exit 1\n  fi\n\n  echo \"Fetching available channels for version ${MINECRAFT_VERSION} and loader ${ARCLIGHT_LOADER}...\"\n  CHANNEL_LIST=$(curl -s \"${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders/${ARCLIGHT_LOADER}\")\n  CHANNEL_LIST_NAME=$(echo \"$CHANNEL_LIST\" | jq -r '.files[].name')\n\n  if [ \"$ARCLIGHT_CHANNEL\" == \"auto\" ]; then\n    echo \"Selecting preferred channel for loader ${ARCLIGHT_LOADER} ${MINECRAFT_VERSION}...\"\n    ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -E 'latest-stable|version-stable|latest-snapshot|version-snapshot' | grep -x 'latest-stable' || true)\n    if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\n      ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -x 'version-stable' || true)\n    fi\n    if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\n      ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -x 'latest-snapshot' || true)\n    fi\n    if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\n      ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -x 'version-snapshot' | head -n 1 || true)\n    fi\n\n    if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\n      echo \"No preferred channel found. Falling back to last in list.\"\n      ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | tail -n 1)\n    fi\n\n    CHANNEL_TYPE=$(echo \"$CHANNEL_LIST\" | jq -r \".files[] | select(.name==\\\"${ARCLIGHT_CHANNEL}\\\") | .type\")\n    echo \"Auto-selected channel: ${ARCLIGHT_CHANNEL}\"\n  else\n    CHANNELS=()\n    if [ \"$ARCLIGHT_CHANNEL\" == \"beta\" ]; then\n      CHANNELS=(\"latest-snapshot\" \"versions-snapshot\")\n    elif [ \"$ARCLIGHT_CHANNEL\" == \"stable\" ]; then\n      CHANNELS=(\"latest-stable\" \"versions-stable\")\n    fi\n\n    for CHANNEL in \"${CHANNELS[@]}\"; do\n      if echo \"$CHANNEL_LIST_NAME\" | grep -q \"$CHANNEL\"; then\n        ARCLIGHT_CHANNEL=\"$CHANNEL\"\n        break\n      fi\n    done\n\n    if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\n      echo \"Warning: specified channel was not found. Falling back to default channel.\"\n      ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -E 'latest-stable|version-stable|latest-snapshot|version-snapshot' | grep -x 'latest-stable' || true)\n      if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\n        ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -x 'version-stable' || true)\n      fi\n      if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\n        ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -x 'latest-snapshot' || true)\n      fi\n      if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\n        ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | grep -x 'version-snapshot' | head -n 1 || true)\n      fi\n      if [ -z \"$ARCLIGHT_CHANNEL\" ]; then\n        ARCLIGHT_CHANNEL=$(echo \"$CHANNEL_LIST_NAME\" | tail -n 1)\n      fi\n      echo \"Fallback channel: ${ARCLIGHT_CHANNEL}\"\n    fi\n\n    CHANNEL_TYPE=$(echo \"$CHANNEL_LIST\" | jq -r \".files[] | select(.name==\\\"${ARCLIGHT_CHANNEL}\\\") | .type\")\n  fi\n\n  echo \"Fetching builds for ${ARCLIGHT_LOADER}-${MINECRAFT_VERSION}-${ARCLIGHT_CHANNEL}...\"\n  if [ -z \"$CHANNEL_TYPE\" ] || [ \"$CHANNEL_TYPE\" == \"null\" ] || [ \"$CHANNEL_TYPE\" == \"link\" ]; then\n    BUILD_NAME=${ARCLIGHT_CHANNEL}\n    DOWNLOAD_URL=\"${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders/${ARCLIGHT_LOADER}/${ARCLIGHT_CHANNEL}\"\n  elif [ \"$CHANNEL_TYPE\" == \"directory\" ]; then\n    BUILD=$(curl -s \"${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders/${ARCLIGHT_LOADER}/${ARCLIGHT_CHANNEL}\" | jq -r '.files[0]')\n    BUILD_NAME=$(echo \"${BUILD}\" | jq -r '.name')\n    DOWNLOAD_URL=\"${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders/${ARCLIGHT_LOADER}/${ARCLIGHT_CHANNEL}/${BUILD_NAME}\"\n  else\n    echo \"Error: unknown channel type. Exiting.\"\n    exit 1\n  fi\n\n  echo \"Selected build: ${BUILD_NAME}\"\nfi\n\necho \"Downloading Arclight from: ${DOWNLOAD_URL}\"\n\nif [ -f \"${SERVER_JARFILE}\" ]; then\n  echo \"Backing up existing server jar...\"\n  mv \"${SERVER_JARFILE}\" \"${SERVER_JARFILE}.old\"\nfi\n\ncurl -sSL -o \"${SERVER_JARFILE}\" \"${DOWNLOAD_URL}\"\n\nif [ $? -ne 0 ]; then\n  echo \"Download failed. Please check the URL or your internet connection.\"\n  exit 1\nfi\n\necho \"Download complete. File saved as ${SERVER_JARFILE}\"\n",
      "container": "ghcr.io/ptero-eggs/installers:debian",
      "entrypoint": "bash"
    }
  },
  "variables": [
    {
      "name": "Server Jar File",
      "description": "Nombre del archivo JAR del servidor que se creará (por ejemplo, server.jar).",
      "env_variable": "SERVER_JARFILE",
      "default_value": "server.jar",
      "user_viewable": true,
      "user_editable": true,
      "rules": "required|string|max:20",
      "field_type": "text",
      "source": "user"
    },
    {
      "name": "Minecraft Version",
      "description": "Versión de Minecraft que se descargará para Arclight.",
      "env_variable": "MINECRAFT_VERSION",
      "default_value": "auto",
      "user_viewable": true,
      "user_editable": true,
      "rules": "required|string|in:auto,1.21.1,1.21,1.20.4,1.20.2,1.20.1,1.20,1.19.4,1.19.2,1.18.2,1.17.1,1.16.5",
      "field_type": "select",
      "source": "user",
      "defines_version": true
    },
    {
      "name": "Download Path",
      "description": "URL de descarga personalizada opcional. Déjala vacía para usar la API de Arclight.",
      "env_variable": "DOWNLOAD_URL",
      "default_value": "",
      "user_viewable": false,
      "user_editable": false,
      "rules": "nullable|string",
      "field_type": "text",
      "source": "user"
    },
    {
      "name": "Arclight Channel",
      "description": "Selecciona el canal de compilación de Arclight (por ejemplo, stable o beta). Usa auto para elegir el más reciente.",
      "env_variable": "ARCLIGHT_CHANNEL",
      "default_value": "auto",
      "user_viewable": true,
      "user_editable": true,
      "rules": "required|string|in:stable,beta,auto",
      "field_type": "select",
      "source": "user"
    },
    {
      "name": "Arclight Loader",
      "description": "Selecciona el cargador de mods que quieres usar (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": "select",
      "source": "user"
    }
  ]
}
