66# Define setup functions
77function getGTNHdownloadPath(){
88 gtnh_download_path=" "
9- current_java_version=$( mc-image-helper java-release)
10-
11- if ! packs_data=" $(
12- curl -fsSL " https://downloads.gtnewhorizons.com/versions.json" \
13- | jq -r ' .versions[]?.server? | .[]? | select(type=="string" and test("Server"))'
14- ) " ; then
15- logError " Failed to retrieve data from https://downloads.gtnewhorizons.com/versions.json"
16- exit 1
17- fi
18- mapfile -t packs <<< " $packs_data"
9+ local release_object=" "
10+ local current_java_version=$( mc-image-helper java-release)
1911
20- log " Start locating server files..."
21- for pack in " ${packs[@]} " ; do
22- # Extract the Java version(s) from the pack filename
23- if ! pack_java_version=$( basename " $pack " | grep -Eo ' Java_[0-9]+(-[0-9]+)?' | sed ' s/Java_//' ) ; then
24- logWarning " Could not parse java version of $pack "
12+ # Select release JSON object
13+ if [ " $GTNH_PACK_VERSION " == " latest-dev" ]; then
14+ if ! release_object=" $(
15+ curl -fsSL " https://downloads.gtnewhorizons.com/versions.json" \
16+ | jq -r ' .versions|to_entries|sort_by(.value.releaseDate)|map(select(.value.title=="Beta release"))|.[-1]'
17+ ) " ; then logError " Failed to retrieve release from https://downloads.gtnewhorizons.com/versions.json"
18+ exit 1
2519 fi
20+ log " Selected $( jq ' .key' <<< " $release_object" ) as latest dev version for download."
2621
27- # Skip the pack if the current Java version is not compatible
28- if [[ " $pack_java_version " == * -* ]]; then
29- # Handle range of Java versions (e.g., "17-21")
30- java_min_version=$( echo " $pack_java_version " | cut -d' -' -f1)
31- java_max_version=$( echo " $pack_java_version " | cut -d' -' -f2)
32- if (( current_java_version < java_min_version || current_java_version > java_max_version )) ; then
33- debug " Skipping $pack due to incompatible Java version: $current_java_version not in range $java_min_version -$java_max_version "
34- continue
35- fi
36- else
37- # Handle single Java version (e.g., "8")
38- if (( current_java_version != pack_java_version )) ; then
39- debug " Skipping $pack due to incompatible Java version: $current_java_version != $pack_java_version "
40- continue
41- fi
22+ elif [ " $GTNH_PACK_VERSION " == " latest" ]; then
23+ if ! release_object=" $(
24+ curl -fsSL " https://downloads.gtnewhorizons.com/versions.json" \
25+ | jq -r ' .versions|to_entries|sort_by(.value.releaseDate)|map(select(.value.title=="Stable release"))|.[-1]'
26+ ) " ; then logError " Failed to retrieve release from https://downloads.gtnewhorizons.com/versions.json"
27+ exit 1
4228 fi
29+ log " Selected $( jq ' .key' <<< " $release_object" ) as latest version for download."
4330
44- # Extract version numbers and release type (beta or RC) from the file names
45-
46- if ! pack_version=$( basename " $pack " | grep -Eo ' [0-9]+(\.[0-9]+)+' ) ; then
47- logWarning " Could not parse version of $pack "
48- fi
49- if ! pack_release_type=$( basename " $pack " | grep -Eo ' (beta|RC)(-[0-9]+)?' || echo " " ) ; then
50- logWarning " Could not parse release type of $pack "
51- fi
52- if ! current_version=$( basename " $gtnh_download_path " | grep -Eo ' [0-9]+(\.[0-9]+)+' ) ; then
53- debug " Could not parse version of selected download path. String might be empty."
54- fi
55- if ! current_release_type=$( basename " $gtnh_download_path " | grep -Eo ' (beta|RC)(-[0-9]+)?' || echo " " ) ; then
56- debug " Could not parse release type of selected download path. String might be empty."
31+ else
32+ if ! release_object=" $(
33+ curl -fsSL " https://downloads.gtnewhorizons.com/versions.json" \
34+ | jq -r --arg USRIN $GTNH_PACK_VERSION ' .versions|to_entries|sort_by(.value.releaseDate)|map(select(.key==$USRIN))|.[]'
35+ ) " ; then logError " Failed to retrieve release from https://downloads.gtnewhorizons.com/versions.json"
36+ exit 1
5737 fi
58- # Check if the pack matches the desired type based on GTNH_PACK_VERSION:
59- # - If GTNH_PACK_VERSION is "latest-dev", only consider beta packs (path contains "/betas/").
60- # - If GTNH_PACK_VERSION is "latest", only consider non-beta packs (path does not contain "/betas/").
61- if [[ ($pack == * " /betas/" * && $GTNH_PACK_VERSION == " latest-dev" ) || ($pack ! = * " /betas/" * && $GTNH_PACK_VERSION == " latest" ) ]]; then
62- # Compare versions and update gtnh_download_path if pack is newer
63- # Check if the current version is unset or if the pack version is newer than the current version.
64- # This comparison uses version sorting to determine the latest version.
65- if [[ -z " $current_version " || " $( printf ' %s\n' " $pack_version " " $current_version " | sort -V | tail -n 1) " == " $pack_version " ]]; then
66-
67- # If the pack version is the same as the current version, prioritize based on release type.
68- # Full versions are preferred over RC (Release Candidate), and RC is preferred over beta.
69- # Within the same release type, higher numbered versions are preferred.
70- if [[ " $pack_version " == " $current_version " ]]; then
71- if [[ -z " $pack_release_type " || (" $pack_release_type " == " RC" && " $current_release_type " == " beta" ) ||
72- (" $pack_release_type " == " $current_release_type " && " $( printf ' %s\n' " $pack_release_type " " $current_release_type " | sort -V | tail -n 1) " == " $pack_release_type " ) ]]; then
73- debug " $current_version -$current_release_type is older than $pack_version -$pack_release_type ! Update latest version to: $pack_version -$pack_release_type "
74- gtnh_download_path=" $pack "
75- fi
76- else
77- # If the pack version is newer than the current version, set it as the download path.
78- debug " $current_version is older than $pack_version ! Update latest version to: $pack_version "
79- gtnh_download_path=" $pack "
80- fi
81- fi
82- else
83- if [[ " $pack_version " == " $GTNH_PACK_VERSION " || " $pack_version -$pack_release_type " == " $GTNH_PACK_VERSION " ]]; then
84- log " Found exact match $pack_version = $GTNH_PACK_VERSION ! Select $pack_version for download."
85- gtnh_download_path=" $pack "
86- break
87- fi
38+ log " Selected $( jq -r ' .key' <<< " $release_object" ) as matching version for download."
39+
40+ fi
41+
42+ # Select compatible server files for java version
43+ if (( current_java_version == 8 )) ; then
44+ gtnh_download_path=$( jq -r ' .value.server.java8Url' <<< " $release_object" )
45+ log " Use GTNH Server Java 8 release."
46+
47+ elif (( current_java_version >= 17 )) ; then
48+ if (( current_java_version > $(jq '.value.maxJavaVersion' <<< "$release_object ") )) ; then
49+ logError " Container Java version $current_java_version is not supported by GTNH. Try an older release."
50+ exit 1
8851 fi
89- done
52+
53+ gtnh_download_path=$( jq -r ' .value.server.java17_2XUrl' <<< " $release_object" )
54+ log " Use GTNH Server Java 17+ release."
55+
56+ else
57+ logError " Container Java version $current_java_version is not supported by GTNH."
58+ exit 1
59+
60+ fi
61+
62+ debug " Download source URL: $gtnh_download_path "
63+
9064}
9165
9266function deleteGTNHbackup(){
@@ -104,7 +78,7 @@ function updateGTNH(){
10478 folders_to_update=(" libraries" " mods" " resources" " scripts" )
10579 files_to_update=(" lwjgl3ify-forgePatches.jar" " java9args.txt" " startserver-java9.bat" " startserver-java9.sh" " forge-1.7.10-10.13.4.1614-1.7.10-universal.jar" " startserver.bat" " startserver.sh" " server-icon.png" )
10680 config_folder=" config"
107- backup_folder=" /data/gtnh-upgrade-${current_version}${current_release_type : +- $current_release_type } - $ current_datetime"
81+ backup_folder=" /data/gtnh-upgrade-$current_datetime "
10882 journey_map_folder=" JourneyMapServer"
10983
11084 # Delete specified folders if they exist
0 commit comments