{
    "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO",
    "meta": {
        "version": "PTDL_v2",
        "update_url": null
    },
    "exported_at": "2025-09-16T16:52:54+00:00",
    "name": "tshock",
    "author": "parker@parkervcp.com",
    "description": "The t-shock modded terraria server.\r\n\r\nhttps:\/\/tshock.co\/",
    "tags": [],
    "features": [],
    "docker_images": {
        "Dotnet 6": "ghcr.io\/parkervcp\/yolks:dotnet_6",
        "Dotnet 9": "ghcr.io\/parkervcp\/yolks:dotnet_9"
    },
    "file_denylist": [],
    "startup": ".\/TShock.Server -ip 0.0.0.0 -port {{SERVER_PORT}} -maxplayers {{MAX_PLAYERS}} -world {{WORLD_NAME}}.wld -autocreate {{WORLD_SIZE}}",
    "config": {
        "files": "{}",
        "startup": "{\n    \"done\": \"Type 'help' for a list of commands\"\n}",
        "logs": "{}",
        "stop": "exit"
    },
    "scripts": {
        "installation": {
            "script": "#!/bin/bash\r\n# TShock Installation Script\r\n\r\n# Get release info and determine architecture\r\necho \"Fetching release information from GitHub...\"\r\nLATEST_JSON=$(curl --silent \"https://api.github.com/repos/Pryaxis/TShock/releases/latest\")\r\nRELEASES=$(curl --silent \"https://api.github.com/repos/Pryaxis/TShock/releases\")\r\nMATCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && echo \"linux-x64\" || echo \"linux-arm64\")\r\n\r\necho \"System Architecture detected: ${MATCH}\"\r\necho \"Selected version choice: ${TSHOCK_VERSION_SELECTION}\"\r\n\r\n# Determine download link based on user selection\r\ncase \"${TSHOCK_VERSION_SELECTION}\" in\r\n    prerelease)\r\n        echo \"Finding latest pre-release version...\"\r\n        PRERELEASE_JSON=$(echo $RELEASES | jq -r '[.[] | select(.prerelease==true)][0]')\r\n        DOWNLOAD_LINK=$(echo $PRERELEASE_JSON | jq '.assets | .[] | .browser_download_url' | grep -i ${MATCH} | head -1)\r\n        ;;\r\n    custom)\r\n        if [ -z \"${CUSTOM_TSHOCK_TAG}\" ]; then\r\n            echo \"ERROR: 'Custom Tag' was selected but no tag was provided.\"\r\n            exit 1\r\n        fi\r\n        echo \"Finding custom version tag: ${CUSTOM_TSHOCK_TAG}...\"\r\n        DOWNLOAD_LINK=$(echo $RELEASES | jq -r --arg VERSION \"${CUSTOM_TSHOCK_TAG}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH} | head -1)\r\n        ;;\r\n    url)\r\n        if [ -z \"${CUSTOM_DOWNLOAD_URL}\" ]; then\r\n            echo \"ERROR: 'Custom URL' was selected but no URL was provided.\"\r\n            exit 1\r\n        fi\r\n        echo \"Using custom download URL...\"\r\n        DOWNLOAD_LINK=\"${CUSTOM_DOWNLOAD_URL}\"\r\n        ;;\r\n    *) # Default to latest stable\r\n        echo \"Finding latest stable version...\"\r\n        DOWNLOAD_LINK=$(echo $LATEST_JSON | jq '.assets | .[] | .browser_download_url' | grep -i ${MATCH} | head -1)\r\n        ;;\r\nesac\r\n\r\nif [ -z \"$DOWNLOAD_LINK\" ]; then\r\n    echo \"ERROR: Could not find a download link for the specified version. Please check the version/tag/URL and try again.\"\r\n    exit 1\r\nfi\r\n\r\n# Setup server directory\r\nmkdir -p /mnt/server\r\ncd /mnt/server\r\n\r\n# Download and extract release\r\necho \"Downloading from: ${DOWNLOAD_LINK}\"\r\ncurl -sSL -o TShock.zip \"${DOWNLOAD_LINK}\"\r\n\r\necho \"Extracting files...\"\r\nunzip -o TShock.zip\r\ntar xvf TShock-*.tar\r\n\r\n# Cleanup\r\nrm TShock.zip TShock-*.tar\r\n\r\n# Make executable\r\nchmod +x TShock.Server\r\n\r\necho \"Install complete.\"",
            "container": "ghcr.io\/parkervcp\/installers:debian",
            "entrypoint": "\/bin\/bash"
        }
    },
    "variables": [
        {
            "name": "Max Players",
            "description": "The maximum number of players a server will hold.",
            "env_variable": "MAX_PLAYERS",
            "default_value": "8",
            "user_viewable": true,
            "user_editable": false,
            "rules": "required|numeric|digits_between:1,3",
            "field_type": "text"
        },
        {
            "name": "TShock Version Selection",
            "description": "Choose which version of TShock to install. 'Latest Release' is the most recent stable version. 'Latest Pre-Release' is the newest development build. 'Custom Tag' lets you specify an exact version tag from GitHub. 'Custom URL' allows you to provide a direct download link.",
            "env_variable": "TSHOCK_VERSION_SELECTION",
            "default_value": "latest",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|string|in:latest,prerelease,custom,url",
            "field_type": "select",
            "options": [
                {
                    "name": "Latest Release",
                    "value": "latest"
                },
                {
                    "name": "Latest Pre-Release",
                    "value": "prerelease"
                },
                {
                    "name": "Custom Tag",
                    "value": "custom"
                },
                {
                    "name": "Custom URL",
                    "value": "url"
                }
            ]
        },
        {
            "name": "Custom Version Tag",
            "description": "Specify the exact TShock version tag to install (e.g., v6.0.0-pre1). Only used if 'Custom Tag' is selected above.",
            "env_variable": "CUSTOM_TSHOCK_TAG",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string|max:30",
            "field_type": "text"
        },
        {
            "name": "Custom Download URL",
            "description": "Provide a direct download URL for a TShock release (e.g., from a GitHub Actions artifact). Only used if 'Custom URL' is selected above.",
            "env_variable": "CUSTOM_DOWNLOAD_URL",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string",
            "field_type": "text"
        },
        {
            "name": "World Name",
            "description": "The name for the world file.",
            "env_variable": "WORLD_NAME",
            "default_value": "world",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|string|max:20",
            "field_type": "text"
        },
        {
            "name": "World Size",
            "description": "Defines the worlds size. 3 sizes 1 (small), 2 (medium), 3 (large).",
            "env_variable": "WORLD_SIZE",
            "default_value": "1",
            "user_viewable": true,
            "user_editable": false,
            "rules": "required|string|alpha_dash|max:20",
            "field_type": "text"
        }
    ]
}