Crossplay SMP: jeden serwer dla Java i Bedrock przez Geyser i Floodgate
Kiedy znajomi z PC i kuzyn z telefonu chca grac na tym samym swiecie, dzielenie ich na dwa serwery nie ma sensu. Geyser plus Floodgate zamienia zwykly Paper w cross-platformowy SMP, gdzie gracze Java i Bedrock biegaja po tym samym swiecie. W tym poradniku przechodzimy przez instalacje, pokazujemy jak Floodgate uwierzytelnia Bedrock bez konta Java, i omawiamy pulapki przy prefiksach, paczkach zasobow i anty-cheacie.
Po co laczyc Java i Bedrock
Oba klienty sa rozdzielone protokolem i platforma. Java Edition mowi po TCP i wymaga loginu Mojang. Bedrock Edition (mobile, Switch, Xbox, PlayStation, Windows 10) korzysta z RakNet po UDP i jest powiazany z Xbox Live. Na czystym serwerze vanilla nigdy sie nie spotykaja.
Geyser uruchamia sie jako plugin lub proxy i tlumaczy pakiety RakNet z klienta Bedrock na pakiety Java, ktore rozumie Paper. Floodgate rozwiazuje drugi problem: wpuszcza gracza Bedrock na serwer bez konta Java, generujac deterministyczne UUID i nazwe na podstawie Xbox Live ID.
Efekt: jeden serwer Paper trzyma obie grupy, wspolny swiat, wspolny czat, wspolna progresja. Najtanszy sposob postawienia SMP na 30-50 graczy z mieszanych platform.
Geyser-Spigot czy Geyser-Standalone
Geyser ma kilka wariantow i wlasciwy trzeba wybrac od razu:
- Geyser-Spigot - jar do
plugins/zwyklego Paper lub Purpur. Dziala w tym samym procesie co serwer. Rekomendowany dla pojedynczego SMP. - Geyser-Standalone - oddzielny proces, sluchajacy na porcie i przekierowujacy do serwera Java. Przydatne na hostingach managed, gdzie nie kontrolujesz serwera.
- Geyser-Velocity / Geyser-BungeeCord - dla sieci proxy. Plugin siedzi wtedy na proxy.
- Geyser-Fabric / Geyser-NeoForge - dla serwerow modded.
Dla klasycznego SMP na Paper bierzesz Geyser-Spigot.jar i floodgate-spigot.jar z GeyserMC GitHub Releases i Floodgate Releases. Oba jary musza byc na te sama wersje Minecrafta.
Instalacja na Paper lub Purpur
Wersje Minecrafta z aktualnym wsparciem: 1.20.x i 1.21.x. Na 1.19 i nizszych Geyser jeszcze dziala, ale aktualizacji juz nie ma.
Kroki sa krotkie:
- Zatrzymaj serwer.
- Wrzuc
Geyser-Spigot.jarifloodgate-spigot.jardoplugins/. - Uruchom serwer. Pluginy stworza
plugins/Geyser-Spigot/config.ymliplugins/floodgate/config.yml. - Zatrzymaj, popraw configi, uruchom ponownie.
Minimalny plugins/Geyser-Spigot/config.yml:
bedrock:
address: 0.0.0.0
port: 19132
clone-remote-port: false
motd1: "Crossplay SMP"
motd2: "Java + Bedrock"
server-name: "Crossplay SMP"
remote:
address: auto
port: auto
auth-type: floodgate
passthrough-motd: true
passthrough-player-counts: true
allow-third-party-capes: true
allow-third-party-ears: false
show-cooldown: title
show-coordinates: true
auth-type: floodgate mowi Geyserowi, zeby uwierzytelnianie Bedrocka oddal Floodgate. Bez tego Geyser probowalby pytac o konto Java, co nie zadziala na konsolach i telefonach.
Minimalny plugins/floodgate/config.yml:
key-file-name: key.pem
username-prefix: "."
replace-spaces: true
disable-firstjoin-message: false
disable-leave-message: false
default-locale: system
Plik key.pem Floodgate generuje przy pierwszym uruchomieniu. Jezeli rownolegle uruchamiasz Geyser-Standalone, ten sam plik trzeba tam skopiowac.
Porty i firewall
Bedrock chodzi po UDP, nie TCP. To czesto myli, bo dla Java przyzwyczajenie kaze otwierac tylko 25565/tcp.
Trzeba otworzyc:
25565/tcpdla klientow Java (standardowy port serwera)19132/udpdla klientow Bedrock (standardowy port Geysera)
W iptables wyglada to tak:
iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
iptables -A INPUT -p udp --dport 19132 -j ACCEPT
Jezeli stoisz za ochrona DDoS, dostawca musi jawnie wiedziec, ze 19132/udp tez ma byc proxy-owane jako port gry. Ataki UDP maja swoja specyfike: RakNet uwielbia zalewanie pakietami unconnected ping, a bez porzadnego filtra UDP serwer szybko padnie. Rozwiazania jak MineGuard lapia to na poziomie filtra.
Prefiks Floodgate i kropka przed nazwa
Domyslnie Floodgate dodaje . przed kazda nazwa Bedrocka. Jesli na Xbox Live gracz nazywa sie SteveBE, na serwerze pojawia sie jako .SteveBE.
Powod: Java i Bedrock maja rozne zasady dla nazw. Java zabrania znakow specjalnych i spacji, Bedrock pozwala wiele lacznie ze spacjami i emoji. Jezeli gracz Java zarejestrowal sie jako SteveBE, a potem przychodzi konto Bedrock z ta sama nazwa, jest konflikt. Prefiks z kropka rozwiazuje sprawe: kropka jest niedozwolona w nazwie Java, wiec konto Java .SteveBE z definicji nie moze istniec.
replace-spaces: true dodatkowo zamienia spacje w nazwach Bedrock na _, inaczej pluginy parsujace argumenty komend pekaja.
Mozna ustawic prefiks na pusty, ale wtedy wszystkie kolizje sa na twojej glowie. Zwykle zostawiam kropke: goscie widza .Username i od razu wiedza, ze to gracz z telefonu lub konsoli.
UUID graczy Bedrock
Floodgate nie wydaje przypadkowych UUID. Bierze Xbox Live ID i przez UUID v3 (nazwa-w-przestrzeni) wylicza deterministyczne UUID, zawsze takie samo dla danego konta. To wazne, bo cale ekwipunek i postep w Minecrafcie sa wiazane z UUID.
Praktyczny wniosek: jezeli przenosisz graczy miedzy serwerami z tym samym Floodgate, ekwipunek i uprawnienia LuckPerms zgadzaja sie po UUID. Jesli zmieniasz logike Floodgate albo migrujesz z innego rozwiazania jak GeyserConnect, UUID moze sie rozjechac i Bedrockowi straca postep.
W wiekszosci przypadkow to jednorazowy bol migracji. W obrebie jednego serwera UUID jest stabilne.
Resource packi i tekstury
Geyser konwertuje paczki zasobow Java na format Bedrock w locie, ale nie kazda paczka przezyje konwersje. Co dziala dobrze:
- Podmiana tekstur blokow i przedmiotow
- Podmiana dzwiekow
- Custom modele przez CustomModelData (z zastrzezeniem, patrz nizej)
Co dziala slabo lub wcale:
- OptiFine CIT (Connected Item Textures) - czesciowo przez Geyser, nie wszystko
- OptiFine CEM (Custom Entity Models) - na Bedrocku nieobslugiwane
- Shadery - to inna bajka, Bedrock ma swoj system RenderDragon
CustomModelData. Pluginy Java jak ItemsAdder, MMOItems czy Oraxen uzywaja CMD do wlasnych przedmiotow. Na Bedrocku dziala to tylko jesli paczka pod Bedrock jest zbudowana osobno. ItemsAdder od reki potrafi wygenerowac wariant Bedrock; Oraxen ma mostek do Geysera przez plugin-mappings; MMOItems jest trudniejsze i zwykle wymaga recznego paku Bedrock.
W Geyser-Spigot/config.yml wlaczamy:
load-resource-packs: true
Po tym wszystkie paczki z plugins/Geyser-Spigot/packs/ ida na klienta Bedrock.
UI i interfejsy: co glitch-uje na Bedrocku
Bedrock renderuje wiekszosc interfejsow Java przez wlasne UI i nie wszystko przechodzi czysto.
- Edycja tabliczek - Bedrock otwiera wlasna klawiature, dziala. Color codes przez
&moga sie nie przeniesc. - Kowadlo - zmiana nazwy dziala z limitem dlugosci. Dlugie nazwy sa obcinane.
- Ksiazki - edycja dziala, ale bez formatowania.
- Bloki komend - otwieraja sie jako pola tekstowe, dzialaja.
- Custom GUI nad inwentarzem (menu pluginow przez chest GUI) - dzialaja prawie zawsze, ale Bedrock nie widzi animacji ticku i czasem nie trafia w klikniecie w pierwszej sekundzie.
- Form-menu Geysera - Geyser udostepnia API do otwierania natywnych form Bedrock z poziomu pluginu. Lepsza droga dla paneli admina dedykowanych Bedrockowi niz chest GUI.
Przed startem przejdz po glownych scenariuszach z urzadzenia Bedrock. Lepiej raz zlapac blad lokalnie niz biegac z poprawkami przy realnych graczach.
Co dziala inaczej na Bedrocku
Wieczny bol crossplay. Kilka kluczowych rzeczy:
- Automatyka redstone. Podstawowe schematy zachowuja sie tak samo, ale precyzyjne timingi (BUDy, repeatery na granicy ticka) chodza inaczej. Tutaj jestesmy na serwerze Java, wiec rzadzi logika Java. Gracz Bedrock widzi tylko wynik.
- Lot na elytrze. Dziala, ale czulosc pitch-u rozni sie na konsolach z padem.
- Menu F3, pie chart, wykresy lagow. Na Bedrocku tego nie ma. Diagnoza wydajnosci tylko od strony Java.
- Komendy. Bedrock rysuje wlasne UI dla komend, ale plugin-komendy bez Brigadier-providera argumentow wygladaja jak goly tekst. Trzeba je opakowac przez Geyser Form API.
Anty-cheat i Bedrock
Czule miejsce. Anty-cheaty jak GrimAC i Vulcan sa pisane pod silnik Java i sprawdzaja fizyke wzorami Java. Fizyka Bedrocka jest troche inna i bez exemptions Bedrock-gracze dostaja false-positive na MovementY albo KnockbackUtil w pierwszej minucie.
GrimAC od 2.3.x oficjalnie wspiera Floodgate i sam exempt-uje przy connect. Vulcan tez to potrafi, ale config trzeba ruszyc recznie. Minimalny przyklad Vulcana:
checks:
movement:
enabled: true
exempt-floodgate: true
combat:
reach:
exempt-floodgate: true
Calkiem wylaczyc anty-cheat dla Bedrocka nie wolno: i tak mozna oszukiwac przez klienty zewnetrzne jak Horion czy ToolBox. Ale movement-checki trzeba poluzowac.
Prefiksy w czacie i LuckPerms
Zeby w czacie odroznic Java od Bedrocka, dodaje sie tag. Przez LuckPerms to ciag komend:
lp creategroup bedrock
lp group bedrock meta setprefix 10 "&e[B] "
lp creategroup java
lp group java meta setprefix 10 "&a[J] "
lp group default parent add java
Floodgate automatycznie wrzuca Bedrock-graczy do grupy bedrock, jezeli w plugins/floodgate/config.yml ustawisz default-group: bedrock (opcja siedzi w dodatkach, sprawdz wersje). Alternatywnie plugin FloodgateExtras albo maly hak EssentialsX:
# przez EssentialsX-Discord lub skrypt onJoin
on player_join:
if player has permission "floodgate.player":
add player to lp group "bedrock"
Po tym Bedrock-gracze pojawiaja sie na czacie jako [B] .Steve a Java jako [J] Alex. Wygodne dla moderacji.
Wydajnosc
Sam Geyser je malo, okolo 10-30 MB RAM i mikroskopijny ulamek CPU na tlumaczenie protokolu. Floodgate jeszcze lzejszy, jego rola to sprawdzic handshake i wygenerowac UUID.
Realny narzut zostaje na Paper i swiat. Bedrock wysyla chunk-requesty tak samo jak Java, serwer przetwarza kazdy chunk raz. Jesli 8 GB RAM starczalo na 30 graczy Java, to z Bedrockiem starczy na te same 30 lacznie, nie wiecej. Geyser nie jest magia i nie zmniejsza realnego obciazenia.
Co warto wlaczyc:
view-distance: 8wserver.properties. Bedrock na telefonach i tak wiecej plynnie nie wyrenderuje.network-compression-threshold: 256dla klientow Java, na Bedrocku ten parametr nie wplywa.- Pre-generacja swiata przez Chunky przed startem SMP. Klienty Bedrock w sieci komorkowej sa szczegolnie wrazliwe na lagi generacji.
FAQ
Geyser i Floodgate, jaka jest roznica?
Geyser tlumaczy protokol: pakiety klienta Bedrock zamienia w pakiety Java, ktore rozumie serwer. Floodgate odpowiada za uwierzytelnianie: gracz Bedrock nie potrzebuje konta Java, Floodgate weryfikuje token Xbox Live i wpuszcza go. Stawia sie je razem. Bez Floodgate klient Bedrock dotrze do Geysera, ale serwer go nie wpusci bez loginu Java.
Czy mozna zrobic crossplay na vanilla?
Na czystym vanilla.jar nie da sie, ani Geyser ani Floodgate sie tam nie zainstaluja. Minimum to Paper, Purpur albo Spigot, bo Vanilla nie ma systemu pluginow. Jezeli chcesz zachowac vanilla-feel, postaw Paper i po prostu nie dodawaj zadnych innych pluginow oprocz Geysera i Floodgate. Mechanicznie Paper jest bardzo blisko Vanilli.
Jak zarejestrowac gracza Bedrock bez konta Java?
Recznie nic nie trzeba. Floodgate akceptuje token Xbox Live z urzadzenia gracza i sam generuje UUID na podstawie xboxId. Przy pierwszym wejsciu gracz po prostu pojawia sie na serwerze, juz z wlasnym UUID i nazwa z prefiksem .. Jezeli masz AuthMe albo inny plugin loginu, zwykle wylacza sie go dla Floodgate-graczy przez auto-login: true lub exempt na permission floodgate.player.
Czy gracze Bedrock widza skiny Java?
Zalezy od paku. Skiny Java to PNG 64x64, Bedrock ma wlasny format. Geyser konwertuje skin Java na skin Bedrock w locie i Bedrock widzi mniej wiecej to samo. Opcja allow-third-party-capes: true w configu Geysera wlacza peleryny. Jeden niuans: modele 4D i animowane skiny Bedrock nie sa pokazywane na Java. Java widzi tylko teksture ciala, bez czastek i animacji.
Czy Bedrock moze laczyc sie na tym samym 25565?
Nie. Bedrock chodzi po UDP i RakNet, Java po TCP. To rozne transporty, nie da sie ich obsluzyc jednym socketem. Geyser trzyma osobny port UDP (domyslnie 19132). Mozna zmienic bedrock.port na dowolny port UDP, ale wtedy klienty Bedrock musza wpisywac port recznie. W Featured Servers UDP/19132 to standard.
Co zrobic, gdy pluginy padaja na Bedrocku?
Najpierw sprawdz, czy plugin ma wersje Bedrock-kompatybilna albo most do Geysera. Dla popularnych (ItemsAdder, Citizens, ProtocolLib) takie sa. Dla rzadkich pluginow latwiej opakowac UI przez Geyser Form API: Bedrock dostaje natywny formularz, Java zostaje przy starym chest GUI. Jednorazowa robota po stronie serwera.
Co dalej
Geyser plus Floodgate stawia sie na dowolnym SMP Paper w pol godziny. Tylko nie zapomnij portu UDP w firewallu, exemption w anty-cheacie i testu glownych GUI z urzadzenia Bedrock.
Trzy dalsze kroki: ustawic prefiksy grup w LuckPerms, zeby moderacja widziala platforme; zbudowac wspolny resource pack i przetestowac go na telefonie, zeby przedmioty CMD dzialaly po obu stronach; wstawic chocby podstawowa ochrone DDoS przed port UDP, bo serwer Bedrock na golym IP to magnes na flooding RakNet.
Chroń swój serwer przed atakami DDoS
Darmowa ochrona z konfiguracją w 5 minut. 1 TB ruchu w zestawie.
Wypróbuj za darmoPowiązane artykuły
MythicMobs: poradnik o custom mobach i bossach Minecraft
Instalacja MythicMobs, format YAML, skille z triggerami, dropy i spawnery. Realne configi bossow i optymalizacja TPS z produkcji.
Crash-exploity w Minecraft: book ban, chunk ban i jak się przed nimi bronić
Rozbieramy wszystkie rodzaje crash-exploitów: book ban, chunk ban, packet exploits, entity cramming i inne. Jak działają, czym się różnią od DDoS i jak chronić serwer ustawieniami Paper, pluginami i filtrowaniem sieciowym.
WorldGuard: konfiguracja ochrony terenu i walka z griefem
Konfiguracja WorldGuard na Paper lub Spigot: regiony, flagi, hierarchia priorytetów i parent, ochrona przed griefem bez typowych błędów.