Skip to content

Server Configuration

The server configuration system manages server settings, world configuration, and runtime options.

com.hypixel.hytale.server.core

FileLocationDescription
config.jsonUniverse rootMain server config
config.jsonworlds/{name}/Per-world config
{uuid}.jsonplayers/Player data

Main server configuration (loaded from config.json):

package com.hypixel.hytale.server.core;
public class HytaleServerConfig {
String serverName = "Hytale Server";
String motd = "";
String password = "";
int maxPlayers = 100;
int maxViewRadius = 32;
Defaults defaults;
TimeoutProfile connectionTimeouts;
RateLimitConfig rateLimitConfig;
UpdateConfig updateConfig;
Map<String, Module> modules;
Map<PluginIdentifier, ModConfig> modConfig;
Map<String, Level> logLevels;
PlayerStorageProvider playerStorageProvider;
BsonDocument authCredentialStoreConfig;
public static HytaleServerConfig load();
public static CompletableFuture<Void> save(@Nonnull HytaleServerConfig hytaleServerConfig);
}
FieldTypeDefaultDescription
ServerNameString”Hytale Server”Server display name
MOTDString""Message of the day
PasswordString""Server password
MaxPlayersint100Maximum players
MaxViewRadiusint32Max chunk view radius
public static class Defaults {
String world = "default";
GameMode gameMode = GameMode.Adventure;
}

The TimeoutProfile class (serialized under the "ConnectionTimeouts" JSON key) controls how long the server waits at each stage of a player’s connection before timing them out. All fields are Duration types and use ISO-8601 format in JSON (e.g., "PT30S" for 30 seconds).

Defaults vary depending on whether the server is running in singleplayer or multiplayer mode:

public static class TimeoutProfile {
Duration initial;
Duration auth;
Duration authGrant;
Duration authToken;
Duration authServerExchange;
Duration password;
Duration play;
Duration setupWorldSettings;
Duration setupAssetsRequest;
Duration setupSendAssets;
Duration setupAddToUniverse;
}
JSON KeyFieldSingleplayer DefaultMultiplayer DefaultDescription
InitialTimeoutinitial30s15sInitial connection window
AuthTimeoutauth60s30sAuthentication handshake
AuthGrantTimeoutauthGrant60s30sAuth grant response
AuthTokenTimeoutauthToken60s30sAuth token exchange
AuthServerExchangeTimeoutauthServerExchange30s15sAuth server exchange
PasswordTimeoutpassword60s45sPassword entry
PlayTimeoutplay120s60sActive play timeout
SetupWorldSettingssetupWorldSettings30s15sWorld settings setup
SetupAssetsRequestsetupAssetsRequest300s120sAsset request phase
SetupSendAssetssetupSendAssets300s120sAsset transfer phase
SetupAddToUniversesetupAddToUniverse120s60sAdding player to universe
public static class RateLimitConfig {
Boolean enabled;
Integer packetsPerSecond;
Integer burstCapacity;
}
FieldTypeDefaultDescription
EnabledBooleantrueEnable rate limiting
PacketsPerSecondInteger2000Max packets per second
BurstCapacityInteger500Burst packet allowance

The UpdateConfig class controls automatic server update behavior. It lets you configure update checking, notifications, backups before updating, and auto-apply behavior.

public static class UpdateConfig {
Boolean enabled;
Integer checkIntervalSeconds;
Boolean notifyPlayersOnAvailable;
String patchline;
Boolean runBackupBeforeUpdate;
Boolean backupConfigBeforeUpdate;
AutoApplyMode autoApplyMode;
Integer autoApplyDelayMinutes;
public static enum AutoApplyMode {
DISABLED,
WHEN_EMPTY,
SCHEDULED;
}
}
JSON KeyTypeDefaultDescription
EnabledBooleantrueEnable update checking
CheckIntervalSecondsInteger3600How often to check for updates (in seconds)
NotifyPlayersOnAvailableBooleantrueNotify online players when an update is available
PatchlineStringnullTarget patchline for updates (nullable)
RunBackupBeforeUpdateBooleantrueRun a universe backup before applying an update
BackupConfigBeforeUpdateBooleantrueBack up config files before applying an update
AutoApplyModeAutoApplyModeDISABLEDWhen to auto-apply updates: DISABLED, WHEN_EMPTY, or SCHEDULED
AutoApplyDelayMinutesInteger30Delay in minutes before a scheduled auto-apply kicks in
{
"ServerName": "My Hytale Server",
"MOTD": "Welcome to Hytale!",
"Password": "",
"MaxPlayers": 100,
"MaxViewRadius": 32,
"Defaults": {
"World": "default",
"GameMode": "Adventure"
},
"ConnectionTimeouts": {
"InitialTimeout": "PT15S",
"AuthTimeout": "PT30S",
"AuthGrantTimeout": "PT30S",
"AuthTokenTimeout": "PT30S",
"AuthServerExchangeTimeout": "PT15S",
"PasswordTimeout": "PT45S",
"PlayTimeout": "PT60S",
"SetupWorldSettings": "PT15S",
"SetupAssetsRequest": "PT120S",
"SetupSendAssets": "PT120S",
"SetupAddToUniverse": "PT60S"
},
"RateLimit": {
"Enabled": true,
"PacketsPerSecond": 2000,
"BurstCapacity": 500
},
"Update": {
"Enabled": true,
"CheckIntervalSeconds": 3600,
"NotifyPlayersOnAvailable": true,
"RunBackupBeforeUpdate": true,
"BackupConfigBeforeUpdate": true,
"AutoApplyMode": "DISABLED",
"AutoApplyDelayMinutes": 30
},
"LogLevels": {},
"Modules": {},
"Mods": {},
"PlayerStorage": {
"Type": "Hytale"
}
}

Per-world configuration (in worlds/{name}/config.json):

package com.hypixel.hytale.server.core.universe.world;
public class WorldConfig {
UUID uuid = UUID.randomUUID();
String displayName;
long seed = System.currentTimeMillis();
ISpawnProvider spawnProvider;
IWorldGenProvider worldGen;
IWorldMapProvider worldMap;
IChunkStorageProvider chunkStorage;
boolean isTicking = true;
boolean isBlockTicking = true;
boolean isPvpEnabled = false;
boolean isFallDamageEnabled = true;
GameMode gameMode;
boolean isGameTimePaused = false;
Instant gameTime;
String forcedWeather;
boolean isSpawningNPC = true;
boolean isSpawnMarkersEnabled = true;
boolean isAllNPCFrozen = false;
boolean isSavingPlayers = true;
boolean isSavingChunks = true;
boolean saveNewChunks = true;
boolean isUnloadingChunks = true;
boolean deleteOnUniverseStart = false;
boolean deleteOnRemove = false;
}
FieldTypeDefaultDescription
UUIDUUIDRandomWorld identifier
DisplayNameStringnullDisplay name
SeedlongcurrentTimeMillisWorld seed
IsTickingbooleantrueEnable world ticking
IsBlockTickingbooleantrueEnable block updates
IsPvpEnabledbooleanfalseEnable PvP
IsFallDamageEnabledbooleantrueEnable fall damage
GameModeGameModeAdventureDefault game mode
IsSpawningNPCbooleantrueEnable NPC spawning
public static class ChunkConfig {
Box2D pregenerateRegion;
Box2D keepLoadedRegion;
}
{
"UUID": "550e8400-e29b-41d4-a716-446655440000",
"DisplayName": "default",
"Seed": 1234567890,
"IsTicking": true,
"IsBlockTicking": true,
"IsPvpEnabled": false,
"IsFallDamageEnabled": true,
"GameMode": "Adventure",
"GameplayConfig": "Default",
"IsSpawningNPC": true,
"IsGameTimePaused": false,
"IsSavingPlayers": true,
"IsSavingChunks": true,
"ChunkConfig": {
"PregenerateRegion": [[-512, -512], [512, 512]]
},
"WorldGen": {
"Type": "Hytale",
"Name": "Default"
}
}
OptionParameterDefaultDescription
--universePath”universe”Universe directory
--assetsPath”../HytaleAssets”Asset directory
--modsPaths-Additional mod dirs
--bind / -bAddress0.0.0.0:5520Bind address
--transport / -tTypeQUICTransport type
--singleplayer--Singleplayer mode
--bare--Bare mode
--auth-modeModeAUTHENTICATEDAuth mode
--backup--Enable backups
--backup-frequencyminutes30Backup interval
--backup-dirPath-Backup directory
--backup-max-countcount5Max backups
ModeDescription
AUTHENTICATEDFull authentication required
OFFLINEOffline mode
INSECUREInsecure (dev) mode
TypeDescription
TCPStandard TCP
QUICQUIC protocol

Static server constants:

package com.hypixel.hytale.server.core;
public class Constants {
public static final boolean DEBUG = true;
public static final boolean SINGLEPLAYER;
public static final boolean ALLOWS_SELF_OP_COMMAND;
public static final boolean FRESH_UNIVERSE;
public static final Path UNIVERSE_PATH;
public static final PluginManifest[] CORE_PLUGINS;
}

Player data storage configuration:

public interface PlayerStorageProvider {
String getId();
}
public class DiskPlayerStorageProvider implements PlayerStorageProvider {
public static final String ID = "Disk";
Path path;
}

{uuid}.json:

{
"UUID": "...",
"Username": "PlayerName",
"LastWorld": "default",
"Position": [0, 64, 0],
"Rotation": [0, 0, 0],
"Inventory": { ... },
"Effects": [ ... ]
}
import com.hypixel.hytale.server.HytaleServer;
import com.hypixel.hytale.server.core.HytaleServerConfig;
HytaleServerConfig config = HytaleServer.get().getConfig();
String serverName = config.getServerName();
int maxPlayers = config.getMaxPlayers();
config.setMotd("New MOTD");
HytaleServerConfig.save(config);
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.world.WorldConfig;
World world = Universe.get().getWorld("default");
WorldConfig worldConfig = world.getConfig();
boolean pvpEnabled = worldConfig.isPvpEnabled();
GameMode gameMode = worldConfig.getGameMode();

Extensible module configuration:

public static class Module {
Boolean enabled;
Map<String, Module> modules;
BsonDocument document;
}
{
"Modules": {
"MyPlugin": {
"Enabled": true,
"CustomSetting": "value",
"Modules": {
"SubModule": {
"Enabled": false
}
}
}
}
}
  1. Use Duration strings: Use ISO-8601 format for durations (e.g., “PT10S”)
  2. Don’t modify core constants: Constants class values are read-only
  3. Use providers: Use storage providers for custom backends
  4. Validate config: Check values after loading
  5. Save is static: Always use HytaleServerConfig.save(config) — setters handle markChanged() for you