mcserver-docker-environment/setup.sh

133 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
SERVER_DIR=/home/server/instance
cd $SERVER_DIR
: ${MINECRAFT_VERSION:='latest'}
MINECRAFT_VERSION="${MINECRAFT_VERSION,,}"
PROJECT="paper"
# prepare performance opts for java
JAVA_OPTS=" -XX:+UseG1GC -XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 \
-XX:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-Daikars.new.flags=true \
-Dusing.aikars.flags=https://mcflags.emc.gs"
echo "eula=${EULA:-false}" > eula.txt
if [[ -n $SERVER_MEMORY ]]
then
JAVA_OPTS="-Xms${SERVER_MEMORY} -Xmx${SERVER_MEMORY} $JAVA_OPTS"
fi
SERVER_PROPERTIES=$SERVER_DIR/server.properties
SERVER_WHITELIST=$SERVER_DIR/whitelist.json
SERVER_OPLIST=$SERVER_DIR/ops.json
WHITELIST_PREP=$SERVER_DIR/whitelist.prep
OPLIST_PREP=$SERVER_DIR/op.prep
if [ -f $SERVER_PROPERTIES ]; then
mv $SERVER_PROPERTIES $SERVER_PROPERTIES.bkp
rm $SERVER_PROPERTIES
touch $SERVER_PROPERTIES
fi
if [ -f $WHITELIST_PREP ]; then
echo -n "[" > $SERVER_WHITELIST
cat $WHITELIST_PREP | while read u
do
echo "Adding $u to whitelist"
# get uuid of user
uuid=$(curl -s https://api.mojang.com/users/profiles/minecraft/$u | jq -r '.id')
uuid=$(echo "${uuid:0:8}-${uuid:8:4}-${uuid:12:4}-${uuid:16:4}-${uuid:20:12}")
if [[ $uuid == "null" ]]; then
echo "User $u not found. Skipping."
continue
fi
# write to whitelist.json
echo -n "{\"uuid\": \"$uuid\",\"name\": \"$u\"}" >> $SERVER_WHITELIST;
done
echo "]" >> $SERVER_WHITELIST
sed --in-place -e 's/}{/}, {/g' $SERVER_WHITELIST
fi
if [ -f $OPLIST_PREP ]; then
echo -n "[" > $SERVER_OPLIST
cat $OPLIST_PREP | while read u
do
echo "Adding $u to ops"
# get uuid of user
uuid=$(curl -s https://api.mojang.com/users/profiles/minecraft/$u | jq -r '.id')
uuid=$(echo "${uuid:0:8}-${uuid:8:4}-${uuid:12:4}-${uuid:16:4}-${uuid:20:12}")
if [[ $uuid == "null" ]]; then
echo "User $u not found. Skipping."
continue
fi
# write to whitelist.json
echo -n "{\"uuid\": \"$uuid\",\"name\": \"$u\",\"level\": 4,\"bypassesPlayerLimit\": false}" >> $SERVER_OPLIST;
done
echo "]" >> $SERVER_OPLIST
sed --in-place -e 's/}{/}, {/g' $SERVER_OPLIST
fi
if [[ -n $WHITELIST ]]; then
echo "white-list=$WHITELIST" >> $SERVER_PROPERTIES
fi
if [[ -n $SEED ]]; then
echo "seed=$SEED" >> $SERVER_PROPERTIES
fi
if [[ -n $MAX_PLAYERS ]]; then
echo "max-players=$MAX_PLAYERS" >> $SERVER_PROPERTIES
fi
if [[ -n $DIFFICULTY ]]; then
echo "difficulty=$DIFFICULTY" >> $SERVER_PROPERTIES
fi
if [[ -n $GAMEMODE ]]; then
echo "gamemode=$GAMEMODE" >> $SERVER_PROPERTIES
fi
if [[ -n $MOTD ]]; then
echo "motd=$MOTD" >> $SERVER_PROPERTIES
fi
if [[ -n $ENFORCE_SECURE_PROFILE ]]; then
echo "enforce-secure-profile=$ENFORCE_SECURE_PROFILE" >> $SERVER_PROPERTIES
fi
# Start server
if [[ -n $RUNSCRIPT ]]; then
exec java $JAVA_OPTS -jar "server.jar" nogui
else
exec bash /home/server/instance/run.sh
fi