All Articles

Support Articles

Table of Contents

Minecraft Server (Install & Host)

Minecraft 1.17 was released on June 8, 2021. In this article, we will be going over how to set up a Minecraft server on your Pop!_OS or Ubuntu install. System76 and Mojang recommend having an 8GB minimum of system RAM but 16GB is preferred. Any hard drive over 128GB will work for a basic Minecraft server, a drive of 1TB to 2TB is recommended for having backups. This article will use mostly Terminal commands, if you want a refresher on the terminal you can see our article here.

Updating and Installing Software Needed

To install the Minecraft server, we will need to install Java (listed as default-jdk), wget, screen, and nmap.

  • default-jdk is the language in which Minecraft runs - we are also marking the Java version as "held" so no future updates are applied (some java updates can break the server).

  • wget will allow us to download the Minecraft Server from Mojang. Downloading the Minecraft Server Jar, we put the file in the directory directly, instead of using a web browser.

  • screen will allow us to run commands on the server in an isolated environment - think of it as a virtual terminal instance you can connect to and disconnect from.

  • nmap is a network scanner that we will use for testing and network configuration.

Open a Terminal with SUPER+T (Pop!_OS) or CTRL+ALT+T (Ubuntu) run the following commands:

sudo apt clean  
sudo apt update -m  
sudo dpkg --configure -a  
sudo apt install -f  
sudo apt full-upgrade -y
sudo apt install wget screen default-jdk nmap -y
sudo apt-mark hold default-jdk

NOTE: not all these commands will produce output.

Make The Minecraft Group & User & Minecraft Directory

The Minecraft server will make a lot of files for the world, settings, plugins, and other resources. The following commands make the directories for the servers. We will want to make a group and a user for the server to operate in and use. We will need to then make a directory file to live in and make sure that the new server user has ownership of the directory.

sudo addgroup mchost
sudo useradd -M -s /usr/bin/false
sudo mkdir /mchost/v-1-17/
sudo mkdir /mchost/v-1-17/live
sudo mkdir /mchost/v-1-17/backups
sudo chown -Rv mchost /mchost/~

Installing Minecraft Server

Installing Mojang's Minecraft Server Jar

We will want to download the server jar and create a working directory for server.

sudo wget -O /mchost/v-1-17/live/minecraft_server.jar WEBSITE-URL
sudo bash -c "echo eula=true > /mchost/v-1-17/live/eula.txt"
sudo chown -R mchost /mchost/

NOTE: the server Jar will change over time and you will want to go to Mojang's website to grab the newest Jar.

Installing PaperMC's Minecraft Server Jar

Paper is a jar that extends and improves the Bukkit and Spigot APIs meaning if you want to install plugins you can. PaperMC also offers more control options for your server.

PaperMC PaperMC's GitHub

sudo wget -O /mchost/v-1-17/live/minecraft_server.jar WEBSITE-URL 
sudo bash -c "echo eula=true > /mchost/v-1-17/live/eula.txt"
sudo chown -R mchost /mchost/

NOTE: the server Jar will change over time and you will want to go to Paper's Website to grab the newest Jar.

Running The Server

To run the server we will need to open a virtual terminal window using screen and switch users to be your mchost user.

screen
su mchost
cd /mchost/v-1-17/live/
java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=100 -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:G1MixedGCLiveThresholdPercent=50 -XX:+AlwaysPreTouch -jar server.jar

How Much RAM To Use

The Lower Bound: -Xms4G
The Upper Bound: -Xmx4G

These values can be changed up to around 10GB if you need to go over 10GB. This rarely needs to be done on smaller servers unless you have complex data packs, a large world file, or a lot of players (around 100+). If you need these values to be higher please change the G1 Max and New Size Percent to the following:

-XX:G1MaxNewSizePercent=60
-XX:G1NewSizePercent=35

Optimization

Server Properties

In the server.properties files you can change the compression threshold and the default view distance. I would recommend keeping it at 4 for lower end hardware hosting the server and 10 for higher end.

network-compression-threshold: -1 view-distance:4

PaperMC Changes

After Paper runs for the first time you will see a file called paper.yml, this a config file. Editing it will change how Paper runs the server. We will note what the changes do and what they may affect. This section mostly comes from the work of Celebrimbor with some changes and updates for some of the settings.

max-auto-save-chunks-per-tick

"Max Auto Chunks Per Tick" refers to how fast the incremental chunk saving is during the "world save" task. Do not go lower than 6 for the value, it may result in unsaved or corrupted chunks.

Default: 24 Optimized: 6 to 12

optimize-explosions

Paper's algorithm for explosions has no effect on game-play, but is not as impactful on the server. These performance improvements are not as impactful as others on this list.

Default: false Optimized: true

mob-spawner-tick-rate

Mob spawners, like the ones that spawn in classic dungeons, are often used as a source for mob grinders. This value changes the delay of the spawners' spawning. Changing this to 2 slightly improves server performance, but this is a good number to be aware of if users take advantage of the spawners.

Default: 1 Optimized: 2

disable-chest-cat-detection

We get it, Mojang loves having the Minecraft cats be like IRL cats with them getting in our way. Every tick, all chests in Minecraft check to see if a cat is sitting on top of them, this rarely is used in game-play. Turning it off results in minor performance improvements.

Default: false Optimized: true

container-update-tick-rate

This value changes how often inventories are refreshed when opened, any value above 4 will result in visual bugs.

Default: 1 Optimized: 3

max-entity-collisions

Mob farms and player traps cause collisions. The max-entity-collisions value will affect how often and how much entities collide. This has a moderate effect on performance.

Default: 8 Optimized: 2

grass-spread-tick-rate

Typically, this should remain at the defaults for the server. After Silk Touch becomes more common and the economy grows, it can be adjusted. It can be frustrating to wait 4 times longer for the grass to spread. However, this can have a moderate effect on performance, so some administrators may want to adjust it.

Default: 1 Optimized: 4

despawn-ranges

This sets how far a player has to be from a mob for them to despawn. The soft value is the distance (in blocks) from the player where mobs are removed. The hard value is the value that mobs are removed instantly. Setting these to be slightly lower will reduce the spawn load of the computer.

Default: soft: 32, hard: 128 Optimized: soft: 28, hard: 96

hopper.disable-move-event

Hoppers are great for item transport but they can cause lag; this optimization will greatly reduce the InventoryMoveItemEvents that occurs on hoppers.

Default: false Optimized: true Impact: Heavy

*NOTE: Plugins that listen for InventoryMoveItemEvent will break, or, cause the server to crash.

non-player-arrow-despawn-rate

Skeleton fired arrows are not retrievable, making this a cosmetic change. By default arrows will never despawn. Three seconds, or 60 ticks, is a good time-frame for users to still be able to tell where the arrow came from when being ambushed.

Default: -1 Optimized: 60

creative-arrow-despawn-rate

This value changes how long non-retrievable arrows stay around. Infinity bows, and bows used in creative mode, are the only ones affected by this.

Default: -1 Optimized: 60

prevent-moving-into-unloaded-chunks

When lag hits your server, or a user is pushing the boundaries of rendered chunks, a player can cause issues. This will prevent them from moving into a chunk that is unloaded, and will teleport them instead to a nearby safe location. This setting has a moderate effect on performance.

Default: false Optimized: true

NOTE: If you are using a world without a world border or pre-generation then this setting is critical.

use-faster-eigencraft-redstone

Eigencraft Redstone is a Redstone adjustment tool that takes out a lot of the redundant logic and greatly impacts the effect. It can boost Redstone performance by 1000% and does not break about 95%-99% of vanilla devices.

Default: false Optimized: true

*NOTE: If you are using a different Redstone algorithm do not change this setting, it will break or crash Minecraft.

armor-stands-tick

Some entities require ticking since they are interactive. For example, un-ticked armor stands will not get pushed by water. If you plan to use a contraption that uses ticking, leave this option set to true. This has minor-to-major performance improvements.

Default: true Optimized: false

*Note: Paper offers item frame ticking instead of doing them all at once to prevent lag spikes. This helps people with map rooms, or people who use frames as wallpapers or custom paintings.

per-player-mob-spawns

Changing this will switch the spawning behavior from Bukkit's random algorithm to single-player spawning behavior. This will prevent things like massive farms from affecting the whole server's spawn rate.

Default: false Optimized: true

alt-item-despawn-rate

This enables items to have different despawn rates. Common items do not need to be around as long as uncommon ones.

Default: false Optimized: true

Example of despawning cobblestone and netherrack in 15 seconds: Code (Text):

      enabled: true
      items:
        COBBLESTONE: 300
        NETHERRACK: 300

no-tick-view-distance

This should be set to your view distance. If the view distance is below 4 you should set it to 5 to improve the game-play experience.

Default: -1 Optimized: # > view-distance setting

anti-xray.enabled

This will cause some performance loss, but Paper has a solid and efficient anti-x-ray cheat system. This will prevent players from using x-ray mods or cheats.

Default: false Optimized: true

Startup

The server should be a service that starts with the system and can log events. This is not mandatory, but allows users to make sure the server is running via service commands.

First, make the service file.

sudo nano /etc/systemd/system/minecraft17@.service`

Below are the needed contents for the service file. You will want to also copy over your server startup file.

[Unit]
Description=Minecraft Server: %i
After=network.target

[Service]
WorkingDirectory=/mchost/1-17/current/%i

User=minecraft
Group=minecraft

Restart=always

ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xmx2G -jar minecraft_server.jar nogui

ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 5 SECONDS. SAVING ALL MAPS..."5'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"5'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"5'

[Install]
WantedBy=multi-user.target
ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xmx2G -jar minecraft_server.jar nogui`
ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xmx4G -jar minecraft_server.jar nogui

Starting Minecraft Server

sudo systemctl start minecraft17@survival
sudo systemctl status minecraft17@survival
sudo systemctl enable minecraft17@survival
nmap -p 25565 localhost`

Port Forwarding

Note: Opening ports to the internet makes you more susceptible to networking attacks or vulnerabilities and may not be allowed by your Internet Service Provider (ISP).

To make your Minecraft server available outside of your LAN, you will need to forward the port to your router. Each brand, system, and ISP will have a different configuration. We recommend you reach out to your ISP for assistance with this. The address you will give your users is your public IP.

Further Reading And Sources

YouHaveTrouble's MC Server Optimization

Spigot Server Optimization

Java Flags for MC

Backup Article