Merge pull request #24 from W3LFARe/19-using-the-whitelist_users-variable-in-unraid-causes-duplication-on-restart

19 using the whitelist users variable in unraid causes duplication on restart
This commit is contained in:
W3LFARe 2025-01-16 02:35:57 -05:00 committed by GitHub
commit 105160f70e

View file

@ -7,32 +7,32 @@ SERVER_VERSION=2.24
cd /data cd /data
if ! [[ "$EULA" = "false" ]]; then if ! [[ "$EULA" = "false" ]]; then
echo "eula=true" > eula.txt echo "eula=true" > eula.txt
else else
echo "You must accept the EULA to install." echo "You must accept the EULA to install."
exit 99 exit 99
fi fi
if ! [[ -f "Server-Files-$SERVER_VERSION.zip" ]]; then if ! [[ -f "Server-Files-$SERVER_VERSION.zip" ]]; then
rm -fr config defaultconfigs kubejs mods packmenu Simple.zip forge* rm -fr config defaultconfigs kubejs mods packmenu Simple.zip forge*
curl -Lo "Server-Files-$SERVER_VERSION.zip" 'https://edge.forgecdn.net/files/6088/026/ServerFiles-2.24.zip' || exit 9 curl -Lo "Server-Files-$SERVER_VERSION.zip" 'https://edge.forgecdn.net/files/6088/026/ServerFiles-2.24.zip' || exit 9
unzip -u -o "Server-Files-$SERVER_VERSION.zip" -d /data unzip -u -o "Server-Files-$SERVER_VERSION.zip" -d /data
DIR_TEST=$(find . -type d -maxdepth 1 | tail -1 | sed 's/^.\{2\}//g') DIR_TEST=$(find . -type d -maxdepth 1 | tail -1 | sed 's/^.\{2\}//g')
if [[ $(find . -type d -maxdepth 1 | wc -l) -gt 1 ]]; then if [[ $(find . -type d -maxdepth 1 | wc -l) -gt 1 ]]; then
cd "${DIR_TEST}" cd "${DIR_TEST}"
find . -type d -exec chmod 777 {} + find . -type d -exec chmod 777 {} +
mv -f * /data mv -f * /data
cd /data cd /data
rm -fr "$DIR_TEST" rm -fr "$DIR_TEST"
fi fi
curl -Lo neoforge-${NEOFORGE_VERSION}-installer.jar https://maven.neoforged.net/releases/net/neoforged/neoforge/$NEOFORGE_VERSION/neoforge-$NEOFORGE_VERSION-installer.jar curl -Lo neoforge-${NEOFORGE_VERSION}-installer.jar https://maven.neoforged.net/releases/net/neoforged/neoforge/$NEOFORGE_VERSION/neoforge-$NEOFORGE_VERSION-installer.jar
java -jar neoforge-${NEOFORGE_VERSION}-installer.jar --installServer java -jar neoforge-${NEOFORGE_VERSION}-installer.jar --installServer
fi fi
if [[ -n "$JVM_OPTS" ]]; then if [[ -n "$JVM_OPTS" ]]; then
sed -i '/-Xm[s,x]/d' user_jvm_args.txt sed -i '/-Xm[s,x]/d' user_jvm_args.txt
for j in ${JVM_OPTS}; do sed -i '$a\'$j'' user_jvm_args.txt; done for j in ${JVM_OPTS}; do sed -i '$a\'$j'' user_jvm_args.txt; done
fi fi
if [[ -n "$MOTD" ]]; then if [[ -n "$MOTD" ]]; then
sed -i "s/^motd=.*/motd=$MOTD/" /data/server.properties sed -i "s/^motd=.*/motd=$MOTD/" /data/server.properties
@ -49,43 +49,49 @@ fi
if [[ -n "$ONLINE_MODE" ]]; then if [[ -n "$ONLINE_MODE" ]]; then
sed -i "s/online-mode=.*/online-mode=$ONLINE_MODE/" /data/server.properties sed -i "s/online-mode=.*/online-mode=$ONLINE_MODE/" /data/server.properties
fi fi
# Initialize whitelist
echo "[]" > whitelist.json echo "[]" > whitelist.json
IFS=',' read -ra USERS <<< "$WHITELIST_USERS" IFS=',' read -ra USERS <<< "$WHITELIST_USERS"
for raw_username in "${USERS[@]}"; do for raw_username in "${USERS[@]}"; do
username=$(echo "$raw_username" | xargs) username=$(echo "$raw_username" | xargs)
if [[ ! "$username" =~ ^[a-zA-Z0-9_]{3,16}$ ]]; then
echo "Whitelist: Invalid username: '$username'. Skipping..."
continue
fi
UUID=$(curl -s "https://api.mojang.com/users/profiles/minecraft/$username" | jq -r '.id') if [[ ! "$username" =~ ^[a-zA-Z0-9_]{3,16}$ ]]; then
if [[ "$UUID" != "null" ]]; then echo "Whitelist: Invalid username: '$username'. Skipping..."
if jq -e ".[] | select(.uuid == \"$UUID\")" whitelist.json > /dev/null; then continue
echo "Whitelist: $username ($UUID) is already whitelisted." fi
else
UUID=$(echo "$UUID" | sed -r 's/(.{8})(.{4})(.{4})(.{4})(.{12})/\1-\2-\3-\4-\5/') UUID=$(curl -s "https://playerdb.co/api/player/minecraft/$username" | jq -r '.data.player.id')
echo "Whitelist: Adding $username ($UUID) to whitelist." if [[ "$UUID" != "null" ]]; then
jq ". += [{\"uuid\": \"$UUID\", \"name\": \"$username\"}]" whitelist.json > tmp.json && mv tmp.json whitelist.json if jq -e ".[] | select(.uuid == \"$UUID\")" whitelist.json > /dev/null; then
fi echo "Whitelist: $username ($UUID) is already whitelisted."
else else
echo "Whitelist: Failed to fetch UUID for $username." UUID=$(echo "$UUID" | sed -r 's/(.{8})(.{4})(.{4})(.{4})(.{12})/\1-\2-\3-\4-\5/')
fi echo "Whitelist: Adding $username ($UUID) to whitelist."
jq ". += [{\"uuid\": \"$UUID\", \"name\": \"$username\"}]" whitelist.json > tmp.json && mv tmp.json whitelist.json
fi
else
echo "Whitelist: Failed to fetch UUID for $username."
fi
done done
# Initialize ops
echo "[]" > ops.json echo "[]" > ops.json
IFS=',' read -ra OPS <<< "$OP_USERS" IFS=',' read -ra OPS <<< "$OP_USERS"
for raw_username in "${OPS[@]}"; do for raw_username in "${OPS[@]}"; do
username=$(echo "$raw_username" | xargs) username=$(echo "$raw_username" | xargs)
if [[ ! "$username" =~ ^[a-zA-Z0-9_]{3,16}$ ]]; then if [[ ! "$username" =~ ^[a-zA-Z0-9_]{3,16}$ ]]; then
echo "Ops: Invalid username: '$username'. Skipping..." echo "Ops: Invalid username: '$username'. Skipping..."
continue continue
fi fi
UUID=$(curl -s "https://api.mojang.com/users/profiles/minecraft/$username" | jq -r '.id') UUID=$(curl -s "https://playerdb.co/api/player/minecraft/$username" | jq -r '.data.player.id')
if [[ "$UUID" != "null" ]]; then if [[ "$UUID" != "null" ]]; then
if jq -e ".[] | select(.uuid == \"$UUID\")" ops.json > /dev/null; then if jq -e ".[] | select(.uuid == \"$UUID\")" ops.json > /dev/null; then
echo "Ops: $username ($UUID) is already an operator." echo "Ops: $username ($UUID) is already an operator."
else else
UUID=$(echo "$UUID" | sed -r 's/(.{8})(.{4})(.{4})(.{4})(.{12})/\1-\2-\3-\4-\5/') UUID=$(echo "$UUID" | sed -r 's/(.{8})(.{4})(.{4})(.{4})(.{12})/\1-\2-\3-\4-\5/')
echo "Ops: Adding $username ($UUID) as operator." echo "Ops: Adding $username ($UUID) as operator."
jq ". += [{\"uuid\": \"$UUID\", \"name\": \"$username\", \"level\": 4, \"bypassesPlayerLimit\": false}]" ops.json > tmp.json && mv tmp.json ops.json jq ". += [{\"uuid\": \"$UUID\", \"name\": \"$username\", \"level\": 4, \"bypassesPlayerLimit\": false}]" ops.json > tmp.json && mv tmp.json ops.json
fi fi