M
描述
Modrinth 模组包通用模板。
67 浏览
7 下载
2026-06-30
更新于 3 天前
预设配置详情
Modrinth 通用
这是一个用于 Modrinth 整合包的通用模板
你需要提供一个整合包的项目 ID。例如,极致优化! 的项目 ID 是 1oIpaoJo。
该信息可在整合包页面的左侧边栏 技术信息 部分找到。
你也可以选择指定一个版本 ID。如果不指定版本 ID,将使用最新版本。例如,极致优化! 版本 1.12.2For2.0 的版本 ID 是 SyMW2FDv。该信息可在整合包页面的 版本 部分点击版本号找到。
脚本会根据整合包自动设置 Forge、Fabric 或 Quilt。
服务器端口
Minecraft 服务器需要一个端口用于访问(默认 25565),但插件可能需要为服务器启用额外端口。
| 端口 | 默认值 |
|---|---|
| 游戏 | 25565 |
registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_8
registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_11
registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_16
registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_17
registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_21
registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_25
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")
| 变量名 | 变量 | 描述 | 默认值 | 规则 | 可查看 | 可编辑 |
|---|---|---|---|---|---|---|
| 模组包项目ID | PROJECT_ID |
这是来自 Modrinth 网站的整合包项目 ID。 例如,'https://modrinth.com/modpack/fabulously-optimized/' 的项目 ID 是 1KVo5zza。 | |
required|string|max:8
必填 字符串 最大 8
|
||
| 模组包版本ID | VERSION_ID |
这是来自 Modrinth 网站的整合包版本 ID。 例如,'https://modrinth.com/modpack/fabulously-optimized/version/4.7.4' 的版本 ID 是 P9wA6exe。 | latest |
string|max:8
字符串 最大 8
|
镜像
registry.cn-shanghai.aliyuncs.com/pterodactyl-images/installers:java_17
入口
bash
#!/bin/bash
# shellcheck disable=SC2155
#
# Modrinth Installation Script
#
# Server Files: /mnt/server
: "${SERVER_DIR:=/mnt/server}"
: "${PROJECT_ID:=}"
: "${VERSION_ID:=}"
if [[ ! -d $SERVER_DIR ]]; then
mkdir -p "$SERVER_DIR"
fi
if ! cd "$SERVER_DIR"; then
echo -e "Failed to change directory to ${SERVER_DIR}"
exit 1
fi
function install_required {
echo -e "Installing required packages..."
echo -e "\tRunning apt update"
if ! apt update > /dev/null 2>&1; then
echo -e "\tERROR: apt update failed!"
exit 1
fi
echo -e "\tRunning apt install"
if ! apt install -y wget jq unzip dos2unix > /dev/null 2>&1; then
echo -e "\tERROR: apt install failed!"
exit 1
fi
}
MODRINTH_API_URL="https://api.modrinth.com/v2"
function get_download {
echo -e "Retrieving Modrinth project information..."
local PROJECT_DATA=$(wget -q "${MODRINTH_API_URL}/project/${PROJECT_ID}" -O -)
local PROJECT_TITLE=$(echo "$PROJECT_DATA" | jq -r '.title // empty')
local PROJECT_SUPPORTED=$(echo "$PROJECT_DATA" | jq -r '."server_side" // empty')
if [[ -z "${PROJECT_DATA}" ]]; then
echo -e "\tERROR: Failed to retrieve project data for project id '${PROJECT_ID}'"
exit 1
fi
if [[ "${PROJECT_SUPPORTED}" == "unsupported" ]]; then
echo -e "\tWARNING: The project '${PROJECT_TITLE}' is listed as unsupported for server use. Continuing anyway..."
fi
if [[ -z "${VERSION_ID}" || "${VERSION_ID}" == "latest" ]]; then
echo -e "\tNo version ID specified, using latest version"
VERSION_ID=$(echo "$PROJECT_DATA" | jq -r '.versions[-1] // empty')
else
echo -e "\tChecking if provided version id '${VERSION_ID}' exists"
if [[ $(echo "$PROJECT_DATA" | jq -r --arg VERSION_ID "$VERSION_ID" '.versions[]? | select(. == $VERSION_ID)') != "${VERSION_ID}" ]]; then
echo -e "\tERROR: Version id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'"
exit 1
fi
fi
if [[ -z "${VERSION_ID}" ]]; then
echo -e "\tERROR: No version id found for project '${PROJECT_TITLE}'"
exit 1
fi
# get json data to work with
echo -e "\tRetrieving version information for '${VERSION_ID}'"
local JSON_DATA=$(wget -q "${MODRINTH_API_URL}/version/${VERSION_ID}" -O -)
if [[ -z "${JSON_DATA}" ]]; then
echo -e "\tERROR: Failed to retrieve version data for version id '${VERSION_ID}'"
exit 1
fi
echo -e "\tParsing Modrinth pack download url"
local DOWNLOAD_URL=$(echo "$JSON_DATA" | jq -r '.files[]? | select(.primary == true) | .url')
if [[ -z "${DOWNLOAD_URL}" ]]; then
echo -e "\tERROR: No download url found for version ${VERSION_ID}"
exit 1
fi
## download modpack files
echo -e "\tDownloading ${DOWNLOAD_URL}"
if ! wget -q "${DOWNLOAD_URL}" -O server.zip; then
echo -e "\tERROR: Failed to download modpack files!"
exit 1
fi
}
function unpack_zip {
unzip -o server.zip
rm -rf server.zip
}
function json_download_mods {
echo "Downloading mods..."
local MANIFEST="${SERVER_DIR}/modrinth.index.json"
jq -c '.files[]? | select(.env.server == "required") | {name: .path, url: .downloads[0]}' "${MANIFEST}" | while read -r mod; do
local FILE_URL=$(echo "${mod}" | jq -r '.url // empty')
local FILE_NAME=$(echo "${mod}" | jq -r '.name // empty')
if [[ -z "${FILE_URL}" ]]; then
echo -e "\tERROR: No download url found for mod '${mod}'"
exit 1
fi
echo -e "\tDownloading ${FILE_URL}"
if ! wget -q "${FILE_URL}" -P "${SERVER_DIR}/mods"; then
echo -e "\tERROR: Failed to download mod '${FILE_NAME}'"
exit 1
fi
done
}
function json_download_overrides {
echo "Copying overrides..."
if [[ -d "${SERVER_DIR}/overrides" ]]; then
echo -e "\tCopying shared overrides"
chmod -R 755 "${SERVER_DIR}/overrides/"*
cp -r "${SERVER_DIR}/overrides/"* "${SERVER_DIR}"
rm -r "${SERVER_DIR}/overrides"
fi
if [[ -d "${SERVER_DIR}/server-overrides" ]]; then
echo -e "\tCopying server overrides"
chmod -R 755 "${SERVER_DIR}/server-overrides/"*
cp -r "${SERVER_DIR}/server-overrides/"* "${SERVER_DIR}"
rm -r "${SERVER_DIR}/server-overrides"
fi
}
FORGE_INSTALLER_URL="https://maven.minecraftforge.net/net/minecraftforge/forge/"
function json_download_forge {
echo "Downloading Forge..."
local MANIFEST="${SERVER_DIR}/modrinth.index.json"
local MC_VERSION=$(jq -r '.dependencies.minecraft // empty' "${MANIFEST}")
local FORGE_VERSION=$(jq -r '.dependencies.forge // empty' "${MANIFEST}")
if [[ -z "${MC_VERSION}" ]]; then
echo -e "\tERROR: No Minecraft version found in manifest '${MANIFEST}'"
exit 1
fi
if [[ -z "${FORGE_VERSION}" ]]; then
echo -e "\tERROR: No Forge version found in manifest '${MANIFEST}'"
exit 1
fi
FORGE_VERSION="${MC_VERSION}-${FORGE_VERSION}"
if [[ "${MC_VERSION}" == "1.7.10" || "${MC_VERSION}" == "1.8.9" ]]; then
FORGE_VERSION="${FORGE_VERSION}-${MC_VERSION}"
fi
local FORGE_JAR="forge-${FORGE_VERSION}.jar"
if [[ "${MC_VERSION}" == "1.7.10" ]]; then
FORGE_JAR="forge-${FORGE_VERSION}-universal.jar"
fi
local FORGE_URL="${FORGE_INSTALLER_URL}${FORGE_VERSION}/forge-${FORGE_VERSION}"
echo -e "\tUsing Forge ${FORGE_VERSION} from ${FORGE_URL}"
local FORGE_INSTALLER="${FORGE_URL}-installer.jar"
echo -e "\tDownloading Forge Installer ${FORGE_VERSION} from ${FORGE_INSTALLER}"
if ! wget -q -O forge-installer.jar "${FORGE_INSTALLER}"; then
echo -e "\tERROR: Failed to download Forge Installer ${FORGE_VERSION}"
exit 1
fi
rm -rf libraries/net/minecraftforge/forge/
rm -f unix_args.txt
echo -e "\tInstalling Forge Server ${FORGE_VERSION}"
if ! java -jar forge-installer.jar --installServer > /dev/null 2>&1; then
echo -e "\tERROR: Failed to install Forge Server ${FORGE_VERSION}"
exit 1
fi
if [[ $MC_VERSION =~ ^1\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\.(17|18|19|20|21|22|23) ]]; then
echo -e "\tDetected Forge 1.17 or newer version. Setting up Forge Unix arguments"
ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt
else
mv "$FORGE_JAR" forge-server-launch.jar
echo "forge-server-launch.jar" > ".serverjar"
fi
rm -f forge-installer.jar
}
FABRIC_INSTALLER_URL="https://meta.fabricmc.net/v2/versions/installer"
function json_download_fabric {
echo "Downloading Fabric..."
local MANIFEST="${SERVER_DIR}/modrinth.index.json"
local MC_VERSION=$(jq -r '.dependencies.minecraft // empty' "${MANIFEST}")
local FABRIC_VERSION=$(jq -r '.dependencies."fabric-loader" // empty' "${MANIFEST}")
if [[ -z "${MC_VERSION}" ]]; then
echo -e "\tERROR: No Minecraft version found in manifest '${MANIFEST}'"
exit 1
fi
if [[ -z "${FABRIC_VERSION}" ]]; then
echo -e "\tERROR: No Fabric version found in manifest '${MANIFEST}'"
exit 1
fi
local INSTALLER_JSON=$(wget -q -O - ${FABRIC_INSTALLER_URL} )
local INSTALLER_VERSION=$(echo "$INSTALLER_JSON" | jq -r '.[0].version // empty')
local INSTALLER_URL=$(echo "$INSTALLER_JSON" | jq -r '.[0].url // empty')
if [[ -z "${INSTALLER_VERSION}" ]]; then
echo -e "\tERROR: No Fabric installer version found in manifest!"
exit 1
fi
if [[ -z "${INSTALLER_URL}" ]]; then
echo -e "\tERROR: No Fabric installer url found in manifest!"
exit 1
fi
echo -e "\tDownloading Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}"
if ! wget -q -O fabric-installer.jar "${INSTALLER_URL}"; then
echo -e "\tERROR: Failed to download Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})"
exit 1
fi
echo -e "\tInstalling Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})"
if ! java -jar fabric-installer.jar server -mcversion "${MC_VERSION}" -loader "${FABRIC_VERSION}" -downloadMinecraft; then
echo -e "\tERROR: Failed to install Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})"
exit 1
fi
echo "fabric-server-launch.jar" > ".serverjar"
rm -f fabric-installer.jar
}
QUILT_INSTALLER_URL="https://meta.quiltmc.org/v3/versions/installer"
function json_download_quilt {
echo "Downloading Quilt..."
local MANIFEST="${SERVER_DIR}/modrinth.index.json"
local MC_VERSION=$(jq -r '.dependencies.minecraft // empty' "${MANIFEST}")
local QUILT_VERSION=$(jq -r '.dependencies."quilt-loader" // empty' "${MANIFEST}")
if [[ -z "${MC_VERSION}" ]]; then
echo -e "\tERROR: No Minecraft version found in manifest!"
exit 1
fi
if [[ -z "${QUILT_VERSION}" ]]; then
echo -e "\tERROR: No Quilt version found in manifest!"
exit 1
fi
local INSTALLER_JSON=$(wget -q -O - ${QUILT_INSTALLER_URL} )
local INSTALLER_VERSION=$(echo "$INSTALLER_JSON" | jq -r '.[0].version // empty')
local INSTALLER_URL=$(echo "$INSTALLER_JSON" | jq -r '.[0].url // empty')
if [[ -z "${INSTALLER_JSON}" ]]; then
echo -e "\tERROR: Failed to retrieve Quilt installer information from manifest!"
exit 1
fi
if [[ -z "${INSTALLER_VERSION}" ]]; then
echo -e "\tERROR: No Quilt installer version found in manifest!"
exit 1
fi
if [[ -z "${INSTALLER_URL}" ]]; then
echo -e "\tERROR: No Quilt installer URL found in manifest!"
exit 1
fi
echo -e "\tDownloading Quilt Installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}"
if ! wget -q -O quilt-installer.jar "${INSTALLER_URL}"; then
echo -e "\tERROR: Failed to download Quilt installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})"
exit 1
fi
echo -e "\tInstalling Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})"
if ! java -jar quilt-installer.jar install server "${MC_VERSION}" "${QUILT_VERSION}" --download-server --install-dir=./; then
echo -e "\tERROR: Failed to install Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})"
exit 1
fi
echo "quilt-server-launch.jar" > ".serverjar"
rm quilt-installer.jar
}
install_required
if [[ -z "${PROJECT_ID}" ]]; then
echo "ERROR: You must specify a PROJECT_ID environment variable!"
exit 1
fi
if [[ ! "${PROJECT_ID}" = "zip" ]]; then
get_download
unpack_zip
else
unpack_zip
fi
if [[ -f "${SERVER_DIR}/modrinth.index.json" ]]; then
echo "Found modrinth.index.json, installing mods"
json_download_mods
json_download_overrides
fi
if [[ -f "${SERVER_DIR}/modrinth.index.json" ]]; then
MANIFEST="${SERVER_DIR}/modrinth.index.json"
if [[ $(jq -r '.dependencies.forge' "${MANIFEST}") != "null" ]]; then
json_download_forge
fi
if [[ $(jq -r '.dependencies."fabric-loader"' "${MANIFEST}") != "null" ]]; then
json_download_fabric
fi
if [[ $(jq -r '.dependencies."quilt-loader"' "${MANIFEST}") != "null" ]]; then
json_download_quilt
fi
fi
echo -e "
Install completed succesfully, enjoy!"
{
"_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY pterodactyl.io",
"meta": {
"version": "PTDL_v2",
"update_url": "https://eggs.pterodactyl.top/eggs/165/download/egg-modrinth-generic.json"
},
"exported_at": "2025-01-13T09:44:32+00:00",
"name": "Modrinth Generic",
"author": "contact@chromozone.dev",
"description": "Modrinth 模组包通用模板。",
"features": [
"eula",
"java_version",
"pid_limit"
],
"docker_images": {
"Java 8": "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_8",
"Java 11": "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_11",
"Java 16": "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_16",
"Java 17": "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_17",
"Java 21": "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_21",
"Java 25": "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/yolks:java_25"
},
"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": "{\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}",
"logs": "{}",
"startup": "{\r\n \"done\": \")! For help, type \"\r\n}",
"stop": "stop"
},
"scripts": {
"installation": {
"script": "#!/bin/bash\r\n# shellcheck disable=SC2155\r\n#\r\n# Modrinth Installation Script\r\n#\r\n# Server Files: /mnt/server\r\n\r\n: \"${SERVER_DIR:=/mnt/server}\"\r\n: \"${PROJECT_ID:=}\"\r\n: \"${VERSION_ID:=}\"\r\n\r\nif [[ ! -d $SERVER_DIR ]]; then\r\n mkdir -p \"$SERVER_DIR\"\r\nfi\r\n\r\nif ! cd \"$SERVER_DIR\"; then\r\n echo -e \"Failed to change directory to ${SERVER_DIR}\"\r\n exit 1\r\nfi\r\n\r\nfunction install_required {\r\n echo -e \"Installing required packages...\"\r\n\r\n echo -e \"\\tRunning apt update\"\r\n if ! apt update > /dev/null 2>&1; then\r\n echo -e \"\\tERROR: apt update failed!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tRunning apt install\"\r\n if ! apt install -y wget jq unzip dos2unix > /dev/null 2>&1; then\r\n echo -e \"\\tERROR: apt install failed!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nMODRINTH_API_URL=\"https://api.modrinth.com/v2\"\r\n\r\nfunction get_download {\r\n echo -e \"Retrieving Modrinth project information...\"\r\n local PROJECT_DATA=$(wget -q \"${MODRINTH_API_URL}/project/${PROJECT_ID}\" -O -)\r\n local PROJECT_TITLE=$(echo \"$PROJECT_DATA\" | jq -r '.title // empty')\r\n local PROJECT_SUPPORTED=$(echo \"$PROJECT_DATA\" | jq -r '.\"server_side\" // empty')\r\n\r\n if [[ -z \"${PROJECT_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve project data for project id '${PROJECT_ID}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ \"${PROJECT_SUPPORTED}\" == \"unsupported\" ]]; then\r\n echo -e \"\\tWARNING: The project '${PROJECT_TITLE}' is listed as unsupported for server use. Continuing anyway...\"\r\n fi\r\n\r\n if [[ -z \"${VERSION_ID}\" || \"${VERSION_ID}\" == \"latest\" ]]; then\r\n echo -e \"\\tNo version ID specified, using latest version\"\r\n VERSION_ID=$(echo \"$PROJECT_DATA\" | jq -r '.versions[-1] // empty')\r\n else\r\n echo -e \"\\tChecking if provided version id '${VERSION_ID}' exists\"\r\n if [[ $(echo \"$PROJECT_DATA\" | jq -r --arg VERSION_ID \"$VERSION_ID\" '.versions[]? | select(. == $VERSION_ID)') != \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: Version id '${VERSION_ID}' not found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n fi\r\n\r\n if [[ -z \"${VERSION_ID}\" ]]; then\r\n echo -e \"\\tERROR: No version id found for project '${PROJECT_TITLE}'\"\r\n exit 1\r\n fi\r\n\r\n # get json data to work with\r\n echo -e \"\\tRetrieving version information for '${VERSION_ID}'\"\r\n local JSON_DATA=$(wget -q \"${MODRINTH_API_URL}/version/${VERSION_ID}\" -O -)\r\n\r\n if [[ -z \"${JSON_DATA}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve version data for version id '${VERSION_ID}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tParsing Modrinth pack download url\"\r\n\r\n local DOWNLOAD_URL=$(echo \"$JSON_DATA\" | jq -r '.files[]? | select(.primary == true) | .url')\r\n\r\n if [[ -z \"${DOWNLOAD_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for version ${VERSION_ID}\"\r\n exit 1\r\n fi\r\n\r\n ## download modpack files\r\n echo -e \"\\tDownloading ${DOWNLOAD_URL}\"\r\n if ! wget -q \"${DOWNLOAD_URL}\" -O server.zip; then\r\n echo -e \"\\tERROR: Failed to download modpack files!\"\r\n exit 1\r\n fi\r\n}\r\n\r\nfunction unpack_zip {\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction json_download_mods {\r\n echo \"Downloading mods...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}/modrinth.index.json\"\r\n jq -c '.files[]? | select(.env.server == \"required\") | {name: .path, url: .downloads[0]}' \"${MANIFEST}\" | while read -r mod; do\r\n local FILE_URL=$(echo \"${mod}\" | jq -r '.url // empty')\r\n local FILE_NAME=$(echo \"${mod}\" | jq -r '.name // empty')\r\n\r\n if [[ -z \"${FILE_URL}\" ]]; then\r\n echo -e \"\\tERROR: No download url found for mod '${mod}'\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading ${FILE_URL}\"\r\n \r\n if ! wget -q \"${FILE_URL}\" -P \"${SERVER_DIR}/mods\"; then\r\n echo -e \"\\tERROR: Failed to download mod '${FILE_NAME}'\"\r\n exit 1\r\n fi\r\n done\r\n}\r\n\r\nfunction json_download_overrides {\r\n echo \"Copying overrides...\"\r\n if [[ -d \"${SERVER_DIR}/overrides\" ]]; then\r\n echo -e \"\\tCopying shared overrides\"\r\n chmod -R 755 \"${SERVER_DIR}/overrides/\"*\r\n cp -r \"${SERVER_DIR}/overrides/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}/overrides\"\r\n fi\r\n\r\n if [[ -d \"${SERVER_DIR}/server-overrides\" ]]; then\r\n echo -e \"\\tCopying server overrides\"\r\n chmod -R 755 \"${SERVER_DIR}/server-overrides/\"*\r\n cp -r \"${SERVER_DIR}/server-overrides/\"* \"${SERVER_DIR}\"\r\n rm -r \"${SERVER_DIR}/server-overrides\"\r\n fi\r\n}\r\n\r\nFORGE_INSTALLER_URL=\"https://maven.minecraftforge.net/net/minecraftforge/forge/\"\r\n\r\nfunction json_download_forge {\r\n echo \"Downloading Forge...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}/modrinth.index.json\"\r\n\r\n local MC_VERSION=$(jq -r '.dependencies.minecraft // empty' \"${MANIFEST}\")\r\n local FORGE_VERSION=$(jq -r '.dependencies.forge // empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${FORGE_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Forge version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n FORGE_VERSION=\"${MC_VERSION}-${FORGE_VERSION}\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" || \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n FORGE_VERSION=\"${FORGE_VERSION}-${MC_VERSION}\"\r\n fi\r\n\r\n local FORGE_JAR=\"forge-${FORGE_VERSION}.jar\"\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=\"forge-${FORGE_VERSION}-universal.jar\"\r\n fi\r\n\r\n local FORGE_URL=\"${FORGE_INSTALLER_URL}${FORGE_VERSION}/forge-${FORGE_VERSION}\"\r\n\r\n echo -e \"\\tUsing Forge ${FORGE_VERSION} from ${FORGE_URL}\"\r\n\r\n local FORGE_INSTALLER=\"${FORGE_URL}-installer.jar\"\r\n echo -e \"\\tDownloading Forge Installer ${FORGE_VERSION} from ${FORGE_INSTALLER}\"\r\n\r\n if ! wget -q -O forge-installer.jar \"${FORGE_INSTALLER}\"; then\r\n echo -e \"\\tERROR: Failed to download Forge Installer ${FORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n rm -rf libraries/net/minecraftforge/forge/\r\n rm -f unix_args.txt\r\n\r\n echo -e \"\\tInstalling Forge Server ${FORGE_VERSION}\"\r\n if ! java -jar forge-installer.jar --installServer > /dev/null 2>&1; then\r\n echo -e \"\\tERROR: Failed to install Forge Server ${FORGE_VERSION}\"\r\n exit 1\r\n fi\r\n\r\n if [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n echo -e \"\\tDetected Forge 1.17 or newer version. Setting up Forge Unix arguments\"\r\n ln -sf libraries/net/minecraftforge/forge/*/unix_args.txt unix_args.txt\r\n else\r\n mv \"$FORGE_JAR\" forge-server-launch.jar\r\n echo \"forge-server-launch.jar\" > \".serverjar\"\r\n fi\r\n\r\n rm -f forge-installer.jar\r\n}\r\n\r\nFABRIC_INSTALLER_URL=\"https://meta.fabricmc.net/v2/versions/installer\"\r\n\r\nfunction json_download_fabric {\r\n echo \"Downloading Fabric...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}/modrinth.index.json\"\r\n\r\n local MC_VERSION=$(jq -r '.dependencies.minecraft // empty' \"${MANIFEST}\")\r\n local FABRIC_VERSION=$(jq -r '.dependencies.\"fabric-loader\" // empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${FABRIC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric version found in manifest '${MANIFEST}'\"\r\n exit 1\r\n fi\r\n\r\n local INSTALLER_JSON=$(wget -q -O - ${FABRIC_INSTALLER_URL} )\r\n local INSTALLER_VERSION=$(echo \"$INSTALLER_JSON\" | jq -r '.[0].version // empty')\r\n local INSTALLER_URL=$(echo \"$INSTALLER_JSON\" | jq -r '.[0].url // empty')\r\n\r\n if [[ -z \"${INSTALLER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric installer version found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${INSTALLER_URL}\" ]]; then\r\n echo -e \"\\tERROR: No Fabric installer url found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n\r\n if ! wget -q -O fabric-installer.jar \"${INSTALLER_URL}\"; then\r\n echo -e \"\\tERROR: Failed to download Fabric Installer ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n if ! java -jar fabric-installer.jar server -mcversion \"${MC_VERSION}\" -loader \"${FABRIC_VERSION}\" -downloadMinecraft; then\r\n echo -e \"\\tERROR: Failed to install Fabric Server ${MC_VERSION}-${FABRIC_VERSION} (${INSTALLER_VERSION})\"\r\n exit 1\r\n fi\r\n\r\n echo \"fabric-server-launch.jar\" > \".serverjar\"\r\n\r\n rm -f fabric-installer.jar\r\n}\r\n\r\nQUILT_INSTALLER_URL=\"https://meta.quiltmc.org/v3/versions/installer\"\r\n\r\nfunction json_download_quilt {\r\n echo \"Downloading Quilt...\"\r\n\r\n local MANIFEST=\"${SERVER_DIR}/modrinth.index.json\"\r\n\r\n local MC_VERSION=$(jq -r '.dependencies.minecraft // empty' \"${MANIFEST}\")\r\n local QUILT_VERSION=$(jq -r '.dependencies.\"quilt-loader\" // empty' \"${MANIFEST}\")\r\n\r\n if [[ -z \"${MC_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Minecraft version found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${QUILT_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt version found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n local INSTALLER_JSON=$(wget -q -O - ${QUILT_INSTALLER_URL} )\r\n local INSTALLER_VERSION=$(echo \"$INSTALLER_JSON\" | jq -r '.[0].version // empty')\r\n local INSTALLER_URL=$(echo \"$INSTALLER_JSON\" | jq -r '.[0].url // empty')\r\n\r\n if [[ -z \"${INSTALLER_JSON}\" ]]; then\r\n echo -e \"\\tERROR: Failed to retrieve Quilt installer information from manifest!\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${INSTALLER_VERSION}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer version found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n if [[ -z \"${INSTALLER_URL}\" ]]; then\r\n echo -e \"\\tERROR: No Quilt installer URL found in manifest!\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tDownloading Quilt Installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION}) from ${INSTALLER_URL}\"\r\n\r\n if ! wget -q -O quilt-installer.jar \"${INSTALLER_URL}\"; then\r\n echo -e \"\\tERROR: Failed to download Quilt installer ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n exit 1\r\n fi\r\n\r\n echo -e \"\\tInstalling Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n if ! java -jar quilt-installer.jar install server \"${MC_VERSION}\" \"${QUILT_VERSION}\" --download-server --install-dir=./; then\r\n echo -e \"\\tERROR: Failed to install Quilt Server ${MC_VERSION}-${QUILT_VERSION} (${INSTALLER_VERSION})\"\r\n exit 1\r\n fi\r\n\r\n echo \"quilt-server-launch.jar\" > \".serverjar\"\r\n\r\n rm quilt-installer.jar\r\n}\r\n\r\ninstall_required\r\n\r\nif [[ -z \"${PROJECT_ID}\" ]]; then\r\n echo \"ERROR: You must specify a PROJECT_ID environment variable!\"\r\n exit 1\r\nfi\r\n\r\nif [[ ! \"${PROJECT_ID}\" = \"zip\" ]]; then\r\n\tget_download\r\n\tunpack_zip\r\nelse\r\n\tunpack_zip\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}/modrinth.index.json\" ]]; then\r\n echo \"Found modrinth.index.json, installing mods\"\r\n json_download_mods\r\n json_download_overrides\r\nfi\r\n\r\nif [[ -f \"${SERVER_DIR}/modrinth.index.json\" ]]; then\r\n MANIFEST=\"${SERVER_DIR}/modrinth.index.json\"\r\n\r\n if [[ $(jq -r '.dependencies.forge' \"${MANIFEST}\") != \"null\" ]]; then\r\n json_download_forge\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"fabric-loader\"' \"${MANIFEST}\") != \"null\" ]]; then\r\n json_download_fabric\r\n fi\r\n\r\n if [[ $(jq -r '.dependencies.\"quilt-loader\"' \"${MANIFEST}\") != \"null\" ]]; then\r\n json_download_quilt\r\n fi\r\nfi\r\n\r\necho -e \"\\nInstall completed succesfully, enjoy!\"",
"container": "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/installers:java_17",
"entrypoint": "bash"
}
},
"variables": [
{
"name": "模组包项目ID",
"description": "这是来自 Modrinth 网站的整合包项目 ID。\n\n例如,'https://modrinth.com/modpack/fabulously-optimized/' 的项目 ID 是 1KVo5zza。",
"env_variable": "PROJECT_ID",
"default_value": "",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:8",
"field_type": "text"
},
{
"name": "模组包版本ID",
"description": "这是来自 Modrinth 网站的整合包版本 ID。\n\n例如,'https://modrinth.com/modpack/fabulously-optimized/version/4.7.4' 的版本 ID 是 P9wA6exe。",
"env_variable": "VERSION_ID",
"default_value": "latest",
"user_viewable": true,
"user_editable": true,
"rules": "string|max:8",
"field_type": "text"
}
]
}附属文件
暂无附属文件
提交历史
Fork 关系
查看关系图暂无 Fork,成为第一个 Fork 的人吧!
统计
67
浏览
7
下载
0
星标
0
复刻
作者
飒
飒爽师叔
UID: 1
279 预设
·
2026-06