109 lines
2.8 KiB
Bash
109 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Injected by Nix
|
|
RSYNC_BIN="@RSYNC_BIN@"
|
|
DATA_DIR="@DATA_DIR@"
|
|
MCSTATUS_BIN="@MCSTATUS_BIN@"
|
|
MCRCON_BIN="@MCRCON_BIN@"
|
|
AWK_BIN="@AWK_BIN@"
|
|
QUERY_PORT="@QUERY_PORT@"
|
|
RCON_PORT="@RCON_PORT@"
|
|
RCON_PASSWORD="@RCON_PASSWORD@"
|
|
SERVER_NAME="@SERVER_NAME@"
|
|
TAR_BIN="@TAR_BIN@"
|
|
ZIP_BIN="@ZIP_BIN@"
|
|
UNZIP_BIN="@UNZIP_BIN@"
|
|
GZIP_BIN="@GZIP_BIN@"
|
|
ZSTD_BIN="@ZSTD_BIN@"
|
|
PV_BIN="@PV_BIN@"
|
|
DU_BIN="@DU_BIN@"
|
|
BZIP2_BIN="@BZIP2_BIN@"
|
|
XZ_BIN="@XZ_BIN@"
|
|
|
|
# Convenience wrappers
|
|
rsync_cmd="$RSYNC_BIN"
|
|
awk_cmd="$AWK_BIN"
|
|
mcstatus_cmd="$MCSTATUS_BIN 127.0.0.1:${QUERY_PORT}"
|
|
mcrcon_cmd="$MCRCON_BIN -H 127.0.0.1 -P ${RCON_PORT} -p ${RCON_PASSWORD}"
|
|
tar_cmd="$TAR_BIN"
|
|
zip_cmd="$ZIP_BIN"
|
|
unzip_cmd="$UNZIP_BIN"
|
|
gzip_cmd="$GZIP_BIN"
|
|
zstd_cmd="$ZSTD_BIN"
|
|
pv_cmd="$PV_BIN"
|
|
du_cmd="$DU_BIN"
|
|
bzip2_cmd="$BZIP2_BIN"
|
|
xz_cmd="$XZ_BIN"
|
|
|
|
# PATH extension
|
|
# (only figured that out later if you add it here it can actually just use the bin)
|
|
# So you can easily just switch out the "*_cmd" with the "normal" name
|
|
# export PATH="$(dirname "$GZIP_BIN")":"$(dirname "$ZSTD_BIN")":"$(dirname "$PV_BIN")":"$(dirname "$DU_BIN")":"$(dirname "$BZIP2_BIN")":"$(dirname "$XZ_BIN")":"$PATH"
|
|
|
|
|
|
|
|
# Argument parsing
|
|
if [[ $# -lt 2 ]]; then
|
|
echo "Usage: $0 <color|format> <message...>"
|
|
echo "Example: $0 red 'Server restarting soon!'"
|
|
exit 1
|
|
fi
|
|
|
|
CODE_NAME="$1"
|
|
shift
|
|
MESSAGE="$*"
|
|
|
|
# Map color/format names to Minecraft § codes
|
|
case "$CODE_NAME" in
|
|
# Colors
|
|
black) CODE="§0" ;;
|
|
dark_blue) CODE="§1" ;;
|
|
dark_green) CODE="§2" ;;
|
|
dark_aqua) CODE="§3" ;;
|
|
dark_red) CODE="§4" ;;
|
|
dark_purple) CODE="§5" ;;
|
|
gold) CODE="§6" ;;
|
|
gray) CODE="§7" ;;
|
|
dark_gray) CODE="§8" ;;
|
|
blue) CODE="§9" ;;
|
|
green) CODE="§a" ;;
|
|
aqua) CODE="§b" ;;
|
|
red) CODE="§c" ;;
|
|
light_purple|pink) CODE="§d" ;;
|
|
yellow) CODE="§e" ;;
|
|
white) CODE="§f" ;;
|
|
|
|
# Bedrock-only extras
|
|
minecoin_gold) CODE="§g" ;;
|
|
material_quartz) CODE="§h" ;;
|
|
material_iron) CODE="§i" ;;
|
|
material_netherite) CODE="§j" ;;
|
|
material_redstone) CODE="§m" ;;
|
|
material_copper) CODE="§n" ;;
|
|
material_gold) CODE="§p" ;;
|
|
material_emerald) CODE="§q" ;;
|
|
material_diamond) CODE="§s" ;;
|
|
material_lapis) CODE="§t" ;;
|
|
material_amethyst) CODE="§u" ;;
|
|
|
|
# Formatting
|
|
obfuscated) CODE="§k" ;;
|
|
bold) CODE="§l" ;;
|
|
strikethrough) CODE="§m" ;;
|
|
underline) CODE="§n" ;;
|
|
italic) CODE="§o" ;;
|
|
reset) CODE="§r" ;;
|
|
|
|
*)
|
|
echo "Unknown code: $CODE_NAME"
|
|
echo "Available colors: black, dark_blue, dark_green, dark_aqua, dark_red, dark_purple, gold, gray, dark_gray, blue, green, aqua, red, light_purple, yellow, white"
|
|
echo "Formats: obfuscated, bold, strikethrough, underline, italic, reset"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
FULL_MESSAGE="${CODE}${MESSAGE}§r"
|
|
|
|
# Send via RCON
|
|
exec $mcrcon_cmd "say $FULL_MESSAGE"
|