#!/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" URL='https://papermc.io/api/v2/projects/paper' if [[ $MINECRAFT_VERSION == latest ]] then MINECRAFT_VERSION=$(curl -s https://api.papermc.io/v2/projects/${PROJECT} | \ jq -r '.versions[-1]') fi LATEST_BUILD=$(curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds | \ jq -r '.builds | map(select(.channel == "default") | .build) | .[-1]') if [ "$LATEST_BUILD" != "null" ]; then JAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${LATEST_BUILD}.jar PAPERMC_URL="https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${LATEST_BUILD}/downloads/${JAR_NAME}" rm -f *.jar curl -o $SERVER_DIR/server.jar $PAPERMC_URL echo "Download completed" else echo "No stable build for version $MINECRAFT_VERSION found :(" fi 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 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\",\"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 exec java $JAVA_OPTS -jar "server.jar" nogui