feat: add bds core, locale updates and safety fixes
This commit is contained in:
152
cores/bds.sh
Normal file
152
cores/bds.sh
Normal file
@@ -0,0 +1,152 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
core_name_bds() {
|
||||
echo "Bedrock Dedicated Server"
|
||||
}
|
||||
|
||||
core_default_port_bds() {
|
||||
echo "19132"
|
||||
}
|
||||
|
||||
core_protocol_bds() {
|
||||
echo "udp"
|
||||
}
|
||||
|
||||
core_runtime_bds() {
|
||||
echo "native"
|
||||
}
|
||||
|
||||
core_validate_bds() {
|
||||
if [[ -z "${MC_VERSION:-}" ]]; then
|
||||
MC_VERSION="latest"
|
||||
fi
|
||||
}
|
||||
|
||||
bds_resolve_latest_download_url() {
|
||||
local page
|
||||
local url
|
||||
|
||||
page="$(http_get "https://www.minecraft.net/en-us/download/server/bedrock")"
|
||||
if [[ -z "$page" ]]; then
|
||||
fail "$(t no_stable_build "Bedrock Dedicated Server" "latest")"
|
||||
fi
|
||||
|
||||
url="$(printf '%s\n' "$page" | grep -oE "https://minecraft\\.azureedge\\.net/bin-linux/bedrock-server-[^\" ]+\\.zip" | head -n 1)"
|
||||
if [[ -z "$url" ]]; then
|
||||
fail "$(t no_stable_build "Bedrock Dedicated Server" "latest")"
|
||||
fi
|
||||
|
||||
echo "$url"
|
||||
}
|
||||
|
||||
bds_resolve_download_url() {
|
||||
local requested="${1:-latest}"
|
||||
|
||||
if [[ "$requested" == "latest" ]]; then
|
||||
bds_resolve_latest_download_url
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ "$requested" == http* ]]; then
|
||||
echo "$requested"
|
||||
return
|
||||
fi
|
||||
|
||||
echo "https://minecraft.azureedge.net/bin-linux/bedrock-server-${requested}.zip"
|
||||
}
|
||||
|
||||
bds_resolve_version_from_url() {
|
||||
local url="$1"
|
||||
local requested="${2:-latest}"
|
||||
local file
|
||||
|
||||
file="${url##*/}"
|
||||
file="${file#bedrock-server-}"
|
||||
file="${file%.zip*}"
|
||||
file="${file%%\?*}"
|
||||
|
||||
if [[ -z "$file" || "$file" == "$requested" ]]; then
|
||||
echo "$requested"
|
||||
return
|
||||
fi
|
||||
|
||||
echo "$file"
|
||||
}
|
||||
|
||||
bds_render_start_script() {
|
||||
local dir="$SERVER_DIR"
|
||||
emit_step "core_render" "bds start script"
|
||||
run_cmd bash -c "cat > '$dir/start.sh' <<EOF
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
cd \"\$(dirname \"\$0\")\"
|
||||
export LD_LIBRARY_PATH=.:\$LD_LIBRARY_PATH
|
||||
exec ./bedrock_server
|
||||
EOF"
|
||||
run_cmd chmod +x "$dir/start.sh"
|
||||
emit_step "chmod_start_script" "$dir/start.sh"
|
||||
}
|
||||
|
||||
core_install_bds() {
|
||||
info "$(t core_install "$(core_name_bds)")"
|
||||
emit_step "core_install" "$(core_name_bds)"
|
||||
|
||||
local requested_version="${MC_VERSION:-latest}"
|
||||
local download_url
|
||||
local version
|
||||
local archive="$SERVER_DIR/.bds-package.zip"
|
||||
|
||||
download_url="$(bds_resolve_download_url "$requested_version")"
|
||||
version="$(bds_resolve_version_from_url "$download_url" "$requested_version")"
|
||||
|
||||
emit_step "core_resolve_download" "$version"
|
||||
emit_step "core_fetch" "$download_url"
|
||||
|
||||
if [[ -f "$SERVER_DIR/.bds-version" ]]; then
|
||||
local existing_version
|
||||
existing_version="$(cat "$SERVER_DIR/.bds-version" 2>/dev/null || true)"
|
||||
if [[ "$UPDATE_MODE" == "no" && -n "$existing_version" && "$existing_version" == "$version" && -f "$SERVER_DIR/bedrock_server" ]]; then
|
||||
info "BDS already at requested version ${version}. Skipping binary download."
|
||||
run_cmd chmod +x "$SERVER_DIR/bedrock_server"
|
||||
bds_render_start_script
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
run_cmd rm -f "$archive"
|
||||
download_as_user "$download_url" "$archive"
|
||||
emit_step "core_fetch" "Bedrock server archive"
|
||||
run_cmd unzip -o -q "$archive" -d "$SERVER_DIR"
|
||||
run_cmd rm -f "$archive"
|
||||
|
||||
if [[ ! -f "$SERVER_DIR/bedrock_server" ]]; then
|
||||
fail "bedrock_server not found after extraction"
|
||||
fi
|
||||
|
||||
run_cmd chmod +x "$SERVER_DIR/bedrock_server"
|
||||
bds_render_start_script
|
||||
run_cmd bash -lc "printf '%s\n' '$version' > '$SERVER_DIR/.bds-version'"
|
||||
emit_step "core_configure" "BDS version ${version}"
|
||||
}
|
||||
|
||||
core_post_install_bds() {
|
||||
emit_step "core_post" "BDS"
|
||||
run_cmd bash -lc "chown -R ${SERVER_USER}:${SERVER_USER} '$SERVER_DIR'"
|
||||
emit_step "core_chown" "BDS"
|
||||
open_firewall_port "$SERVER_PORT" "udp"
|
||||
emit_step "core_service" "BDS"
|
||||
create_service "$CORE" "$SERVER_DIR" "$SERVICE_MODE" "$SERVER_DIR/start.sh"
|
||||
start_service
|
||||
}
|
||||
|
||||
core_update_bds() {
|
||||
info "$(t core_update "$(core_name_bds)")"
|
||||
emit_step "core_update" "$(core_name_bds)"
|
||||
|
||||
backup_file "$SERVER_DIR/bedrock_server"
|
||||
backup_file "$SERVER_DIR/start.sh"
|
||||
backup_file "$SERVER_DIR/.bds-version"
|
||||
|
||||
core_install_bds
|
||||
emit_step "core_update_done" "BDS"
|
||||
}
|
||||
59
cores/paper.sh
Normal file
59
cores/paper.sh
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
core_name_paper() {
|
||||
echo "Paper"
|
||||
}
|
||||
|
||||
core_default_port_paper() {
|
||||
echo "25565"
|
||||
}
|
||||
|
||||
core_protocol_paper() {
|
||||
echo "tcp"
|
||||
}
|
||||
|
||||
core_runtime_paper() {
|
||||
echo "java"
|
||||
}
|
||||
|
||||
core_validate_paper() {
|
||||
return 0
|
||||
}
|
||||
|
||||
core_install_paper() {
|
||||
info "$(t core_install "$(core_name_paper)")"
|
||||
emit_step "core_install" "$(core_name_paper)"
|
||||
|
||||
local url
|
||||
emit_step "core_resolve_download" "paper"
|
||||
url="$(get_papermc_download_url "paper" "${MC_VERSION:-latest}")"
|
||||
download_as_user "$url" "$SERVER_DIR/server.jar"
|
||||
emit_step "core_configure" "eula"
|
||||
run_cmd bash -lc "printf 'eula=true\n' > '$SERVER_DIR/eula.txt'"
|
||||
create_java_start_script "$SERVER_DIR" "server.jar" "$RAM"
|
||||
}
|
||||
|
||||
core_post_install_paper() {
|
||||
emit_step "core_post" "Paper"
|
||||
run_cmd bash -lc "chown -R ${SERVER_USER}:${SERVER_USER} '$SERVER_DIR'"
|
||||
emit_step "core_chown" "Paper"
|
||||
open_firewall_port "$SERVER_PORT" "tcp"
|
||||
emit_step "core_service" "Paper"
|
||||
create_service "$CORE" "$SERVER_DIR" "$SERVICE_MODE" "$SERVER_DIR/start.sh"
|
||||
start_service
|
||||
}
|
||||
|
||||
core_update_paper() {
|
||||
info "$(t core_update "$(core_name_paper)")"
|
||||
emit_step "core_update" "$(core_name_paper)"
|
||||
|
||||
local target="$SERVER_DIR/server.jar"
|
||||
backup_file "$target"
|
||||
emit_step "core_backup" "$target"
|
||||
|
||||
local url
|
||||
emit_step "core_resolve_download" "paper"
|
||||
url="$(get_papermc_download_url "paper" "${MC_VERSION:-latest}")"
|
||||
download_as_user_atomic "$url" "$target"
|
||||
emit_step "core_update_done" "Paper"
|
||||
}
|
||||
62
cores/pmmp.sh
Normal file
62
cores/pmmp.sh
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
core_name_pmmp() {
|
||||
echo "PocketMine-MP"
|
||||
}
|
||||
|
||||
core_default_port_pmmp() {
|
||||
echo "19132"
|
||||
}
|
||||
|
||||
core_protocol_pmmp() {
|
||||
echo "udp"
|
||||
}
|
||||
|
||||
core_runtime_pmmp() {
|
||||
echo "php"
|
||||
}
|
||||
|
||||
core_validate_pmmp() {
|
||||
return 0
|
||||
}
|
||||
|
||||
core_install_pmmp() {
|
||||
info "$(t core_install "$(core_name_pmmp)")"
|
||||
emit_step "core_install" "$(core_name_pmmp)"
|
||||
emit_step "core_resolve_channel" "${BUILD:-latest}"
|
||||
|
||||
local channel="${BUILD}"
|
||||
if [[ "$channel" == "latest" || -z "$channel" ]]; then
|
||||
channel="stable"
|
||||
fi
|
||||
download_url="https://get.pmmp.io"
|
||||
emit_step "core_fetch" "pmmp"
|
||||
run_cmd sudo -u "$SERVER_USER" bash -lc "cd '$SERVER_DIR' && curl -sL '$download_url' | bash -s - -d '$SERVER_DIR' -v '$channel'"
|
||||
emit_step "core_configure" "pmmp"
|
||||
}
|
||||
|
||||
core_post_install_pmmp() {
|
||||
emit_step "core_post" "pmmp"
|
||||
open_firewall_port "$SERVER_PORT" "udp"
|
||||
emit_step "core_service" "pmmp"
|
||||
create_service "$CORE" "$SERVER_DIR" "$SERVICE_MODE" "$SERVER_DIR/start.sh"
|
||||
start_service
|
||||
}
|
||||
|
||||
core_update_pmmp() {
|
||||
info "$(t core_update "$(core_name_pmmp)")"
|
||||
emit_step "core_update" "$(core_name_pmmp)"
|
||||
|
||||
local download_url="https://get.pmmp.io"
|
||||
local channel="${BUILD}"
|
||||
if [[ "$channel" == "latest" || -z "$channel" ]]; then
|
||||
channel="stable"
|
||||
fi
|
||||
|
||||
backup_file "$SERVER_DIR/server.phar"
|
||||
backup_file "$SERVER_DIR/start.sh"
|
||||
|
||||
emit_step "core_fetch" "pmmp"
|
||||
run_cmd sudo -u "$SERVER_USER" bash -lc "cd '$SERVER_DIR' && curl -sL '$download_url' | bash -s - -d '$SERVER_DIR' -v '$channel'"
|
||||
emit_step "core_update_done" "pmmp"
|
||||
}
|
||||
65
cores/powernukkitx.sh
Normal file
65
cores/powernukkitx.sh
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
core_name_powernukkitx() {
|
||||
echo "PowerNukkitX"
|
||||
}
|
||||
|
||||
core_default_port_powernukkitx() {
|
||||
echo "19132"
|
||||
}
|
||||
|
||||
core_protocol_powernukkitx() {
|
||||
echo "udp"
|
||||
}
|
||||
|
||||
core_runtime_powernukkitx() {
|
||||
echo "java"
|
||||
}
|
||||
|
||||
core_validate_powernukkitx() {
|
||||
return 0
|
||||
}
|
||||
|
||||
core_install_powernukkitx() {
|
||||
info "$(t core_install "$(core_name_powernukkitx)")"
|
||||
emit_step "core_install" "$(core_name_powernukkitx)"
|
||||
|
||||
local url
|
||||
emit_step "core_resolve_download" "powernukkitx"
|
||||
url="$(get_github_release_asset_url PowerNukkitX/PowerNukkitX 'powernukkitx.*\\.jar')"
|
||||
if [[ -z "$url" || "$url" == "null" ]]; then
|
||||
fail "$(t no_stable_build "PowerNukkitX" "$BUILD")"
|
||||
fi
|
||||
download_as_user "$url" "$SERVER_DIR/powernukkitx.jar"
|
||||
create_powernukkit_start_script "$SERVER_DIR" "$RAM"
|
||||
emit_step "core_render" "powernukkitx"
|
||||
}
|
||||
|
||||
core_post_install_powernukkitx() {
|
||||
emit_step "core_configure" "eula"
|
||||
run_cmd bash -lc "printf 'eula=true\n' > '$SERVER_DIR/eula.txt'"
|
||||
emit_step "core_chown" "PowerNukkitX"
|
||||
run_cmd bash -lc "chown -R ${SERVER_USER}:${SERVER_USER} '$SERVER_DIR'"
|
||||
open_firewall_port "$SERVER_PORT" "udp"
|
||||
emit_step "core_service" "PowerNukkitX"
|
||||
create_service "$CORE" "$SERVER_DIR" "$SERVICE_MODE" "$SERVER_DIR/start.sh"
|
||||
start_service
|
||||
}
|
||||
|
||||
core_update_powernukkitx() {
|
||||
info "$(t core_update "$(core_name_powernukkitx)")"
|
||||
emit_step "core_update" "$(core_name_powernukkitx)"
|
||||
|
||||
local target="$SERVER_DIR/powernukkitx.jar"
|
||||
backup_file "$target"
|
||||
emit_step "core_backup" "$target"
|
||||
|
||||
local url
|
||||
emit_step "core_resolve_download" "powernukkitx"
|
||||
url="$(get_github_release_asset_url PowerNukkitX/PowerNukkitX 'powernukkitx.*\\.jar')"
|
||||
if [[ -z "$url" || "$url" == "null" ]]; then
|
||||
fail "$(t no_stable_build "PowerNukkitX" "$BUILD")"
|
||||
fi
|
||||
download_as_user_atomic "$url" "$target"
|
||||
emit_step "core_update_done" "PowerNukkitX"
|
||||
}
|
||||
59
cores/purpur.sh
Normal file
59
cores/purpur.sh
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
core_name_purpur() {
|
||||
echo "Purpur"
|
||||
}
|
||||
|
||||
core_default_port_purpur() {
|
||||
echo "25565"
|
||||
}
|
||||
|
||||
core_protocol_purpur() {
|
||||
echo "tcp"
|
||||
}
|
||||
|
||||
core_runtime_purpur() {
|
||||
echo "java"
|
||||
}
|
||||
|
||||
core_validate_purpur() {
|
||||
return 0
|
||||
}
|
||||
|
||||
core_install_purpur() {
|
||||
info "$(t core_install "$(core_name_purpur)")"
|
||||
emit_step "core_install" "$(core_name_purpur)"
|
||||
|
||||
local url
|
||||
emit_step "core_resolve_download" "purpur"
|
||||
url="$(get_purpur_download_url "${MC_VERSION:-latest}" "${BUILD:-latest}")"
|
||||
download_as_user "$url" "$SERVER_DIR/server.jar"
|
||||
emit_step "core_configure" "eula"
|
||||
run_cmd bash -lc "printf 'eula=true\n' > '$SERVER_DIR/eula.txt'"
|
||||
create_java_start_script "$SERVER_DIR" "server.jar" "$RAM"
|
||||
}
|
||||
|
||||
core_post_install_purpur() {
|
||||
emit_step "core_post" "Purpur"
|
||||
run_cmd bash -lc "chown -R ${SERVER_USER}:${SERVER_USER} '$SERVER_DIR'"
|
||||
emit_step "core_chown" "Purpur"
|
||||
open_firewall_port "$SERVER_PORT" "tcp"
|
||||
emit_step "core_service" "Purpur"
|
||||
create_service "$CORE" "$SERVER_DIR" "$SERVICE_MODE" "$SERVER_DIR/start.sh"
|
||||
start_service
|
||||
}
|
||||
|
||||
core_update_purpur() {
|
||||
info "$(t core_update "$(core_name_purpur)")"
|
||||
emit_step "core_update" "$(core_name_purpur)"
|
||||
|
||||
local target="$SERVER_DIR/server.jar"
|
||||
backup_file "$target"
|
||||
emit_step "core_backup" "$target"
|
||||
|
||||
local url
|
||||
emit_step "core_resolve_download" "purpur"
|
||||
url="$(get_purpur_download_url "${MC_VERSION:-latest}" "${BUILD:-latest}")"
|
||||
download_as_user_atomic "$url" "$target"
|
||||
emit_step "core_update_done" "Purpur"
|
||||
}
|
||||
65
cores/velocity.sh
Normal file
65
cores/velocity.sh
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
core_name_velocity() {
|
||||
echo "Velocity"
|
||||
}
|
||||
|
||||
core_default_port_velocity() {
|
||||
echo "25577"
|
||||
}
|
||||
|
||||
core_protocol_velocity() {
|
||||
echo "tcp"
|
||||
}
|
||||
|
||||
core_runtime_velocity() {
|
||||
echo "java"
|
||||
}
|
||||
|
||||
core_validate_velocity() {
|
||||
return 0
|
||||
}
|
||||
|
||||
core_install_velocity() {
|
||||
info "$(t core_install "$(core_name_velocity)")"
|
||||
emit_step "core_install" "$(core_name_velocity)"
|
||||
|
||||
local url
|
||||
emit_step "core_resolve_download" "velocity"
|
||||
url="$(get_papermc_download_url "velocity" "${MC_VERSION:-latest}")"
|
||||
download_as_user "$url" "$SERVER_DIR/velocity.jar"
|
||||
run_cmd bash -c "cat > '$SERVER_DIR/start.sh' <<EOF
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
cd \"\$(dirname \"\$0\")\"
|
||||
exec java -Xms${RAM} -Xmx${RAM} -jar velocity.jar
|
||||
EOF"
|
||||
run_cmd chmod +x "$SERVER_DIR/start.sh"
|
||||
emit_step "chmod_start_script" "$SERVER_DIR/start.sh"
|
||||
emit_step "core_render" "velocity"
|
||||
}
|
||||
|
||||
core_post_install_velocity() {
|
||||
emit_step "core_post" "Velocity"
|
||||
run_cmd bash -lc "chown -R ${SERVER_USER}:${SERVER_USER} '$SERVER_DIR'"
|
||||
emit_step "core_chown" "Velocity"
|
||||
open_firewall_port "$SERVER_PORT" "tcp"
|
||||
emit_step "core_service" "Velocity"
|
||||
create_service "$CORE" "$SERVER_DIR" "$SERVICE_MODE" "$SERVER_DIR/start.sh"
|
||||
start_service
|
||||
}
|
||||
|
||||
core_update_velocity() {
|
||||
info "$(t core_update "$(core_name_velocity)")"
|
||||
emit_step "core_update" "$(core_name_velocity)"
|
||||
|
||||
local target="$SERVER_DIR/velocity.jar"
|
||||
backup_file "$target"
|
||||
emit_step "core_backup" "$target"
|
||||
|
||||
local url
|
||||
emit_step "core_resolve_download" "velocity"
|
||||
url="$(get_papermc_download_url "velocity" "${MC_VERSION:-latest}")"
|
||||
download_as_user_atomic "$url" "$target"
|
||||
emit_step "core_update_done" "Velocity"
|
||||
}
|
||||
Reference in New Issue
Block a user