77function getGTNHdownloadPath(){
88 gtnh_download_path=" "
99 local release_object=" "
10- local current_java_version=$( mc-image-helper java-release)
10+ local current_java_version=" "
11+ current_java_version=$( mc-image-helper java-release)
1112
1213 # Select release JSON object
1314 if [ " $GTNH_PACK_VERSION " == " latest-dev" ]; then
@@ -38,6 +39,11 @@ function getGTNHdownloadPath(){
3839 log " Selected $( jq -r ' .key' <<< " $release_object" ) as matching version for download."
3940
4041 fi
42+
43+ if [[ -z $release_object ]]; then
44+ logError " No release found for GTNH_PACK_VERSION=$GTNH_PACK_VERSION . Please check if the version is valid."
45+ exit 1
46+ fi
4147
4248 # Select compatible server files for java version
4349 if (( current_java_version == 8 )) ; then
@@ -59,6 +65,10 @@ function getGTNHdownloadPath(){
5965
6066 fi
6167
68+ if [[ -z $gtnh_download_path ]]; then
69+ logError " Server files not found! Please check if the selected GTNH_PACK_VERSION=$GTNH_PACK_VERSION is valid."
70+ exit 1
71+ fi
6272 debug " Download source URL: $gtnh_download_path "
6373
6474}
@@ -70,80 +80,125 @@ function deleteGTNHbackup(){
7080 fi
7181}
7282
83+ function downloadGTNH(){
84+ local gtnh_download=" "
85+ base_dir=/data/.tmp/gtnh_base
86+
87+ debug " Creating temporary /data/.tmp/packs folder for GTNH download"
88+ mkdir -p /data/.tmp/packs
89+ trap ' rm -rf /data/.tmp' EXIT
90+
91+ log " Downloading $gtnh_download_path ."
92+ if ! gtnh_download=$( mc-image-helper get -o /data/.tmp/packs --output-filename --skip-up-to-date " $gtnh_download_path " ) ; then
93+ logError " Failed to download $gtnh_download_path "
94+ exit 1
95+ fi
96+ debug " Downloaded GTNH server files to $gtnh_download "
97+
98+ # Unpacking Server files into temporary directory
99+ log " Unpacking Server Files into $base_dir "
100+ mkdir -p " ${base_dir} "
101+ extract " ${gtnh_download} " " ${base_dir} "
102+
103+ # Remove any eula file since container manages it
104+ debug " Removing eula.txt from $base_dir "
105+ rm -f " ${base_dir} /eula.txt"
106+
107+ # recalculate the actual base directory of content
108+ if ! base_dir=$( mc-image-helper find \
109+ --max-depth=3 --type=directory --name=mods,config \
110+ --only-shallowest --fail-no-matches --format ' %h' \
111+ " $base_dir " ) ; then
112+ logError " Unable to find content base of downloaded Server Files"
113+ exit 1
114+ fi
115+ debug " Base directory of unpacked Server Files: $base_dir "
116+ }
117+
118+ function updateGTNHresource(){
119+ local resource=" $1 "
120+ local new_resource=" $2 "
121+ log " Trying to update $resource "
122+
123+ if [[ -z " $resource " ]]; then
124+ logWarning " No resource specified for update"
125+ return 0
126+ fi
127+
128+ if [[ -e " $resource " ]]; then
129+ log " Deleting existing resource: $resource "
130+ if ! rm -rf " $resource " ; then
131+ logError " Failed to delete resource: $resource "
132+ exit 1
133+ fi
134+ fi
135+
136+ if [[ -d " $new_resource " ]]; then
137+ log " Copying $new_resource to /data"
138+ if ! cp -r " $new_resource " " /data/" ; then
139+ logError " Failed to copy $new_resource to /data"
140+ exit 1
141+ fi
142+ return 0
143+ fi
144+ if [[ -f " $new_resource " ]]; then
145+ log " Copying $new_resource to /data"
146+ if ! cp " $new_resource " " /data/" ; then
147+ logError " Failed to copy $new_resource to /data"
148+ exit 1
149+ fi
150+ return 0
151+ fi
152+
153+ logWarning " Resource update failed: $new_resource does not exist!"
154+ return 0
155+ }
156+
73157function updateGTNH(){
74158 # Get the current date and time
75- current_datetime=$( date +%Y-%m-%dT%H:%M)
159+ local current_datetime=" "
160+ current_datetime=$( date +%Y-%m-%dT+%H%M)
76161
77162 # Define folders and files to update
78- folders_to_update=(" libraries" " mods" " resources" " scripts" )
79- 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" )
80- config_folder=" config"
81- backup_folder=" /data/gtnh-upgrade-$current_datetime "
82- journey_map_folder=" JourneyMapServer"
83-
84- # Delete specified folders if they exist
85- for folder in " ${folders_to_update[@]} " ; do
86- folder_path=" /data/$folder "
87- if [[ -d " $folder_path " ]]; then
88- log " Deleting folder: $folder_path "
89- rm -rf " $folder_path "
90- fi
91- done
92-
93- # Delete specific files if they exist
94- for file in " ${files_to_update[@]} " ; do
95- file_path=" /data/$file "
96- if [[ -f " $file_path " ]]; then
97- log " Deleting file: $file_path "
98- rm -f " $file_path "
99- fi
100- done
163+ # base_dir is already defined in handleGTNH function
164+ local folders_to_update=(" libraries" " mods" " resources" " scripts" )
165+ local 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" )
166+ local config_folder=" config"
167+ local backup_folder=" /data/gtnh-upgrade-$current_datetime "
168+ local journey_map_folder=" JourneyMapServer"
101169
102170 # Backup the config folder
103171 if [[ -d " /data/$config_folder " ]]; then
104172 log " Creating backup of /data/$config_folder at $backup_folder "
105173 cp -r " /data/$config_folder " " $backup_folder "
106- log " Deleting original /data/$config_folder "
107- rm -rf " /data/$config_folder "
108174 fi
109175
110- # Updating the required folders in data directory
111- for folder in " ${folders_to_update[@]} " " $config_folder " ; do
112- if [[ -d " $base_dir /$folder " ]]; then
113- log " Copying $folder to /data"
114- cp -r " $base_dir /$folder " " /data/"
115- else
116- logWarning " Folder $folder not found in the unzipped data!"
117- fi
118- done
119-
120- # Copy specific files to the /data directory
121- for file in " ${files_to_update[@]} " ; do
122- if [[ -f " $base_dir /$file " ]]; then
123- log " Copying $file to /data"
124- cp " $base_dir /$file " " /data/"
125- else
126- logWarning " File $file not found in the unzipped data!"
127- fi
128- done
176+ # Update resources from unpacked server files to /data
177+ for resource in " ${folders_to_update[@]} " " $config_folder " " ${files_to_update[@]} " ; do
178+ local resource_path=" /data/$resource "
179+ local new_resource_path=" $base_dir /$resource "
129180
130- # Ensure the config folder exists
131- if [[ ! -d " $config_folder " ]]; then
132- log " $config_folder does not exist. Creating it now."
133- mkdir -p " $config_folder "
134- fi
181+ debug " Updating resource: $resource_path with new resource: $new_resource_path "
182+ updateGTNHresource " $resource_path " " $new_resource_path "
183+ done
135184
136185 # Restore JourneyMapServer folder from backup
137186 if [[ -d " $backup_folder /$journey_map_folder " ]]; then
138- log " Restoring $journey_map_folder to $config_folder "
139- cp -r " $backup_folder /$journey_map_folder " " $config_folder /"
187+ if [[ ! -d " /data/$config_folder " ]]; then
188+ log " /data/$config_folder folder does not exist. Creating it now."
189+ mkdir -p " /data/$config_folder "
190+ fi
191+ log " Restoring $journey_map_folder to /data/$config_folder "
192+ cp -r " $backup_folder /$journey_map_folder " " /data/$config_folder /"
140193 else
141194 logWarning " $journey_map_folder not found in backup!"
142195 fi
143196
144197 # Copy the changelog file to /data
198+ local gtnh_changelog_file=" "
145199 gtnh_changelog_file=$( mc-image-helper find --max-depth=1 --type=file --name=changelog* .md " $base_dir " )
146200 if [[ -n " $gtnh_changelog_file " ]]; then
201+ debug " Found changelog file: $gtnh_changelog_file "
147202 log " Copying changelog file to /data"
148203 cp -f " $gtnh_changelog_file " /data/
149204 fi
@@ -163,46 +218,16 @@ function handleGTNH() {
163218 if [[ -n " $GTNH_PACK_VERSION " ]] && isFalse " $SKIP_GTNH_UPDATE_CHECK " ; then
164219
165220 getGTNHdownloadPath
166-
167- if [[ -z $gtnh_download_path ]]; then
168- logError " Server files not found for GTNH_PACK_VERSION=$GTNH_PACK_VERSION ! Download not possible!"
169- exit 1
170- fi
171221 log " Server files located! Will proceed update $gtnh_download_path ."
172222
223+
173224 # Decide if update or install is needed or not.
174225 if [[ ! -f /data/.gtnh-version || " $( basename " $gtnh_download_path " ) " != " $( cat /data/.gtnh-version) " ]]; then
175226 log " Update/Install required: /data/.gtnh-version is missing or does not match the selected version $( basename " $gtnh_download_path " ) ."
176227
177- mkdir -p /data/packs
178- log " Downloading $gtnh_download_path ."
179- if ! gtnh_download=$( mc-image-helper get -o /data/packs --output-filename --skip-up-to-date " $gtnh_download_path " ) ; then
180- logError " Failed to download $gtnh_download_path "
181- exit 1
182- fi
183-
184- # Unpacking Server files into temporary directory
185- log " Unpacking Server Files..."
186- original_base_dir=/data/.tmp/gtnh_base
187- base_dir=$original_base_dir
188- rm -rf " ${base_dir} "
189- mkdir -p " ${base_dir} "
190- extract " ${gtnh_download} " " ${base_dir} "
191- trap ' rm -rf /data/.tmp' EXIT
192- # Removing downloaded zip
193- rm -f " $gtnh_download "
194-
195- # Remove any eula file since container manages it
196- rm -f " ${base_dir} /eula.txt"
197-
198- # recalculate the actual base directory of content
199- if ! base_dir=$( mc-image-helper find \
200- --max-depth=3 --type=directory --name=mods,config \
201- --only-shallowest --fail-no-matches --format ' %h' \
202- " $base_dir " ) ; then
203- logError " Unable to find content base of downloaded Server Files"
204- exit 1
205- fi
228+ # Download and unpack GTNH server files
229+ downloadGTNH
230+ log " GTNH server files downloaded and unpacked to $base_dir ."
206231
207232 # Split installation from update path. Check for version file.
208233 if [[ -f /data/.gtnh-version ]]; then
@@ -212,10 +237,12 @@ function handleGTNH() {
212237 log " No .gtnh-version file detected! Assuming no old server exists. Proceed installing new server..."
213238 cp -R -f " ${base_dir} " /* /data
214239 fi
240+
215241 # Update .gtnh-version
216242 basename " $gtnh_download_path " > /data/.gtnh-version
217- # Cleaning up
218- rm -rf " $original_base_dir "
243+
244+ # Cleaning up temporary files
245+ rm -rf /data/.tmp
219246
220247 else
221248 log " No update required: /data/.gtnh-version matches the selected version $( basename " $gtnh_download_path " ) ."
0 commit comments