A Bukkit server implementation on common mod loaders.
Check out the Github for more information.
The minecraft server requires a single port for access (default 25565) but plugins may require extra ports to enabled for the server.
| Port | default |
|---|---|
| Game | 25565 |
| Name | Tag |
|---|---|
| Java 8 | ghcr.io/ptero-eggs/yolks:java_8 |
| Java 11 | ghcr.io/ptero-eggs/yolks:java_11 |
| Java 16 | ghcr.io/ptero-eggs/yolks:java_16 |
| Java 17 | ghcr.io/ptero-eggs/yolks:java_17 |
| Java 19 | ghcr.io/ptero-eggs/yolks:java_19 |
| Java 21 | ghcr.io/ptero-eggs/yolks:java_21 |
| Java 22 | ghcr.io/ptero-eggs/yolks:java_22 |
Name of the server JAR file that will be created (e.g. server.jar).
The version of Minecraft to download.
Optional custom download URL. Leave empty to use the Arclight API.
Select the Arclight build channel (e.g. stable, beta). Use 'auto' to use the most recent one.
Select the mod loader you want to use (forge, neoforge, fabric).
#!/bin/bash
# Arclight Installation Script
#
# Server Files: /mnt/server
cd /mnt/server
BASE_API_URL="https://files.hypoglycemia.icu/v1/files/arclight"
if [ -n "${DOWNLOAD_URL}" ]; then
echo "Using custom download URL: ${DOWNLOAD_URL}"
else
echo "Fetching available Minecraft versions for Arclight..."
ARCLIGHT_VERSION=$(curl -s "${BASE_API_URL}/minecraft" | jq -r '.files[].name' | sort -Vr)
if [ -z "$ARCLIGHT_VERSION" ] || [ "$ARCLIGHT_VERSION" == "null" ]; then
echo "Error: Could not fetch version list from API."
exit 1
fi
if [ "$MINECRAFT_VERSION" == "auto" ]; then
MINECRAFT_VERSION=$(echo "$ARCLIGHT_VERSION" | head -n 1)
echo "Auto-selected Minecraft version: ${MINECRAFT_VERSION}"
else
VERSION_EXISTS=$(echo "$ARCLIGHT_VERSION" | grep -Fx "$MINECRAFT_VERSION")
if [ -z "$VERSION_EXISTS" ]; then
echo "Warning: Specified version '${MINECRAFT_VERSION}' not found. Falling back to the latest available version."
MINECRAFT_VERSION=$(echo "$ARCLIGHT_VERSION" | head -n 1)
echo "Fallback version: ${MINECRAFT_VERSION}"
fi
fi
echo "Fetching available loaders for version ${MINECRAFT_VERSION}..."
LOADER_LIST=$(curl -s "${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders" | jq -r '.files[].name')
if [ -z "$LOADER_LIST" ] || [ "$LOADER_LIST" == "null" ]; then
echo "Error: Could not fetch loader list from API."
exit 1
fi
LOADER_EXISTS=$(echo "$LOADER_LIST" | grep -Fx "$ARCLIGHT_LOADER")
if [ -z "$LOADER_EXISTS" ]; then
echo "Warning: Specified loader '${ARCLIGHT_LOADER}' not found for version ${MINECRAFT_VERSION}"
exit 1
fi
echo "Fetching available channels for version ${MINECRAFT_VERSION} and loader ${ARCLIGHT_LOADER}..."
CHANNEL_LIST=$(curl -s "${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders/${ARCLIGHT_LOADER}")
CHANNEL_LIST_NAME=$(echo "$CHANNEL_LIST" | jq -r '.files[].name')
if [ "$ARCLIGHT_CHANNEL" == "auto" ]; then
echo "Selecting preferred channel for loader ${ARCLIGHT_LOADER} ${MINECRAFT_VERSION}..."
ARCLIGHT_CHANNEL=$(echo "$CHANNEL_LIST_NAME" | grep -E 'latest-stable|version-stable|latest-snapshot|version-snapshot' | \
grep -x 'latest-stable' || \
echo "$CHANNEL_LIST_NAME" | grep -x 'version-stable' || \
echo "$CHANNEL_LIST_NAME" | grep -x 'latest-snapshot' || \
echo "$CHANNEL_LIST_NAME" | grep -x 'version-snapshot' | head -n 1)
if [ -z "$ARCLIGHT_CHANNEL" ]; then
echo "No preferred channel found. Falling back to last in list."
ARCLIGHT_CHANNEL=$(echo "$CHANNEL_LIST_NAME" | tail -n 1)
fi
CHANNEL_TYPE=$(echo "$CHANNEL_LIST" | jq -r ".files[] | select(.name==\"${ARCLIGHT_CHANNEL}\") | .type")
echo "Auto-selected channel: ${ARCLIGHT_CHANNEL}"
else
if [ "$ARCLIGHT_CHANNEL" == "beta" ]; then
CHANNELS=("latest-snapshot" "versions-snapshot")
elif [ "$ARCLIGHT_CHANNEL" == "stable" ]; then
CHANNELS=("latest-stable" "versions-stable")
fi
for CHANNEL in "${CHANNELS[@]}"; do
if echo "$CHANNEL_LIST_NAME" | grep -q "$CHANNEL"; then
ARCLIGHT_CHANNEL="$CHANNEL"
break
fi
done
if [ -z "$ARCLIGHT_CHANNEL" ]; then
echo "Warning: Specified channel '${ARCLIGHT_CHANNEL}' not found for loader ${ARCLIGHT_LOADER} and Minecraft version ${MINECRAFT_VERSION}. Falling back to default channel."
ARCLIGHT_CHANNEL=$(echo "$CHANNEL_LIST_NAME" | grep -E 'latest-stable|version-stable|latest-snapshot|version-snapshot' | \
grep -x 'latest-stable' || \
echo "$CHANNEL_LIST_NAME" | grep -x 'version-stable' || \
echo "$CHANNEL_LIST_NAME" | grep -x 'latest-snapshot' || \
echo "$CHANNEL_LIST_NAME" | grep -x 'version-snapshot' | head -n 1)
if [ -z "$ARCLIGHT_CHANNEL" ]; then
ARCLIGHT_CHANNEL=$(echo "$CHANNEL_LIST_NAME" | tail -n 1)
fi
echo "Fallback channel: ${ARCLIGHT_CHANNEL}"
fi
CHANNEL_TYPE=$(echo "$CHANNEL_LIST" | jq -r ".files[] | select(.name==\"${ARCLIGHT_CHANNEL}\") | .type")
fi
echo "Fetching builds for ${ARCLIGHT_LOADER}-${MINECRAFT_VERSION}-${ARCLIGHT_CHANNEL}..."
if [ -z "$CHANNEL_TYPE" ] || [ "$CHANNEL_TYPE" == "null" ] || [ "$CHANNEL_TYPE" == "link" ]; then
BUILD_NAME=${ARCLIGHT_CHANNEL}
DOWNLOAD_URL="${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders/${ARCLIGHT_LOADER}/${ARCLIGHT_CHANNEL}"
elif [ "$CHANNEL_TYPE" == "directory" ]; then
BUILD=$(curl -s "${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders/${ARCLIGHT_LOADER}/${ARCLIGHT_CHANNEL}" | jq -r '.files[0]')
BUILD_NAME=$(echo "${BUILD}" | jq -r '.name')
DOWNLOAD_URL="${BASE_API_URL}/minecraft/${MINECRAFT_VERSION}/loaders/${ARCLIGHT_LOADER}/${ARCLIGHT_CHANNEL}/${BUILD_NAME}"
else
echo "Error: Unknown channel type. Exiting."
exit 1
fi
echo "Selected build: ${BUILD_NAME}"
fi
echo "Downloading Arclight from: ${DOWNLOAD_URL}"
if [ -f "${SERVER_JARFILE}" ]; then
echo "Backing up existing server jar..."
mv "${SERVER_JARFILE}" "${SERVER_JARFILE}.old"
fi
curl -s -L -o "${SERVER_JARFILE}" "${DOWNLOAD_URL}"
if [ $? -ne 0 ]; then
echo "Download failed. Please check the URL or your internet connection."
exit 1
fi
echo "Download complete. File saved as ${SERVER_JARFILE}"| Installation Image | ghcr.io/ptero-eggs/installers:debian | Installation Entrypoint | bash |
|---|