Compare commits

..

No commits in common. "main" and "v1.0.1" have entirely different histories.
main ... v1.0.1

16 changed files with 346 additions and 223 deletions

13
.github/FUNDING.yml vendored

@ -1,13 +0,0 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: jiriks74 # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

1
.gitignore vendored

@ -1 +0,0 @@
msman-helper.tar.gz

@ -5,10 +5,9 @@ function get_existing_server {
if ls paper-*.jar 1> /dev/null 2>&1; then if ls paper-*.jar 1> /dev/null 2>&1; then
existing_server_type="paper" existing_server_type="paper"
get_existing_paper get_existing_paper
elif ls fabric-server-mc.*.jar 1> /dev/null 2>&1; then
existing_server_type="fabric"
get_existing_fabric
# TODO: Add support for other server types # TODO: Add support for other server types
# elif ls fabric-*.jar 1> /dev/null 2>&1; then
# existing_server_type="fabric"
# elif ls spigot-*.jar 1> /dev/null 2>&1; then # elif ls spigot-*.jar 1> /dev/null 2>&1; then
# existing_server_type="spigot" # existing_server_type="spigot"
# elif ls craftbukkit-*.jar 1> /dev/null 2>&1; then # elif ls craftbukkit-*.jar 1> /dev/null 2>&1; then
@ -31,30 +30,6 @@ function get_existing_server {
fi fi
} }
# Get existing version and build of fabric
function get_existing_fabric {
# Get the current server file name
server_file=$(basename ./fabric-server-mc.*.jar)
# Assign the file name to a variable
FILE=$server_file
# Remove the .jar extension
FILE=${FILE%.jar}
# Split by - and get the third field (mc.x.x.x)
current_version=$(echo $FILE | cut -d. -f2,3,4 | cut -d- -f1)
# Split by - and get the fourth field (launcher.x.x.x)
current_build=$(echo $FILE | cut -d- -f4 | cut -d. -f2,3,4)
echo "Current server file: $server_file"
echo " - Version $current_version"
echo " - Build $current_build"
echo
echo
}
# Get existing version and build of paper # Get existing version and build of paper
function get_existing_paper { function get_existing_paper {
# Get the current server file name # Get the current server file name

@ -86,16 +86,16 @@ function check_script_java {
# Get the system Java version # Get the system Java version
function check_java_exec { function check_java_exec {
# Check if java is installed # Check if java is installed
if ! command -v java &> /dev/null; then if ! command -v java &> /dev/null
java_version=false then
else java_version=false
# Get the current Java version and extract the build number
java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F '.' '{print $1}')
fi fi
if [[ $java_version != $required_java ]]; then # If java is installed, get the version (the java_version won't be 0)
java_version=false if [[ $java_version != false ]]; then
# Get the current Java version and extract the build number
java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F '.' '{print $1}')
fi fi
} }
@ -172,11 +172,11 @@ function download_jre {
rm java.tar.gz rm java.tar.gz
elif [[ $required_java == "16" ]]; then elif [[ $required_java == "16" ]]; then
echo "Downloading Java 16" echo "Downloading Java 16"
curl -L -o java.tar.gz "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_$(echo $arch)_linux_hotspot_16.0.2_7.tar.gz" curl -L -o java.tar.gz "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.18%2B10/OpenJDK11U-jre_$(echo $arch)_linux_hotspot_16.0.2_7.tar.gz"
echo "Extracting Java 16" echo "Extracting Java 16"
tar -xzf java.tar.gz tar -xzf java.tar.gz
echo "Moving Java 16 to $(echo $HOME)/.adoptium_java/jre16" echo "Moving Java 16 to $(echo $HOME)/.adoptium_java/jre16"
mv jdk-16.0.2+7 "$(echo $HOME)/.adoptium_java/jre16" mv jdk-16.0.2+7-jre "$(echo $HOME)/.adoptium_java/jre16"
echo "Removing temporary files" echo "Removing temporary files"
rm java.tar.gz rm java.tar.gz
elif [[ $required_java == "17" ]]; then elif [[ $required_java == "17" ]]; then

@ -37,9 +37,6 @@ function check_updates {
download_build=$latest_build download_build=$latest_build
update_version=true update_version=true
update_build=true update_build=true
return
else
echo Checking for updates...
fi fi
# Check if $build is empty # Check if $build is empty

3
.ms-manager/version.sh Normal file

@ -0,0 +1,3 @@
#!/bin/bash
EXTRA_SCRIPTS_VERSION="v1.0.0"

@ -1,3 +0,0 @@
#!/bin/bash
EXTRA_SCRIPTS_VERSION="v2.1.6"

@ -1,21 +0,0 @@
# Simple makefile to create a tarball of the msman helper scripts
# Turn off verbose mode
MAKEFLAGS += -s
all:
CURRENT_SCRIPT_VERSION=`grep "CURRENT_SCRIPT_VERSION=" msman.sh | sed -e "s/CURRENT_SCRIPT_VERSION=//g" | head -n -1`; \
EXTRA_VERSION=`grep "EXTRA_SCRIPTS_VERSION=" .msman/version.sh | sed -e "s/EXTRA_SCRIPTS_VERSION=//g"`; \
if [ "$$CURRENT_SCRIPT_VERSION" != "$$EXTRA_VERSION" ]; then \
echo "ERROR: The version in msman.sh and .msman/version.sh are not the same!"; \
echo "ERROR: Please make sure they are the same."; \
exit 1; \
fi
rm -rf msman
mkdir msman
cp -r .msman msman
tar -czf msman-helper.tar.gz msman
rm -rf msman
clean:
rm -rf msman
rm -f msman-hepler.tar.gz

@ -8,7 +8,7 @@ branch.
The project grew out of the scope I envisioned at first, surprisingly quickly LOL, The project grew out of the scope I envisioned at first, surprisingly quickly LOL,
so I moved all my development here. so I moved all my development here.
This project aims to support more Minecraft servers than just paper. This project aims to support more minecraft servers rather than just paper.
## Features ## Features
@ -16,7 +16,7 @@ This project aims to support more Minecraft servers than just paper.
- Checks for the correct Java version installed - Checks for the correct Java version installed
- Enables you to download a download a portable Java version from [Adoptium](https://adoptium.net/) - Enables you to download a download a portable Java version from [Adoptium](https://adoptium.net/)
- The script downloads it to `~/.adoptium_java` allowing you to use one - The script download's it to `~/.adoptium_java` allowing you to use one
Java downlaod across multiple server instances Java downlaod across multiple server instances
- It also allows you to use multiple Java versions allowing you to run - It also allows you to use multiple Java versions allowing you to run
multiple Minecraft servers requiring different Java versions multiple Minecraft servers requiring different Java versions
@ -39,12 +39,11 @@ This project aims to support more Minecraft servers than just paper.
#### Self-update #### Self-update
- This script can self-update itself without the need for user intervention - This script can self-update itself without the need for user doing it manually
## Currently supported servers ## Currently supported servers
- [Paper](https://papermc.io/) - [Paper](https://papermc.io/)
- [Fabric](https://fabricmc.net/use/server/)
## Dependencies ## Dependencies
@ -66,32 +65,11 @@ you're running something like Ubuntu.*
> undefined behavior and may cause the script to crash or perform unexpected actions. > undefined behavior and may cause the script to crash or perform unexpected actions.
> >
> I strongly advise against making any modifications to the server's `.jar` file > I strongly advise against making any modifications to the server's `.jar` file
> manually, as it may interfere with the functionality of this script. > manually, as it may interfere with the proper functioning of this script.
## Basic setup ## Basic setup
- Option 1: Oneliner - [ ] ***TBD***
```bash
curl -sSL "https://raw.githubusercontent.com/jiriks74/msman.sh/main/msman.sh" -o msman.sh && chmod +x msman.sh && ./msman.sh
```
- Option 2: Download `msman.sh` from release to where you want your minecraft
server and start it with
```bash
chmod +x msman.sh
./msman.sh
```
- Option 2: Clone the repository
```bash
git clone https://github.com/jiriks74/msman.sh minecraft_server
cd minecraft_server
chmod +x msman.sh
./msman.sh
```
## Updating the server ## Updating the server

@ -1,7 +1,7 @@
##################################################### #############################################################
# Settings for start_papermc.sh script # # Settings for start_papermc.sh script #
# Available at https://github.com/jiriks74/msman.sh # # Available at https://github.com/jiriks74/start_papermc.sh #
##################################################### #############################################################
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #
# This script is not made for migrating versions. # # This script is not made for migrating versions. #
@ -14,9 +14,7 @@
# I am not responsible for any loss of data # # I am not responsible for any loss of data #
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #
# Supported server types: # Only paper is currently supported
# - paper
# - fabric
server_type="paper" server_type="paper"
version="1.19.3" version="1.19.3"
# Leave blank to use the latest build (auto updates on every run) # Leave blank to use the latest build (auto updates on every run)
@ -40,7 +38,7 @@ mem="6000M"
# Flags for the server itself # Flags for the server itself
# Usefull fot setting rcon password, server port, etc. # Usefull fot setting rcon password, server port, etc.
mc_launchoptions="nogui" mc_launchoptions="-nogui"
# If you want to get rid of script updates notifications, set the below to false # If you want to get rid of script updates notifications, set the below to false
check_for_script_updates=true check_for_script_updates=true

BIN
ms-man-helper.tar.gz Normal file

Binary file not shown.

@ -0,0 +1,51 @@
#!/bin/bash
set -e
# Detect the server type
function get_existing_server {
if ls paper-*.jar 1> /dev/null 2>&1; then
existing_server_type="paper"
get_existing_paper
# TODO: Add support for other server types
# elif ls fabric-*.jar 1> /dev/null 2>&1; then
# existing_server_type="fabric"
# elif ls spigot-*.jar 1> /dev/null 2>&1; then
# existing_server_type="spigot"
# elif ls craftbukkit-*.jar 1> /dev/null 2>&1; then
# existing_server_type="craftbukkit"
# elif ls vanilla-*.jar 1> /dev/null 2>&1; then
# existing_server_type="vanilla"
else
if ! ls *.jar 1> /dev/null 2>&1; then
echo "No server file found."
echo
echo
existing_server_type=false
server_file=false
else
>&2 echo "$(ls *.jar) file was found."
>&2 echo "Unknown server type."
exit 10
# TODO: Ask the user if they want to continue
fi
fi
}
# Get existing version and build of paper
function get_existing_paper {
# Get the current server file name
server_file=$(basename ./paper-*.jar)
# Extract the version and build number using cut command
current_version=$(echo "$server_file" | cut -d'-' -f2)
current_build=$(echo "$server_file" | cut -d'-' -f3)
# Remove the rest of the file names
current_version="${current_version%-*}"
current_build="${current_build%.jar}"
echo "Current server file: $server_file"
echo " - Version $current_version"
echo " - Build $current_build"
echo
echo
}

192
ms-manager/java.sh Normal file

@ -0,0 +1,192 @@
#!/bin/bash
set -e
# Setup Java
function setup_java {
# Get the required Java version for the Minecraft version
get_required_java
# Check if java was downloaded by the script
check_script_java
# Check if java is installed
if [[ $java_version == false ]]; then
check_java_exec
if [[ $java_version != false ]]; then
echo "System Java $java_version will be used."
fi
fi
if [[ $java_version == false ]]; then
>&2 echo "Java $required_java is not installed."
>&2 echo "Java $required_java is required to run Minecraft $version."
# Ask the user if they want to download Adoptium JRE
ask_jre
fi
echo
echo
}
# Ask the user if they want to download Adoptium JRE
function ask_jre {
echo "This script can download the correct Adoptium JRE into '$(echo $HOME)/.adoptium_java' for you."
echo "You have 15 seconds to confirm or the script will exit."
read -t 12 -p "Do you want to download Adoptium JRE? (y/N)" download_java
if [[ $download_java == "y" ]] || [[ $download_java == "Y" ]]; then
get_os_arch
download_jre
check_script_java
if [[ $java_version == false ]]; then
>&2 echo "Java $required_java was not downloaded correctly."
>&2 echo "Please install Java $required_java manually."
exit 4
fi
else
>&2 echo "Please install Java $required_java and run this script again."
exit 12
fi
}
# Check if java was downloaded by the script
function check_script_java {
if [[ -d "$(echo $HOME)/.adoptium_java" ]]; then
if [[ $required_java == "8" ]]; then
if [[ -d "$(echo $HOME)/.adoptium_java/jre8" ]]; then
java_version=8
if [[ -f "$(echo $HOME).adoptium_java/jre8/bin/java" ]]; then
PATH="$(echo $HOME)/.adoptium_java/jre8/bin:$PATH"
fi
fi
elif [[ $required_java == "11" ]]; then
if [[ -d "$(echo $HOME)/.adoptium_java/jre11" ]]; then
java_version=11
PATH="$(echo $HOME)/.adoptium_java/jre11/bin:$PATH"
fi
elif [[ $required_java == "16" ]]; then
if [[ -d "$(echo $HOME)/.adoptium_java/jre16" ]]; then
java_version=16
PATH="$(echo $HOME)/.adoptium_java/jre16/bin:$PATH"
fi
elif [[ $required_java == "17" ]]; then
if [[ -d "$(echo $HOME)/.adoptium_java/jre17" ]]; then
java_version=17
PATH="$(echo $HOME)/.adoptium_java/jre17/bin:$PATH"
fi
fi
check_java_exec
if [[ $java_version == $required_java ]]; then
echo "Java $java_version detected in '$(echo $HOME)/.adoptium_java/jre$(echo $java_version)/bin/java.' will be used."
else
java_version=false
fi
else
java_version=false
fi
}
# Get the system Java version
function check_java_exec {
# Check if java is installed
if ! command -v java &> /dev/null
then
java_version=false
fi
# If java is installed, get the version (the java_version won't be 0)
if [[ $java_version != false ]]; then
# Get the current Java version and extract the build number
java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F '.' '{print $1}')
fi
}
# Get the required Java version for the Minecraft version
# For version 1.8 to 1.11 use java 8
# For version 1.12 to 1.16.4 use java 11
# For version 1.16.5 use java 16
# For version 1.17.1 to 1.18.1+ use java 17
function get_required_java {
# Extract the middle number of the Minecraft version
minecraft_middle=$(echo "$version" | awk -F '.' '{print $2}')
# Get the java version for the defined server version
if (( 8 <= minecraft_middle && minecraft_middle <= 11 )); then
if ! [[ $java_version -eq 8 ]]; then
required_java=8
fi
elif (( 12 <= minecraft_middle && minecraft_middle <= 16 )); then
if ! [[ $java_version -eq 11 ]]; then
required_java=11
fi
elif (( minecraft_middle == 17 )); then
if ! [[ $java_version -eq 16 ]]; then
required_java=16
fi
elif (( 18 <= minecraft_middle )); then
if ! [[ $java_version -eq 17 ]]; then
required_java=17
fi
else
>&2 echo "Unsupported Minecraft version $select_version."
fi
}
# Check host architecture
function get_os_arch {
if [[ $(uname -m) == "x86_64" ]]; then
arch="x64"
elif [[ $(uname -m) == "aarch64" ]]; then
arch="aarch64"
else
>&2 echo "Unsupported architecture $(uname -m)."
>&2 echo "Please install Java $required_java manually."
exit 3
fi
}
# Download openjdk jre
function download_jre {
# Check if .java folder exists
if ! [[ -d "$(echo $HOME)/.adoptium_java" ]]; then
echo "Creating $(echo $HOME)/.adoptium_java folder"
mkdir "$(echo $HOME)/.adoptium_java"
fi
# Download the correct version of Java
if [[ $required_java == "8" ]]; then
echo "Downloading Adoptium JRE 8"
curl -L -o java.tar.gz "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u362-b09/OpenJDK8U-jre_$(echo $arch)_linux_hotspot_8u362b09.tar.gz"
echo "Extracting Java 8"
tar -xzf java.tar.gz
echo "Moving Java 8 to $(echo $HOME)/.adoptium_java/jre8"
mv jdk8u362-b09-jre "$(echo $HOME)/.adoptium_java/jre8"
echo "Removing temporary files"
rm java.tar.gz
elif [[ $required_java == "11" ]]; then
echo "Downloading Adoptium JRE 11"
curl -L -o java.tar.gz "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.18%2B10/OpenJDK11U-jre_$(echo $arch)_linux_hotspot_11.0.18_10.tar.gz"
echo "Extracting Java 11"
tar -xzf java.tar.gz
echo "Moving Java 11 to $(echo $HOME)/.adoptium_java/jre11"
mv jdk-11.0.18+10-jre "$(echo $HOME)/.adoptium_java/jre11"
echo "Removing temporary files"
rm java.tar.gz
elif [[ $required_java == "16" ]]; then
echo "Downloading Java 16"
curl -L -o java.tar.gz "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.18%2B10/OpenJDK11U-jre_$(echo $arch)_linux_hotspot_16.0.2_7.tar.gz"
echo "Extracting Java 16"
tar -xzf java.tar.gz
echo "Moving Java 16 to $(echo $HOME)/.adoptium_java/jre16"
mv jdk-16.0.2+7-jre "$(echo $HOME)/.adoptium_java/jre16"
echo "Removing temporary files"
rm java.tar.gz
elif [[ $required_java == "17" ]]; then
echo "Downloading Java 17"
curl -L -o java.tar.gz "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.6%2B10/OpenJDK17U-jre_$(echo $arch)_linux_hotspot_17.0.6_10.tar.gz"
echo "Extracting Java 17"
tar -xzf java.tar.gz
echo "Moving Java 17 to $(echo $HOME)/.adoptium_java/jre17"
mv jdk-17.0.6+10-jre "$(echo $HOME)/.adoptium_java/jre17"
echo "Removing temporary files"
rm java.tar.gz
fi
}

@ -1,19 +1,19 @@
#!/bin/bash #!/bin/bash
set -e set -e
# API URL # API URL
api_url="https://meta.fabricmc.net/v2/versions/" api_url="https://api.papermc.io/v2/projects/paper/versions/$version/builds"
# Example server's jar file name:
# fabric-server-mc.1.19.3-loader.0.14.14-launcher.0.11.1.jar
# Check if the version and build are valid
function check_version_valid { function check_version_valid {
if [[ $(curl -s "$(echo $api_url)/loader/$(echo $version)") == "[]" ]]; then if curl -s "$api_url" | grep -q '{"error":"Version not found."}'; then
>&2 echo "Error: Invalid version selected: $version" >&2 echo "Error: Invalid version selected: $version"
exit 2 exit 2
else else
# Check if selected build exists # Check if selected build exists
if [ ! -z "$build" ]; then if [ ! -z "$build" ]; then
if [[ $(curl -s "$(echo $api_url)/loader/$(echo $version)/$(echo $build)") == "\"no loader version found for $(echo $version)\"" ]]; 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" >&2 echo "Error: Invalid build selected: $build"
exit 2 exit 2
fi fi
@ -21,24 +21,22 @@ function check_version_valid {
fi fi
} }
# Download server set by $version and $download_build
function download_server { function download_server {
# Download the server # Download the server
echo "Downloading Fabric server..." echo "Downloading PaperMC server..."
echo " - Version $version" echo " - Version $version"
echo " - Build $download_build" echo " - Build $download_build"
echo " - Installer $latest_installer" 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"
curl "$(echo $api_url)/loader/$(echo $version)/$(echo $download_build)/$(echo $latest_installer)/server/jar" -o "./fabric-server-mc.$(echo $version)-loader.$(echo $download_build)-launcher.$(echo $latest_installer).jar"
echo "Download complete." echo "Download complete."
} }
# Check if up to date
function check_updates { function check_updates {
if [[ $server_file == false ]]; then if [[ $server_file == false ]]; then
download_build=$latest_build download_build=$latest_build
update_version=true update_version=true
update_build=true update_build=true
return
else
echo Checking for updates...
fi fi
# Check if $build is empty # Check if $build is empty
@ -55,10 +53,12 @@ function check_updates {
fi fi
else else
# Check if $server_file is false # Check if $server_file is false
ask_version_differs if [[ $server_file != false ]]; then
echo "Server is not up to date." ask_version_differs
download_build=$latest_build echo "Server is not up to date."
update_version=true download_build=$latest_build
update_version=true
fi
fi fi
else else
# Check if the current version is the same as the one selected # Check if the current version is the same as the one selected
@ -73,24 +73,29 @@ function check_updates {
fi fi
else else
# Check if $server_file is false # Check if $server_file is false
ask_version_differs if [[ $server_file != false ]]; then
echo "Server is not up to date." ask_version_differs
download_build=$build echo "Server is not up to date."
update_version=true download_build=$build
update_version=true
fi
fi fi
fi fi
} }
# Get the latest build number and installer version # Get the latest build number
function get_latest_build { function get_latest_build {
# Get the latest build number # Get the latest build number
latest_build=$(curl -s "$(echo $api_url)/loader/$version" | jq -r '.[0].loader.version') latest_build=$(curl -s $api_url | jq '.builds[-1].build')
latest_installer=$(curl -s "$(echo $api_url)/installer/" | jq -r '.[0].version')
} }
# Check if the server is up to date and update if it isn't # Check for updates
function check_and_update { function check_and_update {
if ! [[ $server_file == false ]]; then if [[ $server_file == false ]]; then
download_build=$latest_build
update_version=true
update_build=true
else
echo Checking for updates... echo Checking for updates...
fi fi
@ -104,15 +109,16 @@ function check_and_update {
if [[ $update_build == true ]] || [[ $update_version == true ]]; then if [[ $update_build == true ]] || [[ $update_version == true ]]; then
if [[ $server_file != false ]]; then if [[ $server_file != false ]]; then
old_server_file=$server_file old_server_file=$server_file
server_file="fabric-server-mc.$version-loader.$download_build-launcher.$latest_installer.jar" server_file="paper-$version-$download_build.jar"
download_server download_server
# Delete the old server file # Delete the old server file
delete_old_server delete_old_server
else else
server_file="fabric-server-mc.$version-loader.$download_build-launcher.$latest_installer.jar" server_file="paper-$version-$download_build.jar"
download_server download_server
fi fi
fi fi
echo echo
echo echo
} }

3
ms-manager/version.sh Normal file

@ -0,0 +1,3 @@
#!/bin/bash
EXTRA_SCRIPTS_VERSION="v1.0.1"

122
msman.sh

@ -3,12 +3,12 @@ set -e
############################################################################################################# #############################################################################################################
# MinecraftServerMANager # # MinecraftServerMANager #
# by jiriks74 # # by jiriks74 #
# https://github.com/jiriks74/msman.sh # # https://github.com/jiriks74/start_papermc.sh #
# This script is under GPLv3, if you want to distribute changes you have to do so under the same license # # This script is under GPLv3, if you want to distribute changes you have to do so under the same license #
# and acknowledge the original script and author. # # and acknowledge the original script and author. #
############################################################################################################# #############################################################################################################
CURRENT_SCRIPT_VERSION="v2.1.6" CURRENT_SCRIPT_VERSION="v1.0.1"
# -------------------------------------------------- # --------------------------------------------------
# You shouldn't need to change anything in this file # You shouldn't need to change anything in this file
@ -107,7 +107,7 @@ function ask_version_differs {
echo echo
echo echo
echo "The current server version differs from the one you selected." echo "The current server version differs from the one you selected."
echo "The server version is $current_version and the selected version is $version." echo "The server version is $current_version and the selected version is $select_version."
echo "Do you want to update the server version?" echo "Do you want to update the server version?"
echo "This can cause many issues if you don't know what you are doing." echo "This can cause many issues if you don't know what you are doing."
echo echo
@ -132,36 +132,6 @@ function ask_version_differs {
fi fi
} }
# Ask if the new server version differs from the old one
function ask_server_type_differs {
echo
echo
echo "The current server type differs from the one you selected."
echo "The server version is $existing_server_type and the selected type is $server_type."
echo "Do you want to change the server type?"
echo "This can cause many issues if you don't know what you are doing."
echo
echo "I am not responsible for any data loss caused by changing the server type."
echo
echo "You have 15 seconds to respond, or the script will exit"
read -t 15 -p "Do you want to change the server type? [y/N] " type_differs
if [ "$type_differs" != "y" ] && [ "$type_differs" != "Y" ]; then
echo "Server type not changed."
echo "To start the server again with the server type, change the server type in the config to $existing_server_type."
exit 4
fi
if [ "$type_differs" == "y" ] || [ "$type_differs" == "Y" ]; then
read -t 15 -p "Are you sure you want to change the server type? [y/N] " type_differs
if [ "$type_differs" != "y" ] && [ "$type_differs" != "Y" ]; then
echo "Server type not changed."
echo "To start the server again with the server type, change the server type in the config to $existing_server_type."
exit 4
fi
fi
}
# Ask if the new server version differs from the old one # Ask if the new server version differs from the old one
function ask_server_differs { function ask_server_differs {
echo echo
@ -229,7 +199,7 @@ function launch_server {
echo "Starting the server..." echo "Starting the server..."
echo echo
echo echo
java $java_launchoptions -jar $server_file $mc_launchoptions java $java_launchoptions -jar "$(basename ./paper-*.jar)" $mc_launchoptions
} }
# Helper scripts update # Helper scripts update
@ -237,22 +207,20 @@ function helper_scripts_update {
# Download matching version of helper scripts # Download matching version of helper scripts
echo "Updating helper scripts..." echo "Updating helper scripts..."
# Download the file into ms-man-helper.tar.gz # Download the file into ms-man-helper.tar.gz
if [[ $(curl -sLJ -w '%{http_code}\n' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$CURRENT_SCRIPT_VERSION/msman-helper.tar.gz" -o msman-helper.tar.gz) == 200 ]]; then if [[ $(curl -sLJ -w '%{http_code}\n' "https://github.com/jiriks74/msman.sh/releases/download/v1.0.0/ms-man-helper.tar.gz" -o msman-helper.tar.gz) == 200 ]]; then
# Remove the last line of the file
# sed -i '$d' ms-man-helper.tar.gz
# Extract the files from ms-man-helper.tar.gz # Extract the files from ms-man-helper.tar.gz
tar -xzf msman-helper.tar.gz tar -xzf msman-helper.tar.gz
if [ -d .msman ]; then # Remove the old script
# Remove the old scripts echo "Removing old helper scripts..."
echo "Removing old helper scripts..." rm -rf .msman
rm -rf .msman echo "Removed old script"
echo "Removed old script"
fi
echo "Moving new helper scripts into place..." echo "Moving new helper scripts into place..."
mv msman/.msman .msman mv msman .msman
echo "Removing temporary files..." echo "Removing temporary files..."
rm msman-helper.tar.gz rm msman-helper.tar.gz
rm -rf msman
echo "Helper scripts updated successfully." echo "Helper scripts updated successfully."
EXTRA_SCRIPTS_VERSION=$(echo $CURRENT_SCRIPT_VERSION)
echo echo
echo echo
else else
@ -267,20 +235,20 @@ function helper_scripts_update {
function self_update { function self_update {
# Download the latest version of the script # Download the latest version of the script
echo "Updating script..." echo "Updating script..."
# Download the file into msman_new.sh # Download the file into start_new.sh
if [[ $(curl -sLJ -w '%{http_code}\n' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_SCRIPT_VERSION/msman.sh" -o msman_new.sh) == 200 ]]; then curl -sLJ -w '%{http_code}\n' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$LATEST_SCRIPT_VERSION/start.sh" > msman_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' msman_new.sh
# Make the file executable # Make the file executable
chmod +x msman_new.sh chmod +x msman_new.sh
# Remove the old script # Remove the old script
if [[ -f msman.sh ]]; then rm msman.sh
echo "Removing old script..." echo "Removed old script"
rm msman.sh
echo "Removed old script"
fi
echo "Moving new script into place..."
# Rename the new script # Rename the new script
mv msman_new.sh msman.sh mv msman_new.sh msman.sh
echo "Moved new script into place" echo "Renamed new script"
echo "Script updated successfully." echo "Script updated successfully."
echo echo
else else
@ -350,9 +318,8 @@ function check_self_update {
read -t 15 -p "Do you want to update? [y/N] " update read -t 15 -p "Do you want to update? [y/N] " update
if [ "$update" == "y" ] || [ "$update" == "Y" ]; then if [ "$update" == "y" ] || [ "$update" == "Y" ]; then
self_update self_update
CURRENT_SCRIPT_VERSION=$LATEST_SCRIPT_VERSION CURRENT_VERSION=$LATEST_SCRIPT_VERSION
check_helper_scripts check_helper_scripts
bash -c "$(pwd)/msman.sh"
else else
echo "Skipping update." echo "Skipping update."
return return
@ -370,7 +337,12 @@ function load_config {
echo "Config file does not exist." echo "Config file does not exist."
echo "Downloading the default config file..." echo "Downloading the default config file..."
# Download the default config file for the current version # Download the default config file for the current version
if [[ $(curl -sLJ -w '%{http_code}\n' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$CURRENT_SCRIPT_VERSION/msman.cfg" -o msman.cfg) == 200 ]]; then curl -sLJ -w '%{http_code}' "https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/$CURRENT_SCRIPT_VERSION/msman.cfg" > msman.cfg
# Check if the download was successful by checking the last line of the file for 200
if [[ $(cat msman.cfg | tail -n 1) == 200 ]]; then
# Remove the last line of the file
sed -i '$d' msman.cfg
echo echo
read -p "Do you want to edit the config file? [y/N] " edit_config read -p "Do you want to edit the config file? [y/N] " edit_config
if [ "$edit_config" == "y" ] || [ "$edit_config" == "Y" ]; then if [ "$edit_config" == "y" ] || [ "$edit_config" == "Y" ]; then
@ -408,7 +380,7 @@ function load_config {
# Delete old server file with name $old_server_file # Delete old server file with name $old_server_file
function delete_old_server { function delete_old_server {
# Delete the old server file # Delete the old server file
echo "Deleting old server file '$server_file...'" echo "Deleting old server file $server_file..."
rm "$old_server_file" rm "$old_server_file"
echo "Old server file deleted." echo "Old server file deleted."
} }
@ -423,12 +395,12 @@ function load_script {
# Load the correct script # Load the correct script
if [[ $server_type == "paper" ]]; then if [[ $server_type == "paper" ]]; then
source "./.msman/paper.sh" source "./.msman/paper.sh"
elif [[ $server_type == "fabric" ]]; then
source "./.msman/fabric.sh"
# elif [[ $server_type == "vanilla" ]]; then # elif [[ $server_type == "vanilla" ]]; then
# source "$cwd/msman/vanilla.sh" # source "$cwd/msman/vanilla.sh"
# elif [[ $server_type == "forge" ]]; then # elif [[ $server_type == "forge" ]]; then
# source "$cwd/msman/forge.sh" # source "$cwd/msman/forge.sh"
# elif [[ $server_type == "fabric" ]]; then
# source "$cwd/msman/fabric.sh"
else else
>&2 echo "Unknown server type." >&2 echo "Unknown server type."
echo "Exiting..." echo "Exiting..."
@ -440,9 +412,9 @@ function load_script {
first_run() { first_run() {
if [[ $first_run == true ]]; then if [[ $first_run == true ]]; then
answer="" answer=""
echo "Since eula wasn't accepted, this is probably the first run of the server." echo "Since eula wasn't accepted, this is probably the first run of the server"
echo "If you want to install plugins (or mods), answer 'n' and you can do so." echo "If you want to install plugins (or mods), answer 'n' and you can do so."
echo "If you don't answer, the server will start in 15 seconds." echo "If you don't answer, the server will start in 15 secondd."
read -t 15 -p "Do you want to start the server now? [Y/n] " answer read -t 15 -p "Do you want to start the server now? [Y/n] " answer
if [ "$answer" == "n" ] || [ "$answer" == "N" ]; then if [ "$answer" == "n" ] || [ "$answer" == "N" ]; then
echo "Exiting..." echo "Exiting..."
@ -476,13 +448,6 @@ function main {
# Gets the installed server info # Gets the installed server info
get_existing_server get_existing_server
# Check if the server type differs from the one in the config
if [[ $server_file != false ]]; then
if [[ $existing_server_type != $server_type ]]; then
ask_server_differs
fi
fi
# Check if the version and build are valid # Check if the version and build are valid
check_version_valid check_version_valid
@ -498,28 +463,21 @@ function main {
# Check if this is the first run # Check if this is the first run
first_run first_run
# Set the java arguments
set_java_args
# Launch the server # Launch the server
launch_server launch_server
} }
if [[ "$1" == "--edit-config" ]] || [[ "$1" == "-e" ]]; then # Check for updates on GitHub
if ! command -v $EDITOR &> /dev/null; then if [[ "$1" == "--redownload" ]] || [[ "$1" == "-r" ]]; then
echo "EDITOR is not set." self_update
echo "Open 'msman.cfg' manually." # TODO: Add `--edit-config` option
exit 1
else
$EDITOR msman.cfg
exit 0
fi
elif [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then elif [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
echo "Usage: ./msman.sh [OPTION]" echo "Usage: ./script.sh [OPTION]"
echo "Starts the Minecraft server." echo "Starts the Minecraft server."
echo echo
echo "Options:" echo "Options:"
echo " -e, --edit-config Edit the config file." echo " -r, --redownload Redownloads the script from GitHub."
echo " -h, --help Show this help message." echo " -h, --help Show this help message."
echo echo
echo "To change the settings of the script, edit the 'msman.cfg' file." echo "To change the settings of the script, edit the 'msman.cfg' file."
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 "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."