#!/bin/bash set -e cd /home/container || { echo "ERROR: /home/container does not exist" exit 1 } # Install if needed if [[ "$BL_INST_FORCE" == "1" ]] || [ ! -f "Blockland.exe" ]; then source /usr/local/bin/install-bl fi # Required vars [ -z "$BL_PORT" ] && echo "Missing BL_PORT" && exit 1 [ -z "$BL_GAMEMODE" ] && echo "Missing BL_GAMEMODE" && exit 1 if [[ "$BL_DEDI_LAN" == "1" ]]; then dedi="dedicatedLAN" else [ -z "$BL_DTOKEN" ] && echo "Missing BL_DTOKEN" && exit 1 dedi="dedicated" fi # Create wine prefix if missing if [ ! -d "$HOME/.wine" ]; then echo "Creating wine prefix..." wineboot -i sleep 3 fi if [ "${BL_UNZIP_ADDONS:-0}" -eq 1 ]; then echo "Processing Add-Ons zips..." cd /home/container/Add-Ons || exit 1 for zip in *.zip; do [ -f "$zip" ] || continue addon_name="${zip%.zip}" echo "Extracting $zip..." # Extract into a temp directory first mkdir -p "__tmp_extract__" unzip -o "$zip" -d "__tmp_extract__" >/dev/null # Count top-level items in extraction item_count=$(find "__tmp_extract__" -mindepth 1 -maxdepth 1 | wc -l) if [ "$item_count" -eq 1 ]; then first_item=$(find "__tmp_extract__" -mindepth 1 -maxdepth 1) if [ -d "$first_item" ]; then # Proper folder structure, just move it mv "$first_item" . else # Single loose file — fix structure mkdir -p "$addon_name" mv "$first_item" "$addon_name"/ fi else # Multiple loose files — put them in folder mkdir -p "$addon_name" mv "__tmp_extract__"/* "$addon_name"/ fi rm -rf "__tmp_extract__" rm -f "$zip" done fi # Ensure we're in the correct directory (server root where Blockland.exe lives) cd /home/container || exit 1 if [ ! -f "Blockland.exe" ]; then echo "Blockland.exe not found!" exit 1 fi echo "Launching Blockland..." server_name_args=() [ -n "$BL_SERVER_NAME" ] && server_name_args=(-serverName "$BL_SERVER_NAME") max_players_args=() [ -n "$BL_MAX_PLAYERS" ] && max_players_args=(-maxPlayers "$BL_MAX_PLAYERS") exec xvfb-run -a wine "Blockland.exe" \ ptlaaxobimwroe \ -${dedi} \ -port "$BL_PORT" \ -dtoken "$BL_DTOKEN" \ -gamemode "$BL_GAMEMODE" \ "${server_name_args[@]}" \ "${max_players_args[@]}" \ $BL_EXTRA_ARGS