msman.sh/.msman/paper.sh

127 lines
3.6 KiB
Bash

#!/bin/bash
set -e
# API URL
api_url="https://api.papermc.io/v2/projects/paper/versions/$version/builds"
# Check if the version and build are valid
function check_version_valid {
if curl -s "$api_url" | grep -q '{"error":"Version not found."}'; then
>&2 echo "Error: Invalid version selected: $version"
exit 2
else
# Check if selected build exists
if [ ! -z "$build" ]; then
# WARNING: Check if the shortened versin works
# if curl -Is "https://api.papermc.io/v2/projects/paper/versions/$version/builds/$build/downloads/paper-$version-$build.jar" | grep "HTTP/2 404" >/dev/null; then
if curl -Is "$api_url/$build/downloads/paper-$version-$build.jar" | grep "HTTP/2 404" >/dev/null; then
>&2 echo "Error: Invalid build selected: $build"
exit 2
fi
fi
fi
}
# Download server set by $version and $download_build
function download_server {
# Download the server
echo "Downloading PaperMC server..."
echo " - Version $version"
echo " - Build $download_build"
curl "https://api.papermc.io/v2/projects/paper/versions/$version/builds/$download_build/downloads/paper-$version-$download_build.jar" -o "./paper-$version-$download_build.jar"
echo "Download complete."
}
# Check if up to date
function check_updates {
if [[ $server_file == false ]]; then
download_build=$latest_build
update_version=true
update_build=true
return
else
echo Checking for updates...
fi
# Check if $build is empty
if [[ -z $build ]]; then
# Check if the current version is the same as the one selected
if [[ $current_version == $version ]]; then
# Check if the current build is the same as the one selected
if [[ $current_build == $latest_build ]]; then
echo "Server is up to date."
else
echo "Server is not up to date."
download_build=$latest_build
update_build=true
fi
else
# Check if $server_file is false
if [[ $server_file != false ]]; then
ask_version_differs
echo "Server is not up to date."
download_build=$latest_build
update_version=true
fi
fi
else
# Check if the current version is the same as the one selected
if [[ $current_version == $version ]]; then
# Check if the current build is the same as the one selected
if [[ $current_build == $build ]]; then
echo "Server is up to date."
else
echo "Server is not up to date."
download_build=$build
update_build=true
fi
else
# Check if $server_file is false
if [[ $server_file != false ]]; then
ask_version_differs
echo "Server is not up to date."
download_build=$build
update_version=true
fi
fi
fi
}
# Get the latest build number
function get_latest_build {
# Get the latest build number
latest_build=$(curl -s $api_url | jq '.builds[-1].build')
}
# Check for updates
function check_and_update {
if [[ $server_file == false ]]; then
download_build=$latest_build
update_version=true
update_build=true
else
echo Checking for updates...
fi
# Get the latest build number
get_latest_build
# Check if the current version is up to date
check_updates
# Check if $build_update is true or $version_update is true
if [[ $update_build == true ]] || [[ $update_version == true ]]; then
if [[ $server_file != false ]]; then
old_server_file=$server_file
server_file="paper-$version-$download_build.jar"
download_server
# Delete the old server file
delete_old_server
else
server_file="paper-$version-$download_build.jar"
download_server
fi
fi
echo
echo
}