HyTari Studios · Resmî yapılandırma rehberi

Server Router

Her modülü anlayarak ağı yapılandırın.

Server Router - Network Sync için pratik bir referans. Sunucu kimliği ve route'lardan paylaşılan sistemlere, native scoreboard'a ve isteğe bağlı inventory sync'e kadar ilerleyin. Her bölüm kopyalanabilir JSON ile ayarların gerçek davranışını açıklar.

BAŞLAMADAN ÖNCE

Başlangıç

ADIM 01

Her sunucuya kurun

Ağa katılan her node'da aynı ServerRouter build'ini kullanın.

ADIM 02

Her seferinde bir node yapılandırın

Her sunucuya benzersiz serverId, kendi host/port bilgisi ve doğru rolü verin.

ADIM 03

Erişimi açmadan önce test edin

Genel trafiğe açmadan önce route'ları ve backend korumasını staff hesaplarıyla doğrulayın.

ServerRouter ağ altyapısıdır: kimlik bilgileri, host adları, izinler ve direct-access kurallarını dikkatle yapılandırın. Birden fazla modülü değiştirmeden önce production yapılandırmasının yedeğini tutun.

BÖLÜM 01 · 1 ÖRNEKLER

Kurulum ve rol

Sunucuyu ağda tanımlayın ve router, backend ya da her ikisi olarak çalışıp çalışmayacağını belirleyin.

01YAPILANDIRMA

Sunucu kimliği ve rolü

Her ağ node'u benzersiz bir serverId'ye ve diğer sunucuların erişebileceği bir adrese sahip olmalıdır.

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

mods/ServerRouter/config.json

NE YAPAR

Her ağ node'u benzersiz bir serverId'ye ve diğer sunucuların erişebileceği bir adrese sahip olmalıdır.

ÖNEMLİ DAVRANIŞ

  • role: main routing işlevlerini açar, backend transfer kabul eder, both iki rolü birleştirir.
  • serverId sabit kalmalı ve route'larda/ağ modüllerinde kullanılan değerle eşleşmelidir.
  • acceptingPlayers bir sunucuyu kapatmadan geçici olarak hedeflerden çıkarabilir.

BÖLÜM 02 · 1 ÖRNEKLER

Veritabanı ve heartbeat

MariaDB'yi ve her sunucunun durumunu ne sıklıkla yayınlayacağını yapılandırın.

01YAPILANDIRMA

MariaDB, heartbeat ve online durumu

ServerRouter durum, presence, transferler ve ağ modüllerini paylaşmak için MariaDB kullanır.

YAPILANDIRMA
{
  "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

NE YAPAR

ServerRouter durum, presence, transferler ve ağ modüllerini paylaşmak için MariaDB kullanır.

ÖNEMLİ DAVRANIŞ

  • Aynı ağdaki tüm sunucular aynı veritabanını kullanmalıdır.
  • heartbeatIntervalSeconds node'un durumunu ne sıklıkla güncellediğini belirler.
  • offlineTimeoutSeconds heartbeat gelmeyen bir node'un ne zaman kullanılamaz sayılacağını belirler.

BÖLÜM 03 · 1 ÖRNEKLER

Route'lar ve komutlar

Hedefleri, komutları, alias'ları, izinleri ve route mesajlarını tanımlayın.

01YAPILANDIRMA

Route'lar, komutlar, alias'lar ve izinler

Her route bir komutu hedef sunucuya bağlar ve transferden önce kontrol edilir.

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

mods/ServerRouter/config.json → routes[]

NE YAPAR

Her route bir komutu hedef sunucuya bağlar ve transferden önce kontrol edilir.

ÖNEMLİ DAVRANIŞ

  • Komut JSON'da slash olmadan tutulur ve oyunda /survival olarak kullanılır.
  • aliases aynı transfer için alternatif adlar ekler.
  • Referral öncesinde ServerRouter hedefin durumunu, kapasitesini ve kullanılabilirliğini kontrol eder.

BÖLÜM 04 · 1 ÖRNEKLER

Transfer güvenliği

Backend'leri koruyun; geçici yetkilendirmeleri, rejoin ve cooldown'ları yönetin.

01YAPILANDIRMA

Backend koruması ve transfer token'ları

Backend sunucular direct access'i reddedip yalnızca yetkili transferlerden gelen oyuncuları kabul edebilir.

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

mods/ServerRouter/config.json

NE YAPAR

Backend sunucular direct access'i reddedip yalnızca yetkili transferlerden gelen oyuncuları kabul edebilir.

ÖNEMLİ DAVRANIŞ

  • allowDirectAccess=false olduğunda backend kaynak sunucunun geçici yetkilendirmesini kullanır.
  • Hytale'ın native whitelist sistemi erişim için son otorite olarak kalır.
  • Arrival cooldown login veya transferden hemen sonra istenmeyen portal geri sıçramasını önler.

BÖLÜM 05 · 1 ÖRNEKLER

Portallar

Aynı route'ları aynı ağ kontrollerine sahip yolculuk portalları için kullanın.

01YAPILANDIRMA

Route'lara bağlı portallar

Portallar router'da tanımlı hedefleri ve aynı kullanılabilirlik/güvenlik kontrollerini kullanır.

YAPILANDIRMA
{
  "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[]

NE YAPAR

Portallar router'da tanımlı hedefleri ve aynı kullanılabilirlik/güvenlik kontrollerini kullanır.

ÖNEMLİ DAVRANIŞ

  • Portal için ikinci bir hedef gerekmez; route ortak kaynaktır.
  • Portal asset'leri plugin tarafından oluşturulur ve runtime asset pack olarak yüklenir.
  • Hedef offline, dolu veya kullanılamaz durumdaysa transfer engellenir.

BÖLÜM 06 · 1 ÖRNEKLER

Paylaşılan sistemler

Chat, events, player list ve Presence API tüm sunucular arasında bilgi paylaşır.

01YAPILANDIRMA

Global chat ve events

Sunucular chat ve temel ağ olaylarını paylaşarak Hub, Survival, Dungeon, Creative ve diğer node'ların tek bir ağ gibi hissedilmesini sağlar.

YAPILANDIRMA
{
  "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

NE YAPAR

Sunucular chat ve temel ağ olaylarını paylaşarak Hub, Survival, Dungeon, Creative ve diğer node'ların tek bir ağ gibi hissedilmesini sağlar.

ÖNEMLİ DAVRANIŞ

  • Network Chat oyuncu mesajlarını katılımcı sunucular arasında iletir; kaynak sunucu adı ve ortak yapılandırılabilir format korunur.
  • captureMode yerel chat'in hangi sistemden alındığını belirler; remoteFormat mevcut biçimlendirmeyi kullanır, fallbackFormat güvenli bir alternatif sağlar.
  • serverDisplayNames teknik serverId yerine Hub, Survival veya Creative gibi okunabilir adlar verir.
  • Network Events join, quit ve server switch olaylarını ağ çapında duyurabilir; her tür ayrı ayrı açılıp kapatılabilir.
  • suppressServerSwitchJoinQuit bir sunucu değişiminin sahte quit + yeni join olarak görünmesini önler.
  • quitDelaySeconds gerçek disconnect'i devam eden transferden ayırmaya yardımcı olur; respectVanish entegrasyon destekliyorsa gizli oyuncuları açığa çıkarmaz.
  • Network Player List ve Presence API oyuncu presence bilgisini uyumlu sunucu/modlarla paylaşır ve her entegrasyonun veritabanını ayrı sorgulamasını önler.

BÖLÜM 07 · 2 ÖRNEKLER

Native scoreboard

İçerik, konum, renkler, logo ve world/dinamik instance override'larını yapılandırın.

01YAPILANDIRMA

Global scoreboard

Native scoreboard bağımsızdır ve pixel offset ile dört köşeden birine yerleştirilebilir.

YAPILANDIRMA
{
  "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

NE YAPAR

Native scoreboard bağımsızdır ve pixel offset ile dört köşeden birine yerleştirilebilir.

ÖNEMLİ DAVRANIŞ

  • Native scoreboard isteğe bağlıdır; ServerRouter veya ağ sistemleri kapatılmadan devre dışı bırakılabilir.
  • horizontal left:<px> veya right:<px>; vertical top:<px> veya bottom:<px> kabul eder.
  • backgroundColor default, none veya HEX #RRGGBB kabul eder.
  • logo: none logoyu gizler. Satırlar biçimlendirme ve dinamik placeholders destekler.
  • Harici scoreboard tercih ederseniz native scoreboard'u göstermeden ServerRouter placeholders kullanabilirsiniz.
02YAPILANDIRMA

World override'ları ve dinamik instance'lar

Bir world global yapılandırmayı devralabilir ve yalnızca gerekli alanları değiştirebilir.

YAPILANDIRMA
{
  "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

NE YAPAR

Bir world global yapılandırmayı devralabilir ve yalnızca gerekli alanları değiştirebilir.

ÖNEMLİ DAVRANIŞ

  • Matching büyük/küçük harfe duyarsızdır ve dinamik suffix'li instance world'leri için * destekler.
  • Öncelik: tam world adı > en spesifik wildcard > global yapılandırma.
  • Override tüm global bloğu kopyalamadan konum, satırlar, genişlik, arka plan veya logo değiştirebilir.

BÖLÜM 08 · 2 ÖRNEKLER

Inventory Sync ve ItemQuality

Envanterleri güvenle senkronize edin ve farklı registry'ler arasında ItemQuality'yi koruyun.

01YAPILANDIRMA

Inventory Sync

Envanter senkronizasyonu isteğe bağlıdır ve load, save ve eşzamanlı transferleri korumak için geçici locks kullanır.

YAPILANDIRMA
{
  "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

NE YAPAR

Envanter senkronizasyonu isteğe bağlıdır ve load, save ve eşzamanlı transferleri korumak için geçici locks kullanır.

ÖNEMLİ DAVRANIŞ

  • Yalnızca aynı inventory profilini paylaşması gereken sunucularda etkinleştirin.
  • Locks dupe veya üzerine yazmaya yol açabilecek eşzamanlı erişimi önler.
  • Normal kullanımda debugQualityMapping kapalı kalmalıdır.
02YAPILANDIRMA

Farklı registry'ler arasında ItemQuality

ServerRouter yalnızca runtime index'e güvenmek yerine kalitelerin semantik kimliğini korur.

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

mods/ServerRouter/config.json

NE YAPAR

ServerRouter yalnızca runtime index'e güvenmek yerine kalitelerin semantik kimliğini korur.

ÖNEMLİ DAVRANIŞ

  • ItemQuality tanılaması özellikle farklı registry veya mod kullanılan sunucularda yararlıdır.
  • Kalite hedefte yoksa güvenli fallback kullanılır ve mümkün olduğunda orijinal kimlik korunur.
  • Mapping logları tanılama aracıdır; stabil ağ için gerekli değildir.

BÖLÜM 09 · 1 ÖRNEKLER

Placeholders, API ve tanılama

Companion mod'ları entegre edin, scoreboard'u yeniden yükleyin ve gerektiğinde tanılama kullanın.

01YAPILANDIRMA

Companion mod'lar için placeholders ve API

Scoreboard yerleşik placeholders içerir ve public API başka mod'ların ServerRouter'ı patch etmeden yenilerini kaydetmesine izin verir.

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

Java API + scoreboard.json

NE YAPAR

Scoreboard yerleşik placeholders içerir ve public API başka mod'ların ServerRouter'ı patch etmeden yenilerini kaydetmesine izin verir.

ÖNEMLİ DAVRANIŞ

  • Custom placeholders büyük/küçük harfe duyarsızdır ve zaten çözülen yerleşik placeholders'ı ele geçiremez.
  • Native scoreboard kapalı kalabilir; ServerRouter placeholders uyumlu harici scoreboards veya mod'larda kullanılabilir.
  • BetterScoreBoard özel entegrasyonla desteklenir. Başka bir scoreboard placeholders'ı tanımıyorsa özel uyumluluk değerlendirilebilir.
  • Read-only Presence/Network API her mod'un veritabanını ayrı sorgulamasını önler.
  • Native scoreboard için yapılandırma, logo veya layout değişikliklerinden sonra /scoreboard reload kullanın.

Bir örneği kullanmadan önce

Örnekler bilinçli olarak tek bir modüle odaklanır. Kısmi bir örnekle tam production yapılandırmasını değiştirmek yerine gösterilen alanları ilgili dosyaya ekleyin.

Buradaki veritabanı bilgileri ve host adları örnektir. Gerçek parolaları veya secrets değerlerini asla yayımlamayın ve aynı paylaşılan veritabanını yalnızca aynı güvenilir ağdaki sunucularda kullanın.

Public release scoreboard konumu için horizontal/vertical kullanır. Geliştirme build'lerindeki eski offsetRight/offsetTop alanları belgelenen yapılandırmanın parçası değildir.

YUKARI DÖN