diff --git a/start.sh b/start.sh index 4449b6e..178bca7 100755 --- a/start.sh +++ b/start.sh @@ -7,7 +7,7 @@ # and acknowledge the original script and author. # ############################################################################################################# -CURRENT_VERSION="1.0.0" +CURRENT_VERSION="v1.0.2" # -------------------------------------------------- # You shouldn't need to change anything in this file @@ -19,7 +19,7 @@ REPO_OWNER="jiriks74" REPO_NAME="start_papermc.sh" # API URL -api_url="https://api.papermc.io/v2/projects/paper/versions/$select_version/builds" +api_url="" # Check for dependencies function check_dependencies { @@ -356,54 +356,31 @@ function launch_server { java $java_launchoptions -jar "$(basename ./paper-*.jar)" $mc_launchoptions } -# Function to update the script -function check_self_update { - # Send a request to the GitHub API to retrieve the latest release - response=$(curl -sL "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest") - - # Extract the latest version from the response - LATEST_VERSION=$($response | jq -r ".tag_name") - - # Compare the current version with the latest version - if [[ "$CURRENT_VERSION" != "$LATEST_VERSION" ]]; then - echo "An update is available!" - echo "Current version: $CURRENT_VERSION" - echo "Latest version: $LATEST_VERSION" - echo - echo "The script will continue in 15 seconds." - read -t 15 -p "Do you want to read the release notes? [y/N]" - if [ "$REPLY" == "y" ] || [ "$REPLY" == "Y" ]; then - # Extract the release notes from the response - RELEASE_NOTES=$(echo "$response" | jq -r ".body") - - # Print the release notes - echo "$RELEASE_NOTES" | less - - # Ask the user if they want to update - echo "The script will continue in 15 seconds." - echo "If you decide to update it is your responsibility to check the release notes for any breaking changes." - read -t 15 -p "Do you want to update? [y/N] " update - if [ "$update" == "y" ] || [ "$update" == "Y" ]; then - download_self_update - else - echo "Skipping update." - return - fi - fi - fi - # Download the update for the script function self_update { # Download the latest version of the script echo "Updating script..." - if curl --fail -sLJO "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_VERSION/start.sh"; then - chmod +x script.sh + # Download the file into start_new.sh + curl -sLJ -w '%{http_code}\n' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_VERSION/start.sh" > start_new.sh + # Check if the download was successful by checking the last line of the file for 200 + if [[ $(cat start_new.sh | tail -n 1) == 200 ]]; then + # Remove the last line of the file + sed -i '$d' start_new.sh + # Make the file executable + chmod +x start_new.sh + # Remove the old script + rm start.sh + echo "Removed old script" + # Rename the new script + mv start_new.sh start.sh + echo "Renamed new script" echo "Script updated successfully." echo read -p "Do you want to restart the script? [y/N] " restart if [ "$restart" == "y" ] || [ "$restart" == "Y" ]; then echo "Restarting..." - exec "./script.sh" "$@" + # Execute the new script + exec "./start.sh" "$@" exit 0 else echo "Exiting..." @@ -411,6 +388,51 @@ function self_update { fi else echo "Failed to update script." + rm start_new.sh + exit 5 + fi +} + +# Function to update the script +function check_self_update { + # Send a request to the GitHub API to retrieve the latest release + response=$(curl -sL "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/releases/latest") + + if [[ $response =~ "API rate limit exceeded" ]]; then + echo "API limit exceeded. Will not check for updates." + else + # Extract the latest version from the response + LATEST_VERSION=$(echo $response | jq -r ".tag_name") + + # Compare the current version with the latest version + if [[ "$CURRENT_VERSION" != "$LATEST_VERSION" ]]; then + echo "An update is available!" + echo "Current version: $CURRENT_VERSION" + echo "Latest version: $LATEST_VERSION" + echo + echo "The script will continue without updating in 15 seconds." + echo "If you decide to update it is your responsibility to check the release notes for any breaking changes." + read -t 15 -p "Do you want to read the release notes? [y/N]" + if [ "$REPLY" == "y" ] || [ "$REPLY" == "Y" ]; then + # Extract the release notes from the response + RELEASE_NOTES=$(echo "$response" | jq -r ".body") + + # Print the release notes + echo "$RELEASE_NOTES" | less + + # Ask the user if they want to update + echo + echo "The script will continue without updating in 15 seconds." + echo "If you decide to update it is your responsibility to check the release notes for any breaking changes." + read -t 15 -p "Do you want to update? [y/N] " update + if [ "$update" == "y" ] || [ "$update" == "Y" ]; then + self_update + else + echo "Skipping update." + return + fi + fi + fi fi } @@ -420,7 +442,13 @@ function load_config { if [ ! -f launch.cfg ]; then echo "Config file does not exist." echo "Downloading the default config file..." - if curl --fail -sLJO "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$CURRENT_VERSION/launch.cfg"; then + # Download the default config file for the current version + curl -sLJ -w '%{http_code}' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$CURRENT_VERSION/launch.cfg" > launch.cfg + # Check if the download was successful by checking the last line of the file for 200 + if [[ $(cat launch.cfg | tail -n 1) == 200 ]]; then + # Remove the last line of the file + sed -i '$d' launch.cfg + echo read -p "Do you want to edit the config file? [y/N] " edit_config if [ "$edit_config" == "y" ] || [ "$edit_config" == "Y" ]; then @@ -445,6 +473,7 @@ function load_config { # Load config source launch.cfg + api_url="https://api.papermc.io/v2/projects/paper/versions/$select_version/builds/" } # Main function @@ -452,6 +481,9 @@ function main { # Check for script updates check_self_update + # Load config + load_config + # Check dependencies check_dependencies @@ -474,7 +506,8 @@ function main { # Check for updates on GitHub if [[ "$1" == "--redownload" ]]; then self_update -else if [[ "$1" == "--help" ]]; then +fi +if [[ "$1" == "--help" ]]; then echo "Usage: ./script.sh [OPTION]" echo "Starts the Minecraft server." echo @@ -486,7 +519,8 @@ else if [[ "$1" == "--help" ]]; then echo "If the file does not exist, it will be downloaded automatically when the script is run and you will be asked if you want to edit it." echo echo "For more information, see:" - echo "https://github.com/$GITHUB_USER/$GITHUB_REPO" + echo "https://github.com/$REPO_OWNER/$REPO_NAME" + exit 0 else # Run the main function main