server.properties
Modify the running configuration of the server to customize some basic functionalities.
These are the standard Minecraft server settings defined in server.properties. For advanced Nukkit-MOT settings, see nukkit-mot.yml.
motd
| Data Type | Default Value |
|---|---|
| String | Minecraft Server |
server name / text which shows on the server list
can't be empty
sub-motd
| Data Type | Default Value |
|---|---|
| String | Powered by Nukkit-MOT |
second line for motd
shows only for players in local network when viewing the server on the friends list in game
can't be empty since 1.16.210
server-port
| Data Type | Default Value |
|---|---|
| Integer | 19132 |
server's port
there can't be two servers running in the same port
you will need to port forward in order to have your server publicly accessible
bedrock edition uses UDP
when NetherNet is enabled, the same port also serves the WebRTC signaling over TCP, so open the port for TCP as well
server-ip
| Data Type | Default Value |
|---|---|
| String | 0.0.0.0 |
server's IP address
there can't be two servers running in the same port
you will need to port forward in order to have your server publicly accessible
bedrock edition uses UDP
this address binds both the RakNet UDP listener and the NetherNet TCP signaling
server-udp-ports
| Data Type | Default Value |
|---|---|
| Integer / String | 19132 |
UDP port for NetherNet (WebRTC) media, using the same syntax as Bedrock Dedicated Server:
| Value | Description |
|---|---|
19132 | Media shares server-port's UDP side with RakNet, relayed in-process from the RakNet socket (default — nothing extra to open or forward) |
0 | Media ports are system-assigned per connection |
N | Pin a standalone media port, e.g. 19134 (one ICE mux port serves all peers) |
A-B | Pin a window of media ports |
[ip:]external[-external]:internal[-internal] | Also publish an external port mapping, e.g. behind NAT. Both ranges must have the same length |
Entries may carry an IP prefix ([2001:db8::1]:... for IPv6) and multiple comma-separated entries accumulate advertised IPs while the window and offset must agree.
Sharing works when a single port is pinned exactly on server-port or the IPv6 listener port, or mapped onto one of them as a single-port mapping — 19132:50000 publishes the media on 19132 while relaying from the internal port 50000. The media then arrives on the RakNet socket and is relayed in-process to a loopback port.
Port windows must not cover server-port (its UDP side belongs to RakNet) or the IPv6 listener port — only a single pinned port or a single-port mapping may share them. Invalid values abort startup instead of falling back to automatic ports.
Media UDP unreachable — players hang on join
When NetherNet players hang on "Connecting" or drop right after joining, the media UDP path is blocked. The server reports this on its own — the log warns:
NetherNet media may be unreachable: 6 ICE attempts, 0 connected in the last 5 minutes.
Check the firewall/port forwarding for the media UDP window udp/... (server-udp-ports)
and /status shows joins accepted while ICE connected stays 0.
Fix it like this:
- Allow the media UDP port inbound — host firewall, cloud security group and router port forwarding alike. With the default the media shares
server-port's UDP side (19132), which RakNet already needs open — nothing extra to allow; a standalone pinned port (e.g.server-udp-ports=19134) must be opened/forwarded explicitly, and only withserver-udp-ports=0are the ports system-assigned and unpredictable — pin a window first (e.g.server-udp-ports=50000-50010) and forward that - Public ports differ from the internal ones (NAT mapping)? Publish the external side instead:
server-udp-ports=60000-60010:50000-50010 - Still failing for players behind symmetric NAT? Relay the media through a TURN server configured in
network-settings.nethernet.ice-servers:
network-settings:
nethernet:
ice-servers:
- stun:stun.l.google.com:19302
- 'turn:user:pass@turn.example.com:3478?transport=udp'
- Joins accepted rising while ICE connected stays 0 — media UDP is blocked; apply the steps above
- ICE connected rising but few handshakes completed — the DTLS handshake fails, usually a middlebox interfering with UDP
- Many drops after connect — NAT timeouts or connection jitter
server-ipv6-port
| Data Type | Default Value |
|---|---|
| Integer | -1 |
port for the optional IPv6 listener
the IPv6 listener is disabled when this is 0 or lower (default -1)
to enable it, set a valid port that differs from server-port
server-ipv6
| Data Type | Default Value |
|---|---|
| String | :: |
IPv6 address the optional IPv6 listener binds to
must be a valid IPv6 address; leave blank to disable the IPv6 listener
view-distance
| Data Type | Default Value |
|---|---|
| Integer | 8 |
maximum view distance in chunks
bigger value = more chunks loaded = more ram & cpu usage
max-players
| Data Type | Default Value |
|---|---|
| Integer | 50 |
Maximum number of players allowed on the server
language
| Data Type | Default Value |
|---|---|
| String | eng |
default language that Nukkit uses
force-language
| Data Type | Default Value |
|---|---|
| Boolean | off |
force server side translations to be used
enable only if you have a plugin to implement those
shutdown-message
| Data Type | Default Value |
|---|---|
| String | §cServer closed |
message that shows for players when you stop the server
use § for colors and §n for new line
gamemode
| Data Type | Default Value |
|---|---|
| Integer | 0 |
server's default gamemode
0 = survival, 1 = creative, 2 = adventure, 3 = spectator
force-gamemode
| Data Type | Default Value |
|---|---|
| Boolean | on |
set player gamemode to default gamemode on every join
difficulty
| Data Type | Default Value |
|---|---|
| Integer | 2 |
server's default difficulty (0-3)
hardcore
| Data Type | Default Value |
|---|---|
| Boolean | off |
players will be banned when they die
pvp
| Data Type | Default Value |
|---|---|
| Boolean | on |
Whether to enable player versus player combat
level-name
| Data Type | Default Value |
|---|---|
| String | world |
Name of the default world
level-seed
| Data Type | Default Value |
|---|---|
| String |
Seed for the default level
level-type
| Data Type | Default Value |
|---|---|
| String | default |
generator used to create the default level if it doesn't exist
supported by default: default, normal, flat, nether, the_end or void
generator-settings
| Data Type | Default Value |
|---|---|
| String |
Special world generator settings for the default level
spawn-protection
| Data Type | Default Value |
|---|---|
| Integer | 10 |
size of the spawn area in blocks where non op players can't build or break blocks
white-list
| Data Type | Default Value |
|---|---|
| Boolean | off |
allow only players on the whitelist to join the server
use /whitelist command or modify white-list.txt to add players to whitelist
whitelist-reason
| Data Type | Default Value |
|---|---|
| String | §cServer is white-listed |
Reason for enabling the whitelist, displayed to players when they are denied access
xbox-auth
| Data Type | Default Value |
|---|---|
| Boolean | on |
require Xbox account to join
does not bypass client side requirements
if you disable this (not recommended), install a login plugin to protect player account security
keep-existing-session-on-duplicate-login
| Data Type | Default Value |
|---|---|
| Boolean | off |
keep the session that is already playing when a duplicate login arrives
by default a new login with the same name or identity kicks the player that is already online; enable this to refuse the newcomer instead, so a player who is carrying loot cannot be evicted by someone reusing the nickname
a stale session still times out by itself
encryption
| Data Type | Default Value |
|---|---|
| Boolean | on |
enable network encryption for RakNet sessions
it's recommended to enable this if you don't use a proxy software
NetherNet sessions are always DTLS-secured, regardless of this option.
force-resources
| Data Type | Default Value |
|---|---|
| Boolean | off |
force players to download server's resource pack if they want to join
force-resources-allow-client-packs
| Data Type | Default Value |
|---|---|
| Boolean | off |
don't disable client's own packs when force-resources is enabled
spawn-animals
| Data Type | Default Value |
|---|---|
| Boolean | on |
enable animal spawning
spawn-mobs
| Data Type | Default Value |
|---|---|
| Boolean | on |
enable monster spawning
allow-flight
| Data Type | Default Value |
|---|---|
| Boolean | off |
enable / disable allowing players to fly
if players are often kicked for flying, try setting this to on
auto-save
| Data Type | Default Value |
|---|---|
| Boolean | on |
automatically save the world and player data
if disabled, changes to worlds are not saved automatically even on unload, use plugin to save manually if needed
enable-rcon
| Data Type | Default Value |
|---|---|
| Boolean | off |
enable remote console access
rcon isn't very secure way to remote control the server
rcon uses the same port (but TCP) as the server
See: https://developer.valvesoftware.com/wiki/Source_RCON_Protocol
rcon.password
| Data Type | Default Value |
|---|---|
| String | Random 10 characters |
Password for RCON connections
rcon.port
| Data Type | Default Value |
|---|---|
| Integer | 25575 |
Port for RCON connections
enable-query
| Data Type | Default Value |
|---|---|
| Boolean | on |
enable extended query
server-authoritative-movement
| Data Type | Default Value |
|---|---|
| String | server-auth |
Server authoritative movement
Optional: client-auth / server-auth-with-rewind / server-auth
server-authoritative-block-breaking
| Data Type | Default Value |
|---|---|
| Boolean | on |
Server authoritative block breaking
server-authoritative-inventory
| Data Type | Default Value |
|---|---|
| Boolean | on |
Server authoritative inventory transactions (ItemStackRequest)
only takes effect for clients on protocol 1.16.100 and above
this is the inventory equivalent of server authoritative movement — the server validates item moves instead of trusting the client