-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstart
More file actions
135 lines (109 loc) · 3.88 KB
/
start
File metadata and controls
135 lines (109 loc) · 3.88 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
#!/bin/bash
set -e
export DEBIAN_FRONTEND=noninteractive
GREEN="\e[32m"
CYAN="\e[36m"
YELLOW="\e[33m"
RED="\e[31m"
RESET="\e[0m"
clear
echo -e "${CYAN}╔══════════════════════════════════════╗"
echo -e "║ Minecraft Server Starter ║"
echo -e "╚══════════════════════════════════════╝${RESET}"
# ===== FUNGSI PEMBANDING VERSI =====
version_ge() { # Mengembalikan true jika $1 >= $2
local IFS=.
local i ver1=($1) ver2=($2)
for ((i=0; i<${#ver1[@]} || i<${#ver2[@]}; i++)); do
local v1=${ver1[i]:-0} v2=${ver2[i]:-0}
if ((10#$v1 > 10#$v2)); then
return 0
elif ((10#$v1 < 10#$v2)); then
return 1
fi
done
return 0
}
# ===== DETEKSI RAM =====
MEM_GB=$(awk '/MemTotal/ {printf "%.0f", $2/1024/1024}' /proc/meminfo)
# ===== PERIKSA & PASANG DEPENDENSI DASAR =====
install_if_missing() {
local cmd=$1 pkg=$2
if ! command -v "$cmd" &>/dev/null; then
echo -e "${YELLOW}> Memasang ${pkg}...${RESET}"
sudo apt install -y -qq "$pkg"
fi
}
install_if_missing screen screen
install_if_missing playit playit # Playit sudah via ppa, asumsikan perintah playit ada
install_if_missing bpytop bpytop # bpytop sudah terpasang via pip sebelumnya
# ===== JAVA SERVER =====
if [[-f server.jar]]; then
echo -e "${CYAN}> Server Java terdeteksi${RESET}"
# Baca versi Minecraft dari .mcversion
if [[ -f .mcversion ]]; then
MC_VERSION=$(cat .mcversion)
echo -e " Versi Minecraft: ${GREEN}${MC_VERSION}${RESET}"
else
echo -e "${YELLOW}File .mcversion tidak ditemukan.${RESET}"
read -rp "Masukkan versi Minecraft server Anda (contoh: 1.20.4): " MC_VERSION
fi
# Tentukan JDK yang sesuai
if version_ge "$MC_VERSION" "26.1"; then
JAVA_VERSION="25.0.3-ms"
JAVA_LABEL="JDK 25"
elif version_ge "$MC_VERSION" "1.20.6"; then
JAVA_VERSION="21.0.2-open"
JAVA_LABEL="JDK 21"
elif version_ge "$MC_VERSION" "1.18"; then
JAVA_VERSION="17.0.18-tem"
JAVA_LABEL="JDK 17"
else
JAVA_VERSION="8.0.472-tem"
JAVA_LABEL="JDK 8"
fi
echo -e " JDK yang dibutuhkan: ${GREEN}${JAVA_LABEL} (${JAVA_VERSION})${RESET}"
# ===== SDKMAN & JDK =====
if [[ ! -s "$HOME/.sdkman/bin/sdkman-init.sh" ]]; then
echo -e "${YELLOW}> Memasang SDKMAN...${RESET}"
curl -s https://get.sdkman.io | bash >/dev/null
fi
source "$HOME/.sdkman/bin/sdkman-init.sh"
# Cek apakah JDK yang diperlukan sudah terpasang
if ! sdk list java | grep -q "$JAVA_VERSION"; then
echo -e "${CYAN}> Memasang ${JAVA_LABEL}...${RESET}"
sdk install java "$JAVA_VERSION"
fi
sdk default java "$JAVA_VERSION" >/dev/null 2>&1 || true
# EULA
if [[ ! -f eula.txt ]]; then
echo "eula=true" > eula.txt
fi
# Jalankan server
echo -e "${CYAN}> Memulai server...${RESET}"
screen -S server -d -m java -Xms${MEM_GB}G -Xmx${MEM_GB}G -jar server.jar nogui
# Geyser standalone jika ada
if [[ -f geyser/geyser.jar ]]; then
screen -S geyser -d -m java -Xms${MEM_GB}G -Xmx${MEM_GB}G -jar geyser/geyser.jar nogui
fi
# ===== BEDROCK SERVER =====
elif [[-f bedrock_server]]; then
echo -e "${CYAN}> Server Bedrock terdeteksi${RESET}"
chmod +x bedrock_server
screen -S server -d -m ./bedrock_server
else
echo -e "${RED}> Tidak ditemukan server.jar atau bedrock_server${RESET}"
exit 1
fi
# ===== PLAYIT.GG TUNNEL =====
screen -S playit -d -m playit
# ===== MONITORING AFK =====
screen -S afk -d -m bpytop
echo ""
echo -e "${GREEN}✔ Server telah dijalankan${RESET}"
echo -e "${CYAN}Konsol:${RESET}"
echo " Server → screen -r server"
echo " Playit → screen -r playit"
[[-f geyser/geyser.jar]] && echo " Geyser → screen -r geyser"
echo ""
echo -e "${YELLOW}Hentikan server: ./stop${RESET}"