76 lines
2.3 KiB
Bash
Executable File
76 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
|
|
SERVER_JAR_DL="https://launcher.mojang.com/v1/objects/c8f83c5655308435b3dcf03c06d9fe8740a77469/server.jar"
|
|
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
BUILD_DIR="${SCRIPT_DIR}/build"
|
|
JAR_PATH="${BUILD_DIR}/server.jar"
|
|
META_INF_PATH="${BUILD_DIR}/META-INF"
|
|
BINARY_NAME="native-minecraft-server"
|
|
NI_EXEC="${GRAALVM_HOME:-}/bin/native-image"
|
|
readonly SERVER_JAR_DL SCRIPT_DIR BUILD_DIR JAR_PATH META_INF_PATH BINARY_NAME NI_EXEC
|
|
|
|
if [[ -z "${GRAALVM_HOME:-}" ]]; then
|
|
echo "\$GRAALVM_HOME is not set. Please provide a GraalVM installation. Exiting..."
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v "${NI_EXEC}" &> /dev/null; then
|
|
echo "Installing GraalVM Native Image..."
|
|
"${GRAALVM_HOME}/bin/gu" install --no-progress native-image
|
|
fi
|
|
|
|
if [[ ! -d "${BUILD_DIR}" ]]; then
|
|
mkdir "${BUILD_DIR}"
|
|
fi
|
|
pushd "${BUILD_DIR}" > /dev/null
|
|
|
|
if [[ ! -f "${JAR_PATH}" ]]; then
|
|
echo "Downloading Minecraft's server.jar..."
|
|
curl --show-error --fail --location -o "${JAR_PATH}" "${SERVER_JAR_DL}"
|
|
fi
|
|
|
|
if [[ ! -d "${META_INF_PATH}" ]]; then
|
|
echo "Extracting resources from Minecraft's server.jar..."
|
|
unzip -qq "${JAR_PATH}" "META-INF/*" -d "."
|
|
fi
|
|
|
|
if [[ ! -f "${META_INF_PATH}/classpath-joined" ]]; then
|
|
echo "Unable to determine classpath. Exiting..."
|
|
exit 1
|
|
fi
|
|
CLASSPATH_JOINED=$(cat "${META_INF_PATH}/classpath-joined")
|
|
readonly CLASSPATH_JOINED
|
|
|
|
if [[ ! -f "${META_INF_PATH}/main-class" ]]; then
|
|
echo "Unable to determine main class. Exiting..."
|
|
exit 1
|
|
fi
|
|
MAIN_CLASS=$(cat "${META_INF_PATH}/main-class")
|
|
readonly MAIN_CLASS
|
|
|
|
pushd "${META_INF_PATH}" > /dev/null
|
|
"${NI_EXEC}" --no-fallback \
|
|
-H:ConfigurationFileDirectories="${SCRIPT_DIR}/configuration/" \
|
|
--enable-url-protocols=https \
|
|
--initialize-at-run-time=io.netty \
|
|
-H:+AllowVMInspection \
|
|
--initialize-at-build-time=net.minecraft.util.profiling.jfr.event \
|
|
-H:Name="${BINARY_NAME}" \
|
|
-cp "${CLASSPATH_JOINED//;/:}" \
|
|
"${MAIN_CLASS}"
|
|
mv "${BINARY_NAME}" "${SCRIPT_DIR}/${BINARY_NAME}"
|
|
popd > /dev/null # Exit $META_INF_PATH
|
|
popd > /dev/null # Exit $BUILD_DIR
|
|
|
|
if command -v upx &> /dev/null; then
|
|
echo "Compressing the native Minecraft server with upx..."
|
|
upx "${SCRIPT_DIR}/${BINARY_NAME}"
|
|
fi
|
|
|
|
echo ""
|
|
echo "Done! The native Minecraft server is located at:"
|
|
echo "${SCRIPT_DIR}/${BINARY_NAME}"
|