{"meta":{"slug":"neoforge","name":"Neoforge","category":"minecraft","source":"pterodactyl","owner":"pterodactyl","repo":"game-eggs","branch":"main","path":"minecraft/java/neoforge/egg-neoforge.json","rawUrl":"https://raw.githubusercontent.com/pterodactyl/game-eggs/main/minecraft/java/neoforge/egg-neoforge.json","indexedAt":1792246788483},"egg":{"_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":"NeoForge","author":"glorantv@icloud.com","description":"NeoForge Server. NeoForge is a modding API (Application Programming Interface), which makes it easier to create mods, and also make sure mods are compatible with each other. NeoForge is a fork of Minecraft Forge.","features":["eula","java_version","pid_limit"],"docker_images":{"Java 17":"ghcr.io/ptero-eggs/yolks:java_17","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 @unix_args.txt","config":{"files":"{\r\n    \"server.properties\": {\r\n        \"parser\": \"properties\",\r\n        \"find\": {\r\n            \"server-ip\": \"0.0.0.0\",\r\n            \"server-port\": \"{{server.build.default.port}}\",\r\n            \"query.port\": \"{{server.build.default.port}}\"\r\n        }\r\n    }\r\n}","startup":"{\r\n    \"done\": \")! For help, type \"\r\n}","logs":"{}","stop":"stop"},"scripts":{"installation":{"script":"#!/bin/bash\r\n# NeoForge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\napt-get update\r\napt-get install -y curl xq openjdk-17-jdk\r\n\r\nif [[ ! -d /mnt/server ]]; then\r\n    mkdir /mnt/server\r\nfi\r\n\r\ncd /mnt/server\r\n\r\n# Remove spaces from the version number to avoid issues with curl\r\nNEOFORGE_VERSION=\"$(echo \"$NEOFORGE_VERSION\" | tr -d ' ')\"\r\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\r\n\r\n# If we have a specific NeoForge version set, use that\r\nif [[ ! -z ${NEOFORGE_VERSION} ]]; then\r\n  if [[ \"${NEOFORGE_VERSION}\" =~ \"1.20.1-\" ]]; then\r\n    ARTIFACT_NAME=\"forge\"\r\n  else\r\n    ARTIFACT_NAME=\"neoforge\"\r\n  fi\r\n\r\n  BASE_URL=\"https://maven.neoforged.net/releases/net/neoforged/${ARTIFACT_NAME}/${NEOFORGE_VERSION}/\"\r\n  echo \"Fetching file list from: ${BASE_URL}\"\r\n  FILE_LIST=$(curl -s \"${BASE_URL}\" | grep -oP 'href=\"[^\"]+\"' | cut -d'\"' -f2)\r\n\r\n  INSTALLER_JAR=$(echo \"$FILE_LIST\" | grep -E \"${ARTIFACT_NAME}-${NEOFORGE_VERSION}.*installer.*\\.jar$\" | head -n1)\r\n  if [[ -z \"$INSTALLER_JAR\" ]]; then\r\n    INSTALLER_JAR=$(echo \"$FILE_LIST\" | grep -E \"${ARTIFACT_NAME}-${NEOFORGE_VERSION}.*universal.*\\.jar$\" | head -n1)\r\n  fi\r\n  if [[ -z \"$INSTALLER_JAR\" ]]; then\r\n    echo \"Could not find a valid JAR file for NeoForge version ${NEOFORGE_VERSION}.\"\r\n    exit 1\r\n  fi\r\n\r\n  echo \"Downloading ${INSTALLER_JAR}...\"\r\n  curl -o \"${INSTALLER_JAR}\" \"${BASE_URL}${INSTALLER_JAR}\"\r\nelse\r\n  if [[ \"${MC_VERSION}\" == \"1.20.1\" ]]; then\r\n    XML_DATA=$(curl -sSL https://maven.neoforged.net/releases/net/neoforged/forge/maven-metadata.xml)\r\n    ARTIFACT_NAME=\"forge\"\r\n    NEOFORGE_OLD=1\r\n  else\r\n    XML_DATA=$(curl -sSL https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml)\r\n    ARTIFACT_NAME=\"neoforge\"\r\n  fi\r\n\r\n  REPO_URL=\"https://maven.neoforged.net/releases/net/neoforged/${ARTIFACT_NAME}/\"\r\n\r\n  if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\r\n    echo \"Getting latest version of NeoForge.\"\r\n    MC_VERSION=\"1.$(echo -e ${XML_DATA} | xq -x '/metadata/versioning/release' | cut -d'.' -f1-2)\"\r\n  fi\r\n\r\n  echo \"Minecraft version: ${MC_VERSION}\"\r\n\r\n  if [[ -z \"${NEOFORGE_OLD}\" ]]; then\r\n    if [[ \"${MC_VERSION}\" == *.*.* ]]; then\r\n      VERSION_KEY=\"$(echo -n ${MC_VERSION} | cut -d'.' -f2-).\"\r\n    else\r\n      VERSION_KEY=$(echo -n ${MC_VERSION} | cut -d'.' -f2-)\r\n    fi\r\n  else\r\n    VERSION_KEY=\"${MC_VERSION}-\"\r\n  fi\r\n\r\n  NEOFORGE_VERSION=$(echo -e ${XML_DATA} | xq -x \"(/metadata/versioning/versions/*[starts-with(text(), '${VERSION_KEY}')])\" | tail -n1)\r\n  if [[ -z \"${NEOFORGE_VERSION}\" ]]; then\r\n    echo \"The install failed, because there is no valid version of NeoForge for Minecraft version ${MC_VERSION}.\"\r\n    exit 1\r\n  fi\r\n\r\n  BASE_URL=\"${REPO_URL}${NEOFORGE_VERSION}/\"\r\n  echo \"Resolved NeoForge version: ${NEOFORGE_VERSION}\"\r\n  FILE_LIST=$(curl -s \"${BASE_URL}\" | grep -oP 'href=\"[^\"]+\"' | cut -d'\"' -f2)\r\n\r\n  INSTALLER_JAR=$(echo \"$FILE_LIST\" | grep -E \"${ARTIFACT_NAME}-${NEOFORGE_VERSION}.*installer.*\\.jar$\" | head -n1)\r\n  if [[ -z \"$INSTALLER_JAR\" ]]; then\r\n    INSTALLER_JAR=$(echo \"$FILE_LIST\" | grep -E \"${ARTIFACT_NAME}-${NEOFORGE_VERSION}.*universal.*\\.jar$\" | head -n1)\r\n  fi\r\n  if [[ -z \"$INSTALLER_JAR\" ]]; then\r\n    echo \"Could not find a valid JAR file for NeoForge version ${NEOFORGE_VERSION}.\"\r\n    exit 1\r\n  fi\r\n\r\n  echo \"Downloading ${INSTALLER_JAR}...\"\r\n  curl -o \"${INSTALLER_JAR}\" \"${BASE_URL}${INSTALLER_JAR}\"\r\nfi\r\n\r\n# Clean previous install (for downgrade/upgrade support)\r\nrm -rf libraries/net/neoforged/${ARTIFACT_NAME}\r\n\r\n# Run the installer to generate startup arguments\r\necho \"Running installer...\"\r\njava -jar \"${INSTALLER_JAR}\" --installServer\r\n\r\n# Symlink unix_args.txt if it exists\r\nif [[ -f \"libraries/net/neoforged/${ARTIFACT_NAME}/${NEOFORGE_VERSION}/unix_args.txt\" ]]; then\r\n  ln -sf \"libraries/net/neoforged/${ARTIFACT_NAME}/${NEOFORGE_VERSION}/unix_args.txt\" unix_args.txt\r\nfi\r\n\r\nif [[ ! -f unix_args.txt ]]; then\r\n  echo \"Installer did not generate unix_args.txt. Installation failed.\"\r\n  exit 1\r\nfi\r\n\r\n# Removal of unnecessary files\r\nrm run.bat\r\nrm run.sh\r\n\r\necho \"Installation complete.\"","container":"ghcr.io/ptero-eggs/installers:debian","entrypoint":"bash"}},"variables":[{"name":"Minecraft Version","description":"The version of Minecraft you want to install for.\r\n\r\nLeaving latest will install the latest version.","env_variable":"MC_VERSION","default_value":"latest","user_viewable":true,"user_editable":true,"rules":"required|string|max:9","field_type":"text"},{"name":"NeoForge Version","description":"The full exact version.\r\n\r\nEx. 20.4.194 \r\nhttps://projects.neoforged.net/neoforged/neoforge\r\n\r\nIf it fails to download the server files it will fail to install.","env_variable":"NEOFORGE_VERSION","default_value":"","user_viewable":true,"user_editable":true,"rules":"nullable|regex:/^[0-9A-Za-z.\\-\\+]+$/","field_type":"text"}]},"readme":"# NeoForge 🦊\n\n## This is a generic egg for the NeoForge standalone server.\n\nNeoForge is a fork of Minecraft Forge for versions 1.20.1 or newer. The install\nscript is based on the official Forge install script.\n\nThe egg supports downloading NeoForge for the latest or a specified Minecraft version,\nas well as downloading a specific NeoForge version.\n\n## Server Ports\n\nThe Minecraft server requires a single port for access (default 25565),\nbut plugins may require extra ports to enabled for the server.\n\n| Port       | Default |\n|------------|---------|\n| Minecraft  | 25565   |\n"}