HyTari Studios · Officiell konfigurationsguide

Server Router

Konfigurera nätverket genom att förstå varje modul.

En praktisk referens för Server Router - Network Sync. Följ modulerna från serveridentitet och routes till delade system, native scoreboard och valfri inventory sync. Varje avsnitt kombinerar kopierbar JSON med en förklaring av verkligt beteende.

INNAN DU BÖRJAR

Kom igång

STEG 01

Installera på alla servrar

Använd samma ServerRouter-build på varje nod i nätverket.

STEG 02

Konfigurera en nod i taget

Ge varje server ett unikt serverId, eget host/port och rätt roll.

STEG 03

Testa före offentlig åtkomst

Kontrollera routes och backend-skydd med staffkonton innan offentlig trafik.

ServerRouter är nätverksinfrastruktur: konfigurera credentials, hosts, behörigheter och direct-access-regler medvetet. Behåll en backup av produktionskonfigurationen innan flera moduler ändras.

KAPITEL 01 · 1 EXEMPEL

Installation och roll

Identifiera servern i nätverket och välj router, backend eller båda.

01KONFIGURATION

Serveridentitet och roll

Varje nod behöver unikt serverId och en adress som andra servrar kan nå.

KONFIGURATION
{
  "enabled": true,
  "role": "both",
  "serverId": "hub",
  "host": "hub.example.com",
  "port": 5520,
  "maxPlayers": 100,
  "acceptingPlayers": true
}

mods/ServerRouter/config.json

VAD DET GÖR

Varje nod behöver unikt serverId och en adress som andra servrar kan nå.

VIKTIGT BETEENDE

  • role: main aktiverar routing, backend tar emot transfers och both kombinerar rollerna.
  • serverId måste vara stabilt och matcha värdet i routes och nätverksmoduler.
  • acceptingPlayers kan tillfälligt ta bort en server från destinationer utan att stänga av den.

KAPITEL 02 · 1 EXEMPEL

Databas och heartbeat

Konfigurera MariaDB och hur ofta varje server publicerar status.

01KONFIGURATION

MariaDB, heartbeat och online-status

ServerRouter använder MariaDB för att dela status, presence, transfers och nätverksmoduler.

KONFIGURATION
{
  "databaseHost": "127.0.0.1",
  "databasePort": 3306,
  "databaseName": "hytale_network",
  "databaseUser": "serverrouter",
  "databasePassword": "CHANGE_ME",
  "tablePrefix": "server_router_",
  "heartbeatIntervalSeconds": 5,
  "offlineTimeoutSeconds": 15
}

mods/ServerRouter/config.json

VAD DET GÖR

ServerRouter använder MariaDB för att dela status, presence, transfers och nätverksmoduler.

VIKTIGT BETEENDE

  • Alla servrar i samma nätverk måste använda samma databas.
  • heartbeatIntervalSeconds styr hur ofta noden uppdaterar status.
  • offlineTimeoutSeconds avgör när en nod utan heartbeat räknas som otillgänglig.

KAPITEL 03 · 1 EXEMPEL

Routes och kommandon

Definiera destinationer, kommandon, aliases, behörigheter och route-meddelanden.

01KONFIGURATION

Routes, kommandon, aliases och behörigheter

Varje route kopplar ett kommando till en destinationsserver och kontrolleras före transfer.

KONFIGURATION
{
  "routes": [
    {
      "name": "Survival",
      "command": "survival",
      "aliases": [
        "sopravvivenza"
      ],
      "serverId": "survival",
      "host": "survival.example.com",
      "port": 5522,
      "permission": "serverrouter.command.survival"
    }
  ]
}

mods/ServerRouter/config.json → routes[]

VAD DET GÖR

Varje route kopplar ett kommando till en destinationsserver och kontrolleras före transfer.

VIKTIGT BETEENDE

  • Kommandot lagras utan slash i JSON och används som /survival i spelet.
  • aliases lägger till alternativa namn för samma transfer.
  • Före referral kontrollerar ServerRouter status, kapacitet och tillgänglighet.

KAPITEL 04 · 1 EXEMPEL

Transfersäkerhet

Skydda backends och hantera tillfälliga auktoriseringar, rejoin och cooldowns.

01KONFIGURATION

Backend-skydd och transfer-tokens

Backends kan neka direkt åtkomst och bara ta emot spelare från auktoriserade transfers.

KONFIGURATION
{
  "allowDirectAccess": false,
  "allowSameServerRejoin": true,
  "sameServerRejoinSeconds": 300,
  "accessTokenTtlSeconds": 60,
  "accessTokenSecret": "",
  "portalArrivalCooldownEnabled": true,
  "portalArrivalCooldownSeconds": 20,
  "loginPortalSafetySeconds": 20
}

mods/ServerRouter/config.json

VAD DET GÖR

Backends kan neka direkt åtkomst och bara ta emot spelare från auktoriserade transfers.

VIKTIGT BETEENDE

  • Med allowDirectAccess=false används den tillfälliga auktoriseringen från källservern.
  • Hytales native whitelist är fortsatt slutlig auktoritet för åtkomst.
  • Arrival-cooldowns hindrar oavsiktlig portal-bounce direkt efter login eller transfer.

KAPITEL 05 · 1 EXEMPEL

Portaler

Använd samma routes för reseportaler med samma nätverkskontroller.

01KONFIGURATION

Portaler kopplade till routes

Portaler använder routerdestinationer och samma tillgänglighets- och säkerhetskontroller.

KONFIGURATION
{
  "routes": [
    {
      "name": "Dungeon",
      "command": "dungeon",
      "aliases": [],
      "serverId": "dungeon",
      "host": "dungeon.example.com",
      "port": 5521,
      "permission": "serverrouter.command.dungeon"
    }
  ],
  "portalArrivalCooldownEnabled": true,
  "portalArrivalCooldownSeconds": 20
}

mods/ServerRouter/config.json → routes[]

VAD DET GÖR

Portaler använder routerdestinationer och samma tillgänglighets- och säkerhetskontroller.

VIKTIGT BETEENDE

  • Ingen extra destination behövs: routen är gemensam källa.
  • Portal-assets genereras av pluginet och laddas som runtime asset pack.
  • Om destinationen är offline, full eller otillgänglig blockeras transfer.

KAPITEL 06 · 1 EXEMPEL

Delade system

Chat, events, player list och Presence API delar information mellan alla servrar.

01KONFIGURATION

Global chat och events

Servrar kan dela chat och viktiga events så att Hub, Survival, Dungeon, Creative och andra noder känns som ett nätverk.

KONFIGURATION
{
  "networkChat": {
    "enabled": true,
    "pollSeconds": 1,
    "messageTtlSeconds": 300,
    "maxMessageLength": 300,
    "captureMode": "eliteessentials",
    "serverDisplayNames": {
      "hub": "Hub",
      "survival": "Survival",
      "creative": "Creative"
    },
    "remoteFormat": "&8[&b%server%&8] &r%chat_format%",
    "fallbackFormat": "&8[&b%server%&8] &7%player%&r: &f%message%"
  },
  "networkEvents": {
    "enabled": true,
    "pollSeconds": 1,
    "eventTtlSeconds": 300,
    "joinEnabled": true,
    "quitEnabled": true,
    "switchEnabled": true,
    "suppressServerSwitchJoinQuit": true,
    "quitDelaySeconds": 3,
    "respectVanish": true
  }
}

mods/ServerRouter/config.json

VAD DET GÖR

Servrar kan dela chat och viktiga events så att Hub, Survival, Dungeon, Creative och andra noder känns som ett nätverk.

VIKTIGT BETEENDE

  • Network Chat vidarebefordrar meddelanden mellan deltagande servrar med källserverns namn och ett gemensamt konfigurerbart format.
  • captureMode väljer källa för lokal chat; remoteFormat använder befintlig formatering och fallbackFormat ger ett säkert alternativ.
  • serverDisplayNames ger läsbara namn som Hub, Survival eller Creative i stället för tekniskt serverId.
  • Network Events kan annonsera join, quit och serverbyte över hela nätverket; varje typ kan styras separat.
  • suppressServerSwitchJoinQuit hindrar serverbyte från att se ut som falsk quit + join.
  • quitDelaySeconds skiljer verklig disconnect från pågående transfer; respectVanish skyddar dolda spelare när integrationen stödjer det.
  • Network Player List och Presence API delar presence utan att varje integration behöver egna databasfrågor.

KAPITEL 07 · 2 EXEMPEL

Native scoreboard

Konfigurera innehåll, placering, färger, logo och overrides för worlds eller dynamiska instances.

01KONFIGURATION

Global scoreboard

Native scoreboard är oberoende och kan placeras i ett av fyra hörn med pixel-offsets.

KONFIGURATION
{
  "refreshSeconds": 10,
  "horizontal": "right:0",
  "vertical": "top:0",
  "boardWidth": 180,
  "backgroundColor": "default",
  "backgroundAlpha": 0.2,
  "logo": "hytari_logo.png",
  "logoWidth": 256,
  "logoHeight": 64,
  "maxLines": 12,
  "lines": [
    "&fOnline: &b{serverrouter_total_online} &7| &fTPS: &b{tps}",
    "&fPlayer: &b{player}",
    "&fWorld: &b{world}"
  ]
}

mods/ServerRouter/scoreboard.json

VAD DET GÖR

Native scoreboard är oberoende och kan placeras i ett av fyra hörn med pixel-offsets.

VIKTIGT BETEENDE

  • Native scoreboard är valfri och kan stängas av utan att inaktivera ServerRouter eller nätverksfunktioner.
  • horizontal accepterar left:<px> eller right:<px>; vertical top:<px> eller bottom:<px>.
  • backgroundColor accepterar default, none eller HEX #RRGGBB.
  • logo: none döljer logon. Rader stödjer formatering och dynamiska placeholders.
  • Externa scoreboards kan använda ServerRouter-placeholders utan att visa den native.
02KONFIGURATION

Overrides per world och dynamiska instances

Ett world kan ärva global konfiguration och bara ändra nödvändiga fält.

KONFIGURATION
{
  "worlds": {
    "instance-Forgotten_Temple-*": {
      "enabled": true,
      "horizontal": "left:18",
      "vertical": "bottom:120",
      "backgroundColor": "#0E4E0D",
      "backgroundAlpha": 0.25
    },
    "creative_world": {
      "enabled": false
    }
  }
}

mods/ServerRouter/scoreboard.json → worlds

VAD DET GÖR

Ett world kan ärva global konfiguration och bara ändra nödvändiga fält.

VIKTIGT BETEENDE

  • Matching är case-insensitive och stödjer * för instances med dynamiskt suffix.
  • Prioritet: exakt world-namn > mest specifik wildcard > global konfiguration.
  • Ett override kan ändra placering, rader, bredd, bakgrund eller logo utan att duplicera hela blocket.

KAPITEL 08 · 2 EXEMPEL

Inventory Sync och ItemQuality

Synkronisera inventories säkert och bevara ItemQuality mellan olika registries.

01KONFIGURATION

Inventory Sync

Inventory sync är valfri och använder tillfälliga locks för load, save och samtidiga transfers.

KONFIGURATION
{
  "inventorySync": {
    "enabled": false,
    "lockTtlSeconds": 120,
    "lockRefreshSeconds": 30,
    "autoSaveEnabled": true,
    "autoSaveIntervalSeconds": 600,
    "profileSaveDelayMillis": 1500,
    "loadingInventoryMessageEnabled": true,
    "loadingInventoryMessage": "server.serverrouter.inventory.loading",
    "lockedInventoryMessage": "server.serverrouter.inventory.locked",
    "debugQualityMapping": false,
    "qualityMappingLogRetentionDays": 3
  }
}

mods/ServerRouter/config.json → inventorySync

VAD DET GÖR

Inventory sync är valfri och använder tillfälliga locks för load, save och samtidiga transfers.

VIKTIGT BETEENDE

  • Aktivera bara på servrar som ska dela samma inventory-profil.
  • Locks hindrar samtidig åtkomst som kan orsaka duplicering eller överskrivning.
  • Låt debugQualityMapping vara av vid normal drift.
02KONFIGURATION

ItemQuality mellan olika registries

ServerRouter bevarar kvaliteters semantiska identitet i stället för bara runtime-index.

KONFIGURATION
{
  "itemQualityMapping": {
    "enabled": false,
    "log-to-file": true,
    "log-to-console": false
  }
}

mods/ServerRouter/config.json

VAD DET GÖR

ServerRouter bevarar kvaliteters semantiska identitet i stället för bara runtime-index.

VIKTIGT BETEENDE

  • ItemQuality-diagnostik är mest användbar vid olika registries eller mods.
  • Om en kvalitet saknas på destinationen används säker fallback och originalidentiteten bevaras när möjligt.
  • Mappingloggar är diagnostik och behövs inte i ett stabilt nätverk.

KAPITEL 09 · 1 EXEMPEL

Placeholders, API och diagnostik

Integrera companion mods, ladda om scoreboard och använd diagnostik vid behov.

01KONFIGURATION

Placeholders och API för companion mods

Scoreboard har interna placeholders och ett publikt API låter andra mods registrera nya utan patching.

KONFIGURATION
{
  "integrations": {
    "api": {
      "enabled": true,
      "cacheSeconds": 10
    },
    "betterScoreBoard": {
      "enabled": false,
      "registerPlaceholders": true
    }
  },
  "scoreboardExample": [
    "{player}",
    "{world}",
    "{tps}",
    "{serverrouter_total_online}",
    "{myplugin_rank}"
  ]
}

Java API + scoreboard.json

VAD DET GÖR

Scoreboard har interna placeholders och ett publikt API låter andra mods registrera nya utan patching.

VIKTIGT BETEENDE

  • Custom placeholders är case-insensitive och kan inte ta över redan lösta interna placeholders.
  • Native scoreboard kan vara avstängd; ServerRouter-placeholders kan användas i kompatibla externa scoreboards eller mods.
  • BetterScoreBoard stöds via särskild integration. För andra scoreboards kan specifik kompatibilitet utvärderas.
  • Read-only Presence/Network API hindrar separata databasfrågor från varje mod.
  • Använd /scoreboard reload efter ändringar i konfiguration, logo eller layout.

Innan du använder ett exempel

Exemplen fokuserar avsiktligt på en modul i taget. Slå ihop de visade egenskaperna med rätt fil i stället för att ersätta en full produktionskonfiguration med ett delvis exempel.

Databasuppgifter och hosts är exempel. Publicera aldrig riktiga lösenord eller secrets och dela bara samma databas mellan servrar i samma betrodda nätverk.

Den offentliga releasen använder horizontal/vertical för scoreboard-positionering. Gamla offsetRight/offsetTop-fält från utvecklingsbuilds ingår inte i dokumenterad konfiguration.

TILL TOPPEN