Hybrydowy modowany serwer Minecraft

Prywatny projekt infrastrukturalny polegający na zaprojektowaniu i utrzymaniu hybrydowego serwera Minecraft.

O projekcie

Projekt powstał jako prywatny serwer Minecraft uruchomiony na potrzeby wspólnej rozgrywki ze znajomymi. Wraz z rosnącą liczbą modów i pluginów architektura serwera stawała się coraz bardziej skomplikowana, co wymagało starannego dobierania odpowiednich rozwiązań, tak aby wszystko było stabilne oraz wydajne. Serwer został zaprojektowany jako hybrydowe środowisko łączące ekosystem pluginów z modami. Dlatego wybór silnika padł na Mohist, mimo znanych ograniczeń tego rozwiązania. Celem projektu było utrzymanie stabilnego serwera Minecraft łączącego mody Forge z pluginami Bukkit przy rosnącej liczbie zależności i ograniczeniach silnika.

Hardware

  • Intel Core i5-8500T
  • 16 GB RAM

Technologie wykorzystane w projekcie

Oprogramowanie

Pluginy

Bezpieczeństwo i administracja

Pluginy odpowiadające za kontrolę uprawnień, logowanie graczy i audyt działań na serwerze.

  • AuthMe
  • FastLogin
  • LuckPerms
  • CoreProtect
  • WorldGuard
Optymalizacja i wydajność

Narzędzia do monitorowania obciążenia serwera.

  • spark
QoL

Pozostałe pluginy QoL, administracyjne i biblioteki.

  • BetterRTP
  • CustomJoinMessages
  • DecentHolograms
  • LPC
  • MiniMOTD
  • NpcPlugin
  • PlaceholderAPI
  • PlayerKits2
  • ProtocolLib
  • SetSpawn
  • Shopkeepers
  • SimpleHomes
  • SimpleTpa
  • TAB
  • WorldEdit

Mody

Generacja świata i biomów

Mody zmieniające teren, struktury i klimat świata.

  • reterraforged
  • nullscape
  • incendium
  • structory
Gameplay i mechaniki

Nowe systemy rozgrywki, eksploracji i interakcji.

  • create
  • railways
QoL

Pozostałe mody QoL, biblioteki i inne.

  • another_furniture
  • architectury
  • brewery
  • christmasfestivity
  • cloth_config
  • corn_delight
  • cozy
  • ctov
  • deathfinder
  • decorative_blocks
  • doapi
  • doggytalents
  • farmersdelight
  • file/reterraforged-preset.zip
  • framedblocks
  • geckolib
  • konkrete
  • lithostitched
  • moa_decor_holidays
  • moonlight
  • mr_better_snowybiome
  • mysterious_mountain_lib
  • paraglider
  • resourcefullib
  • snowrealmagic
  • snowundertrees
  • snowy_tents
  • snowyspirit

Architektura

Gracze łączyli się do serwera poprzez reverse-proxy (NeoProtect), które odpowiadało za filtrowanie ruchu i podstawową ochronę sieciową. Logika serwera została rozdzielona na warstwy funkcjonalne: pluginy i mody. Pluginy odpowiadały głównie za administrację, bezpieczeństwo, uprawnienia i kontrolę świata, natomiast mody skupiały się na rozszerzaniu mechanik i dodawaniu contentu. Wszelkie dane z pluginów były przechowywane w MariaDB, co pozwoliło na niezależność od plików serwera i przechowywanie danych w jednym miejscu.

Bezpieczeństwo serwera

  • Logowanie premium + non-premium

Użytkownik podczas pierwszego wejścia na serwer musiał założyć konto. Przy każdym następnym logowaniu gracz musiał uwierzytelnić się hasłem, chyba że korzystał z konta premium, gdzie logowanie było automatyczne (hasło nie było wymagane).

  • Ochrona griefingu i rollbacki

Do ochrony przed griefingiem był wykorzystywany głównie plugin WorldGuard, który umożliwia zdefiniowanie regionów i ustawienie flag, co w danych regionach jest dozwolone.
Jeśli już by doszło do zgriefowania jakiejś części świata, był możliwy rollback za pomocą pluginu CoreProtect.

Wydajność

Pomiar wydajności serwera został wykonany za pomocą pluginu spark, w trakcie normalnej rozgrywki, przy około 10 graczach online.

Ograniczenia projektu

  • Niektóre mody/pluginy były niekompatybilne z innymi modami/pluginami lub z samym silnikiem, co wymagało dokładnego dobierania modów oraz pluginów i testów przed uruchomieniem serwera.
  • Projekt nie pozwalał na stworzenie sieci serwerów z użyciem velocity jako proxy.
  • Brak automatycznej aktualzacji modów i pluginów.

Co można było zrobić lepiej

  • Generatory Netheru i Endu działały niepoprawnie.
  • Optymalizacja wydajności serwera mogła być lepsza.
  • Można było użyć polskiego dostawcy ochrony sieciowej w celu zredukowania pingu.