{
  "meta": {
    "version": "PTDL_v2",
    "update_url": null
  },
  "exported_at": "2026-08-19T16:57:41+00:00",
  "name": "CurseForge",
  "author": "contact@chromozone.dev",
  "description": "Egg generico para modpacks de CurseForge.",
  "features": [
    "eula",
    "java_version",
    "pid_limit"
  ],
  "container_version_map": [
    {
      "version": "latest",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.11",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.10",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.9",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.8",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.7",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.6",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.5",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.4",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.3",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.21",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.20.6",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.20.5",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
    },
    {
      "version": "1.20.4",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.20.3",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.20.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.20.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.20",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.19.4",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.19.3",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.19.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.19.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.19",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.18.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.18.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.18",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_17"
    },
    {
      "version": "1.17.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_16"
    },
    {
      "version": "1.17",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_16"
    },
    {
      "version": "1.16.5",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.16.4",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.16.3",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.16.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.16.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.16",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.15.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.15.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.15",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.14.4",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.14.3",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.14.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.14.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.14",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.13.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.13.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.13",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.12.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.12.1",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.12",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.11.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.10.2",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.9.4",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.8.9",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.8.8",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    },
    {
      "version": "1.7.10",
      "docker_image": "ghcr.io/pterodactyl/yolks:java_8"
    }
  ],
  "file_denylist": [],
  "startup": "java $([ -f user_jvm_args.txt ] && printf %s \"@user_jvm_args.txt\") -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true $([ ! -f unix_args.txt ] && printf %s \"-jar `cat .serverjar`\" || printf %s \"@unix_args.txt\")",
  "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            \"query.port\": \"{{server.build.default.port}}\"\n        }\n    }\n}",
    "startup": "{\"done\":\")! For help, type\"}",
    "logs": "{}",
    "stop": "stop"
  },
  "scripts": {
    "installation": {
      "script": "#!/bin/bash\n\nset -euo pipefail\n\nsource /usr/local/lib/egg-utils.sh\negg_init\n\n: \"${PROJECT_ID:=}\"\n: \"${VERSION_ID:=}\"\n: \"${API_KEY:=}\"\n\nCURSEFORGE_API_URL=\"https://api.curseforge.com/v1/mods/\"\nCURSEFORGE_API_HEADERS=(\"--header=Accept: application/json\" \"--header=x-api-key: ${API_KEY}\")\n\nget_download() {\n  egg_info \"Retrieving CurseForge project information...\"\n  local PROJECT_DATA\n  PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\n  local PROJECT_TITLE\n  PROJECT_TITLE=$(echo \"${PROJECT_DATA}\" | jq -r '.data.name // empty')\n\n  if [[ -z \"${PROJECT_DATA}\" ]]; then\n    egg_error \"Failed to retrieve project data for '${PROJECT_ID}'\"\n  fi\n\n  local IS_SERVER_PACK=false\n\n  if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\n    VERSION_ID=$(echo \"${PROJECT_DATA}\" | jq -r '.data.mainFileId // empty')\n    if [[ \"${VERSION_ID}\" == \"null\" ]]; then VERSION_ID=\"\"; fi\n\n    local VERSION_SERVER_PACK\n    VERSION_SERVER_PACK=\"$(echo \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[]? | select(.id|tostring==$VERSION_ID) | select(.isServerPack != null) | .isServerPack')\"\n    local VERSION_SERVER_ID\n    VERSION_SERVER_ID=\"$(echo \"${PROJECT_DATA}\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.data.latestFiles[]? | select(.id|tostring==$VERSION_ID) | select(.serverPackFileId != null) | .serverPackFileId')\"\n\n    [[ \"${VERSION_SERVER_ID}\" == \"null\" ]] && VERSION_SERVER_ID=\"\"\n    [[ \"${VERSION_SERVER_PACK}\" == \"null\" ]] && VERSION_SERVER_PACK=\"\"\n\n    if [[ \"${VERSION_SERVER_PACK}\" == \"false\" && -n \"${VERSION_SERVER_ID}\" ]]; then\n      VERSION_ID=\"${VERSION_SERVER_ID}\"\n      IS_SERVER_PACK=true\n    elif [[ \"${VERSION_SERVER_PACK}\" == \"true\" ]]; then\n      IS_SERVER_PACK=true\n    fi\n  else\n    local FILE_DATA\n    FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}/files/${VERSION_ID}\" -O -)\n    if [[ -z \"${FILE_DATA}\" ]]; then\n      egg_error \"File id '${VERSION_ID}' not found for '${PROJECT_TITLE}'\"\n    fi\n\n    IS_SERVER_PACK=$(echo \"${FILE_DATA}\" | jq -r '.data.isServerPack // \"false\"')\n    [[ \"${IS_SERVER_PACK}\" == \"null\" ]] && IS_SERVER_PACK=\"false\"\n\n    if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\n      local VERSION_SERVER_PACK\n      VERSION_SERVER_PACK=\"$(echo \"${FILE_DATA}\" | jq -r '.data.serverPackFileId // empty')\"\n      [[ \"${VERSION_SERVER_PACK}\" == \"null\" ]] && VERSION_SERVER_PACK=\"\"\n      if [[ -n \"${VERSION_SERVER_PACK}\" ]]; then\n        VERSION_ID=\"${VERSION_SERVER_PACK}\"\n        IS_SERVER_PACK=true\n      fi\n    else\n      IS_SERVER_PACK=true\n    fi\n  fi\n\n  if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"null\" ]]; then\n    egg_error \"No file id found for '${PROJECT_TITLE}'\"\n  fi\n\n  if [[ \"${IS_SERVER_PACK}\" == \"false\" ]]; then\n    egg_warn \"File id '${VERSION_ID}' is not a server pack, using client files\"\n  fi\n\n  local JSON_DATA\n  JSON_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}/files/${VERSION_ID}/download-url\" -O -)\n  if [[ -z \"${JSON_DATA}\" ]]; then\n    egg_error \"Failed to retrieve download URL for '${VERSION_ID}'\"\n  fi\n\n  local DOWNLOAD_URL\n  DOWNLOAD_URL=$(echo \"${JSON_DATA}\" | jq -r '.data // empty')\n  [[ \"${DOWNLOAD_URL}\" == \"null\" ]] && DOWNLOAD_URL=\"\"\n  if [[ -z \"${DOWNLOAD_URL}\" ]]; then\n    egg_error \"No download URL for file ${VERSION_ID}\"\n  fi\n\n  egg_download \"${DOWNLOAD_URL}\" \"server.zip\"\n}\n\nget_loader() {\n  egg_info \"Retrieving loader information...\"\n\n  if [[ -f server.zip ]] && unzip -l server.zip manifest.json > /dev/null 2>&1; then\n    unzip -jo server.zip manifest.json -d \"${SERVER_DIR}\"\n    mv \"${SERVER_DIR}/manifest.json\" \"${SERVER_DIR}/client.manifest.json\"\n  else\n    local PROJECT_DATA\n    PROJECT_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}\" -O -)\n    if [[ -z \"${PROJECT_DATA}\" ]]; then\n      egg_error \"Failed to retrieve project data for '${PROJECT_ID}'\"\n    fi\n\n    local FILE_DATA\n    FILE_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}/files/${VERSION_ID}\" -O -)\n    if [[ -z \"${FILE_DATA}\" ]]; then\n      egg_error \"File id '${VERSION_ID}' not found\"\n    fi\n\n    local IS_SERVER_PACK\n    IS_SERVER_PACK=$(echo \"${FILE_DATA}\" | jq -r '.data.isServerPack // \"false\"')\n    [[ \"${IS_SERVER_PACK}\" == \"null\" ]] && IS_SERVER_PACK=\"false\"\n    local CLIENT_VERSION_ID\n\n    if [[ \"${IS_SERVER_PACK}\" == \"true\" ]]; then\n      CLIENT_VERSION_ID=\"$(echo \"${FILE_DATA}\" | jq -r '.data.parentProjectFileId // empty')\"\n      [[ \"${CLIENT_VERSION_ID}\" == \"null\" ]] && CLIENT_VERSION_ID=\"\"\n    else\n      CLIENT_VERSION_ID=\"${VERSION_ID}\"\n    fi\n\n    if [[ -z \"${CLIENT_VERSION_ID}\" || \"${CLIENT_VERSION_ID}\" == \"null\" ]]; then\n      egg_error \"File id '${VERSION_ID}' not found\"\n    fi\n\n    local JSON_DATA\n    JSON_DATA=$(wget -q \"${CURSEFORGE_API_HEADERS[@]}\" \"${CURSEFORGE_API_URL}${PROJECT_ID}/files/${CLIENT_VERSION_ID}/download-url\" -O -)\n    local DOWNLOAD_URL\n    DOWNLOAD_URL=$(echo \"${JSON_DATA}\" | jq -r '.data // empty')\n    [[ \"${DOWNLOAD_URL}\" == \"null\" ]] && DOWNLOAD_URL=\"\"\n    if [[ -z \"${DOWNLOAD_URL}\" ]]; then\n      egg_error \"No download URL for file ${CLIENT_VERSION_ID}\"\n    fi\n\n    egg_download \"${DOWNLOAD_URL}\" \"client.zip\"\n\n    unzip -jo client.zip manifest.json -d \"${SERVER_DIR}\"\n    mv \"${SERVER_DIR}/manifest.json\" \"${SERVER_DIR}/client.manifest.json\"\n    rm -rf client.zip\n  fi\n\n  local MANIFEST=\"${SERVER_DIR}/client.manifest.json\"\n  LOADER_ID=$(jq -r '.minecraft.modLoaders[]? | select(.primary == true) | .id' \"${MANIFEST}\")\n  LOADER_NAME=$(echo \"${LOADER_ID}\" | cut -d'-' -f1)\n  LOADER_VERSION=$(echo \"${LOADER_ID}\" | cut -d'-' -f2)\n\n  if [[ -z \"${LOADER_NAME}\" || -z \"${LOADER_VERSION}\" ]]; then\n    egg_error \"No loader found in client manifest\"\n  fi\n\n  MINECRAFT_VERSION=$(jq -r '.minecraft.version // empty' \"${MANIFEST}\")\n  if [[ -z \"${MINECRAFT_VERSION}\" ]]; then\n    egg_error \"No Minecraft version found in client manifest\"\n  fi\n\n  egg_info \"Loader: ${LOADER_NAME} ${LOADER_VERSION} | MC: ${MINECRAFT_VERSION}\"\n}\n\nunzip-strip() (\n  set -u\n  local archive=$1\n  local destdir=${2:-}\n  shift; shift || :\n\n  local tmpdir=/mnt/server/tmp\n  mkdir -p \"${tmpdir}\"\n  trap 'rm -rf -- \"$tmpdir\"' EXIT\n\n  unzip -q \"$archive\" -d \"$tmpdir\"\n  shopt -s dotglob\n\n  local files=(\"$tmpdir\"/*) name i=1\n  if (( ${#files[@]} == 1 )) && [[ -d \"${files[0]}\" ]]; then\n    name=$(basename \"${files[0]}\")\n    files=(\"$tmpdir\"/*/*)\n  else\n    name=$(basename \"$archive\"); name=${archive%.*}\n    files=(\"$tmpdir\"/*)\n  fi\n\n  if [[ -z \"$destdir\" ]]; then\n    destdir=./\"$name\"\n  fi\n  while [[ -f \"$destdir\" ]]; do\n    destdir=${destdir}-$((i++));\n  done\n\n  mkdir -p \"$destdir\"\n  cp -ar \"$@\" -t \"$destdir\" -- \"${files[@]}\"\n  rm -rf \"$tmpdir\"\n)\n\nunpack_zip() {\n  egg_info \"Unpacking server files...\"\n  unzip-strip server.zip \"${SERVER_DIR}\"\n  rm -rf server.zip\n}\n\njson_download_mods() {\n  egg_info \"Downloading mods...\"\n  mkdir -p \"${SERVER_DIR}/mods\"\n  local MANIFEST=\"${SERVER_DIR}/manifest.json\"\n  local TOTAL_MODS\n  TOTAL_MODS=$(jq '.files[]? | select(.required == true) | length' \"${MANIFEST}\" | wc -l)\n  local CURRENT_MOD=0\n  jq -c '.files[]? | select(.required == true) | {project: .projectID, file: .fileID}' \"${MANIFEST}\" | while read -r mod; do\n    CURRENT_MOD=$((CURRENT_MOD + 1))\n    local MOD_PROJECT_ID\n    MOD_PROJECT_ID=$(echo \"${mod}\" | jq -r '.project // empty')\n    local MOD_FILE_ID\n    MOD_FILE_ID=$(echo \"${mod}\" | jq -r '.file // empty')\n\n    if [[ -z \"${MOD_PROJECT_ID}\" || -z \"${MOD_FILE_ID}\" ]]; then\n      egg_warn \"Failed to parse project/file id for mod, skipping\"\n      continue\n    fi\n\n    local FILE_URL\n    FILE_URL=$(curl -fsSL --connect-timeout 30 --max-time 30 \"${CURSEFORGE_API_URL}${MOD_PROJECT_ID}/files/${MOD_FILE_ID}/download-url\" -H \"Accept: application/json\" -H \"x-api-key: ${API_KEY}\" | jq -r '.data // empty') || {\n      egg_warn \"Failed to get download URL for mod ${MOD_PROJECT_ID}/${MOD_FILE_ID}, skipping\"\n      continue\n    }\n\n    if [[ -z \"${FILE_URL}\" ]]; then\n      egg_warn \"No download URL for mod ${MOD_PROJECT_ID}/${MOD_FILE_ID}, skipping\"\n      continue\n    fi\n\n    egg_download \"${FILE_URL}\" \"${SERVER_DIR}/mods/mod_${MOD_PROJECT_ID}_${MOD_FILE_ID}.jar\"\n  done\n}\n\njson_download_forge() {\n  local MC_VERSION=\"${MINECRAFT_VERSION}\"\n  local FORGE_VERSION=\"${LOADER_VERSION}\"\n\n  FORGE_VERSION=\"${MC_VERSION}-${FORGE_VERSION}\"\n  if [[ \"${MC_VERSION}\" == \"1.7.10\" || \"${MC_VERSION}\" == \"1.8.9\" ]]; then\n    FORGE_VERSION=\"${FORGE_VERSION}-${MC_VERSION}\"\n  fi\n\n  local FORGE_JAR=\"forge-${FORGE_VERSION}.jar\"\n  if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\n    FORGE_JAR=\"forge-${FORGE_VERSION}-universal.jar\"\n  fi\n\n  local FORGE_URL=\"https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}\"\n\n  egg_info \"Forge ${FORGE_VERSION} for MC ${MC_VERSION}\"\n\n  local FORGE_INSTALLER=\"${FORGE_URL}-installer.jar\"\n\n  if ! wget -q -O forge-installer.jar \"${FORGE_INSTALLER}\"; then\n    egg_error \"Failed to download Forge installer ${FORGE_VERSION}\"\n  fi\n\n  rm -rf libraries/net/minecraftforge/forge/\n  rm -f unix_args.txt\n\n  java -Xmx512M \\\n    -Dsun.net.client.defaultConnectTimeout=10000 \\\n    -Dsun.net.client.defaultReadTimeout=30000 \\\n    -Djava.net.preferIPv4Stack=true \\\n    -jar forge-installer.jar --installServer || egg_error \"Forge installation failed\"\n\n  if forge_1_17_or_later \"${MC_VERSION}\" || forge_1_17_or_later \"${FORGE_VERSION}\"; then\n    ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt\n  else\n    local target_jar=\"\"\n    if [[ -f \"${FORGE_JAR}\" ]]; then\n      target_jar=\"${FORGE_JAR}\"\n    elif [[ -f \"${FORGE_JAR%.jar}-universal.jar\" ]]; then\n      target_jar=\"${FORGE_JAR%.jar}-universal.jar\"\n    else\n      target_jar=$(find . -maxdepth 1 -name \"forge-*.jar\" ! -name \"forge-installer.jar\" | head -n 1)\n    fi\n\n    if [[ -n \"${target_jar}\" && -f \"${target_jar}\" ]]; then\n      mv \"${target_jar}\" forge-server-launch.jar\n      echo \"forge-server-launch.jar\" > \".serverjar\"\n    else\n      egg_error \"Could not locate installed Forge server jar\"\n    fi\n  fi\n\n  rm -f forge-installer.jar\n}\n\njson_download_fabric() {\n  local MC_VERSION=\"${MINECRAFT_VERSION}\"\n  local FABRIC_VERSION=\"${LOADER_VERSION}\"\n\n  fabric_install \"${MC_VERSION}\" \"${FABRIC_VERSION}\" \"fabric-server-launch.jar\"\n}\n\njson_download_neoforge() {\n  local MC_VERSION=\"${MINECRAFT_VERSION}\"\n  local NEOFORGE_VERSION=\"${LOADER_VERSION}\"\n\n  if [[ -z \"${NEOFORGE_VERSION}\" ]]; then\n    egg_error \"No NeoForge version specified in manifest\"\n  fi\n\n  neoforge_install \"${NEOFORGE_VERSION}\" \"${MC_VERSION}\" \"neoforge-server-launch.jar\"\n}\n\njson_download_quilt() {\n  local MC_VERSION=\"${MINECRAFT_VERSION}\"\n  local QUILT_VERSION=\"${LOADER_VERSION}\"\n\n  quilt_install \"${MC_VERSION}\" \"${QUILT_VERSION}\" \"quilt-server-launch.jar\"\n}\n\nvalidate_not_empty PROJECT_ID\n\nif [[ \"${PROJECT_ID}\" != \"zip\" ]]; then\n  get_download\nfi\n\nget_loader\nunpack_zip\n\nif [[ -f \"${SERVER_DIR}/manifest.json\" ]]; then\n  egg_info \"Found manifest.json, installing mods\"\n  json_download_mods\n  copy_overrides\nfi\n\nif [[ -f \"${SERVER_DIR}/client.manifest.json\" ]]; then\n  egg_info \"Loader: ${LOADER_NAME}\"\n\n  case \"${LOADER_NAME}\" in\n    forge)    json_download_forge ;;\n    fabric)   json_download_fabric ;;\n    neoforge) json_download_neoforge ;;\n    quilt)    json_download_quilt ;;\n  esac\nfi\n\nexport_mc_version\n\negg_info \"CurseForge installation complete\"\n",
      "container": "ghcr.io/enderhost/installers:java21",
      "entrypoint": "bash"
    }
  },
  "variables": [
    {
      "name": "Minecraft Version",
      "description": "Versión de Minecraft determinada en la instalación.",
      "env_variable": "MINECRAFT_VERSION",
      "default_value": "latest",
      "user_viewable": false,
      "user_editable": false,
      "rules": "nullable|string",
      "field_type": "text",
      "source": "installation",
      "defines_version": true
    },
    {
      "name": "Modpack Project ID",
      "description": "ID del proyecto del modpack en CurseForge, o 'zip' si instalaras desde un server.zip subido.",
      "env_variable": "PROJECT_ID",
      "default_value": "",
      "user_viewable": true,
      "user_editable": true,
      "rules": "required|string",
      "field_type": "text",
      "source": "user"
    },
    {
      "name": "Modpack File ID",
      "description": "ID del archivo de una version especifica del modpack. Si no se indica, se intentara usar la ultima version disponible.",
      "env_variable": "VERSION_ID",
      "default_value": "latest",
      "user_viewable": true,
      "user_editable": true,
      "rules": "string",
      "field_type": "text",
      "source": "user"
    },
    {
      "name": "CurseForge API Key",
      "description": "Clave API de CurseForge requerida para usar este egg.",
      "env_variable": "API_KEY",
      "default_value": "$2a$10$4rp691Q4f8.hYAOoqZ894ueamhNmwJmuP2Q3DBJeQxg.Dy0981.oS",
      "user_viewable": false,
      "user_editable": false,
      "rules": "string|max:60",
      "field_type": "text",
      "source": "user"
    }
  ]
}
