-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvs2server.sh
More file actions
364 lines (342 loc) · 12.5 KB
/
Copy pathvs2server.sh
File metadata and controls
364 lines (342 loc) · 12.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
#!/bin/bash
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <fabric/forge> <minecraft_version> <loader_version>"
echo "Example: $0 fabric 1.20.1 0.15.10"
exit 1
fi
SHELL=/data/data/com.termux/files/usr/bin/bash
echo "This script should only be run in the github version of termux and with BASH.
Do not report any issues if you run it with sh or if you use the google play version of termux."
read -n1 -r -p "Press any key to continue..."
clear
pkg install jq wget curl -y
iferror() {
if [ "$?" -ne 0 ]; then
echo "Something went wrong, log saved to /internal_storage/vs2termux/vs2server.log"
exit 1
fi
}
start_script_fabric() {
JAVA_HOME=$HOME/vs2server/runtimes/jdk*
echo "JAVA_HOME=$HOME/vs2server/runtimes/jdk*
SHELL=/data/data/com.termux/files/usr/bin/bash
grun -s $JAVA_HOME/bin/java -Djava.library.path=$JAVA_HOME/lib -Xmx2G -jar $HOME/vs2server/instances/jar" > "$HOME"/vs2server/instances/start.sh
}
start_script_forge(){
JAVA_HOME=$HOME/vs2server/runtimes/jdk*
echo "#!/usr/bin/env sh
# Forge requires a configured set of both JVM and program argume#!/usr/bin/env sh
# Forge requires a configured set of both JVM and program arguments.
# Add custom JVM arguments to the user_jvm_args.txt
# Add custom program arguments {such as nogui} to this file in the next line before the "$@" or
# pass them to this script directly
grun -s JAVA_HOME=$HOME/vs2server/runtimes/jdk* $HOME/vs2server/runtimes/jdk*/bin/java @user_jvm_args.txt @libraries/net/minecraftforge/forge/"$1"-"$2"/unix_args.txt nogui"$@"" > "$HOME"/vs2server/instances/start.sh
echo "# Xmx and Xms set the maximum and minimum RAM usage, respectively.
# They can take any number, followed by an M or a G.
# M means Megabyte, G means Gigabyte.
# For example, to set the maximum to 3GB: -Xmx3G
# To set the minimum to 2.5GB: -Xms2500M
# A good default for a modded server is 4GB.
# Uncomment the next line to set it.
-Xmx2G -Djava.library.path=$HOME/vs2server/runtimes/jdk*" > "$HOME"/vs2server/instances/user_jvm_args.txt
}
remove_mods(){
cat << 'EOF' > remove_mods.sh
#!/bin/bash
name=$1
if [ -n "$name" ]; then
cd "$HOME/vs2server/instances/mods" || exit
if [ -e "$name" ]; then
rm "$name"
exit
else
echo "File '$name' does not exist."
exit
fi
else
while true; do
clear
cd "$HOME/vs2server/instances/mods" || exit
ls
echo "Enter the name of the file you want to delete (or type 'return' to return): "
read -r name
if [ "$name" = "return" ]; then
echo "Exiting script..."
break
elif [ -e "$name" ]; then
echo "Are you sure that you want to delete '$name'? [y/N]"
read -r dc
case "$(echo "$dc" | tr '[:upper:]' '[:lower:]')" in
[yY])
rm "$name"
echo "File '$name' deleted."
;;
*)
echo "Cancelled."
sleep 1
;;
esac
elif [ -n "$(ls | grep "$name")" ]; then
# Autocomplete based on partial match
autocomplete=$(ls | grep "$name" | head -n 1)
echo "Are you sure that you want to delete '$autocomplete'? [y/N]"
read -r dc
case "$(echo "$dc" | tr '[:upper:]' '[:lower:]')" in
[yY])
rm "$autocomplete"
echo "File '$autocomplete' deleted."
;;
*)
echo "Cancelled."
sleep 1
;;
esac
else
echo "File '$name' does not exist. Please try again."
sleep 3
fi
done
fi
EOF
}
install_temurin_jdk() {
version=$1
#package=$2
arch=$(uname -m)
os=$(uname | tr '[:upper:]' '[:lower:]')
echo "Downloading Temurin $package $version for $os $arch"
wget -P "$HOME"/vs2server/runtimes/ https://api.adoptium.net/v3/binary/latest/$version/ga/$os/$arch/jre/hotspot/normal/eclipse
iferror
echo "Extracting..."
tar -xzf $HOME/vs2server/runtimes/eclipse -C "$HOME"/vs2server/runtimes/
rm $HOME/vs2server/runtimes/eclipse
}
check_dep() {
if [ "$#" -ne 3 ]; then
echo "invalid arguments"
exit 1
fi
loader=$1
version=$2
name=$3
url="https://api.modrinth.com/v2/project/"$name"/version?loaders=\[%22"$loader"%22\]&game_versions=\[%22"$version"%22\]"
while true; do
url="https://api.modrinth.com/v2/project/"$name"/version?loaders=\[%22"$loader"%22\]&game_versions=\[%22"$version"%22\]"
command='jq -r ".[0].dependencies[] | select(.dependency_type == \"required\") | .project_id"'
dependencies=$(curl -s "$url" | eval "$command")
if [ -n "$dependencies" ]; then
for dep_id in $dependencies; do
install_mod "$loader" "$version" "$dep_id"
done
else
break
fi
done
}
install_mod() {
if [ "$#" -ne 3 ]; then
echo "invalid arguments"
exit 1
fi
loader=$1
version=$2
name=$3
url="https://api.modrinth.com/v2/project/"$name"/version?loaders=\[%22"$loader"%22\]&game_versions=\[%22"$version"%22\]"
dlink=$(curl -s "$url" | jq -r '.[0].files[0].url')
fname=$(curl -s "$url" | jq -r '.[0].files[0].filename')
if [ ! -d "$HOME/vs2server/instances/mods" ]; then
mkdir -p "$HOME/vs2server/instances/mods"
fi
if [ -f "$HOME/vs2server/instances/mods/$fname" ]; then
echo "Mod $fname already downloaded"
else
wget -P "$HOME/vs2server/instances/mods" "$dlink"
fi
check_dep "$loader" "$version" "$name"
}
# ------------------------------------------------------------------------- #
if [ ! -d "$HOME"/storage/shared ]; then
termux-setup-storage
fi
if [ ! -d "$HOME"/storage/shared/vs2termux ]; then
mkdir -p "$HOME"/storage/shared/vs2termux
fi #this is needed to allow the script to create the log in the internal storage
( # start of the tee command
# ------------------------------------------------------------------------- #
echo "Installing needed termux packages"
pkg update -y
pkg upgrade -y
pkg install glibc-repo -y
pkg install glibc-runner patchelf-glibc coreutils-glibc tar coreutils patchelf procps -y
#Check the code on 6gb phone
if [ "$(free --giga | awk '/Mem:/ {print $2}')" -le 4 ]; then
echo "Your phone stinks, it might die if you continue with $(free --giga | awk '/Mem:/ {print $2}')GB of useable RAM. Continue? [y/N]"
read -r dc
case "$(echo "$dc" | tr '[:upper:]' '[:lower:]')" in
[yY])
echo "Okay sure but don't blame me if sonething went wrong"
;;
*)
echo "Your phone thanks you in your infinite wisdom"
exit 1
;;
esac
fi
# ------------------------------------------------------------------------- #
echo Installing Minecraft "$2" "$1"-"$3"
if [ "$1" = "forge" ]; then
if command -v java >/dev/null 2>&1; then
echo "java is already installed"
else
pkg install openjdk-17
fi
fi
if [ -d "$HOME"/vs2server/runtimes ]; then
echo "Another runtime already exists. Do you want to overwrite it with a new one?. [y/N]"
read -r dc
case "$(echo "$dc" | tr '[:upper:]' '[:lower:]')" in
[yY])
echo "Deleting runtimes folder"
rm -rf "$HOME"/vs2server/runtimes/jdk*
install_temurin_jdk 21
;;
*)
echo "Cancelled."
;;
esac
elif [ ! -d "$HOME"/vs2server/runtimes ]; then
mkdir -p "$HOME"/vs2server/runtimes/
install_temurin_jdk 21
fi
cd "$HOME"/vs2server/runtimes/jdk*/lib || exit
iferror
grun -c -f ../bin/java
iferror
install=true
if [ -d "$HOME"/vs2server/instances ]; then
echo "Another instance already exists. Proceeding will overwrite it which will delete all worlds, configs, and mods. Continue? [y/N] "
read -r dc
case "$(echo "$dc" | tr '[:upper:]' '[:lower:]')" in
[yY])
echo "Deleting vs2server folder"
rm -rf "$HOME"/vs2server/instances
;;
*)
echo "Cancelled."
install=false
;;
esac
fi
if [ ! -d "$HOME"/vs2server/instances ]; then
mkdir -p "$HOME"/vs2server/instances
fi
cd "$HOME"/vs2server/instances
if [ "$install" = "true" ]; then
case $1 in
fabric )
wget -P "$HOME"/vs2server/instances https://meta.fabricmc.net/v2/versions/loader/"$2"/"$3"/1.0.0/server/jar
iferror
jarfile=fabric-server-mc."$2"-loader."$3"-launcher.1.0.0
grun -s JAVA_HOME=$HOME/vs2server/runtimes/jdk* $HOME/vs2server/runtimes/jdk*/bin/java -Djava.library.path=$HOME/vs2server/runtimes/jdk* -jar $HOME/vs2server/instances/jar nogui
start_script_fabric
echo "eula=true" > $HOME/vs2server/instances/eula.txt
;;
forge )
wget -P "$HOME"/vs2server/instances https://maven.minecraftforge.net/net/minecraftforge/forge/"$2"-"$3"/forge-"$2"-"$3"-installer.jar
iferror
jarfile=forge-"$2"-"$3"-installer
java -jar $HOME/vs2server/instances/forge-"$2"-"$3"-installer.jar --installServer
rm run.sh
start_script_forge $2 $3
echo "eula=true" > $HOME/vs2server/instances/eula.txt
;;
* )
echo "Invalid Mod Loader, use fabric or forge"
;;
esac
fi
read -p "Do you want to install Valkyrian Skies, Clockwork and Eureka? [y/N] " dc
case "$(echo "$dc" | tr '[:upper:]' '[:lower:]')" in
[yY])
install_mod "$1" "$2" "eureka"
install_mod "$1" "$2" "create-clockwork"
;;
esac
cd "$HOME"/vs2server/instances/
pwd=$(pwd)
echo "server files are located in "$pwd""
cd ~/
if [ ! -f "~/start.sh" ]; then
read -p "Do you want to make a start script in your home directory? [y/N] " dc
case "$(echo "$dc" | tr '[:upper:]' '[:lower:]')" in
[yY])
echo "cd "$HOME"/vs2server/instances/
sh start.sh" > start.sh
echo "To run the server, run 'sh start.sh'"
;;
*)
echo "To run the server, go to "$pwd" and run 'sh start.sh'"
esac
fi
if [ ! -f "~/import_mods.sh" ]; then
echo "cp -r ~/storage/shared/vs2termux/import_mods/mods "$HOME"/vs2server/instances/" > import_mods.sh
fi
if [ ! -f "~/export_mods.sh" ]; then
echo "cp -r "$HOME"/vs2server/instances/mods "$HOME"/storage/shared/vs2termux/exported_mods/" > export_mods.sh
fi
if [ ! -f "~/remove_mods.sh" ]; then
remove_mods
fi
if [ ! -f "~/unistall.sh" ]; then
echo "rm -rf ~/storage/shared/vs2termux
rm -rf ~/vs2server
rm ~/remove_mods.sh
rm ~/import_mods.sh
rm ~/export_mods.sh
rm ~/start.sh
rm ~/vs2server.sh
rm ~/unistall.sh" > ~/unistall.sh
fi
if [ ! -d "$HOME"/storage/shared ]; then
termux-setup-storage
fi
if [ ! -d "$HOME"/storage/shared/vs2termux ]; then
mkdir -p "$HOME"/storage/shared/vs2termux
fi
if [ -d "$HOME"/storage/shared/vs2termux/exported_mods ]; then
rm -rf "$HOME"/storage/shared/vs2termux/import_mods
fi
if [ ! -d "$HOME"/storage/shared/vs2termux/import_mods ]; then
mkdir -p "$HOME"/storage/shared/vs2termux/import_mods
mkdir -p "$HOME"/storage/shared/vs2termux/import_mods/mods
fi
if [ -d "$HOME"/storage/shared/vs2termux/exported_mods ]; then
rm -rf "$HOME"/storage/shared/vs2termux/exported_mods
fi
if [ ! -d "$HOME"/storage/shared/vs2termux/exported_mods ]; then
mkdir -p "$HOME"/storage/shared/vs2termux/exported_mods
fi
cd ~/storage/shared/vs2termux/
if [ ! -f "~/storage/shared/vs2termux/copy_mod_to_server.txt" ]; then
echo "Add mods to the 'import_mods/mods' folder and run 'sh import_mods.sh' in termux to copy it to the server.
Run 'sh export_mods.sh mods to copy servers mods to the 'export_mods/mods' folder." > copy_mod_to_or_from_server.txt
fi
if [ ! -f "~/storage/shared/vs2termux/run_server.txt" ]; then
echo "To run the server, run 'sh start.sh' if u made the script in the home folder.
Run 'cd ~/vs2server/instances/ && sh start.sh' if u did not made the script in the home folder.
To join the server, enter 'localhost' if ur trying to join the server from the same device as ur hosting it.
If you want someone else to join from outside of ur local network, u will need to 'port foward' the server.
Theres shit ton of guides on how to do that online. " > run_server.txt
fi
if [ ! -f "~/storage/shared/vs2termux/remove_mods.txt" ]; then
echo "Run 'sh remove_mods.sh' to open mod removing Command Line Interface" > remove_mods.txt
fi
if [ ! -f "~/storage/shared/vs2termux/exported_mods.txt" ]; then
echo "'exported_mods' folder contains the mods that the server has downloaded automatically.
U need to copy them to ur clients mods folder so u could join the server" > exported_mods.txt
fi
if [ ! -f "~/storage/shared/vs2termux/exported_mods.txt" ]; then
echo "run 'unistall.sh' to remove vs2termux from ur phone" > unistall.txt
fi
echo "Check 'internal storage/vs2termux/' folder for some information that u might find useful."
) 2>&1 | tee "$HOME"/storage/shared/vs2termux/vs2server.log