Ranking
Popularna zawartość
Treść z najwyższą reputacją w 04/23/19 w Odpowiedzi
-
Łączenie graczy z serwerami pod BungeeCord
xAxee przyznał(a) reputację TheMolkaPL za temat
Witajcie Czerwono Towarzysze! W tym poradniku przedstawię Wam jak łączyć graczy z innym serwerem podpiętym do BungeeCord. Przydatne na przykład do łączenia graczy z serwera lobby na inne serwery (oraz vice-versa). Do dzieła! Chcesz wykonać instrukcję przeniesienia gracza na inny serwer. Na początku musisz jednak zrozumieć czym jest serwer, na przykład na silniku Spigot i czym jest BungeeCord. Bez tej wiedzy nieudolnie będziesz próbować różnych sztuczek z przenoszeniem na inny serwer. Na początku spróbuje tą trochę zobrazować. Prawdopodobnie wyobrażasz sobie, że BungeeCord działa na następującej zasadzie. Janusz wchodzi na serwer poprzez połączenie się przez BungeeCorda, następnie na serwerze (który jest serwerem lobby) wybiera inny serwer, więc ten go łączy. [CIACH] Jest to błąd bo serwer nie wysyła graczy na inny serwer. Wszystko robi BungeeCord. Serwer lobby jest kolejnym serwerem który działa na takiej samej zasadzie jak inne w tej samej sieci. Działa ona na identycznej zasadzie jak Creative, Free Build czy Survival. [CIACH] Aby móc przenieść Towarzysza Sebastian z serwera Lobby na serwer Creative należy do BungeeCord wysłać taką instrukcję. Tylko on przekierowuje połączenia i tylko on może przenosić graczy między serwerami. BungeeCord jest proxy między klientem, czyli Sebastianem, a fizycznym serwerem, czyli Lobby. Komendy BungeeCord, takie jak /end, /perms, /server, /find czy /alert są zatem komendami na proxy, a nie na serwerze. Co to oznacza? Klient z serwerem (i vice versa) komunikuje się za pomocą pakietów, czyli małych paczuszek z danymi. Może to być informacja o postawieniu klocka na mapie, ruszeniu się gracza, czy jego interakcji w świat. Towarzysz, na przykład Grażyna wpisuje na chacie komendę /server, klient do wysyła do serwera pakiet o wykonaniu komendy. Pakiet dociera do BungeeCorda, ten go otwiera i sprawdza czym on tak na prawdę jest. Widzi, że użyto komendy /server. Sprawdza on czy u siebie ma taką zarejestrowaną komendę. Jeśli nie wysyła ten pakiet dalej na serwer. Jeśli tak do ją wykonuje. To wszystko sprowadza się do tego, że serwer nie może wykonać za gracza komendy, bo musi ona zostać przesłana pakietem. Pakiet musi przejść przez proxy BungeeCorda. Wykonanie takiej czynności całkowicie więc odpada. BungeeCord natomiast oferuje wysyłanie danych między sobą a serwerem. Jest to tak zwany "Plugin Messaging Channel". Teraz pokażę Ci jak to zrobić Towarzyszu. 1. Najpierw musisz zarejestrować ten kanał w swoim pluginie. Najlepiej wykonać to w Twoim onEnable(): @Override public void onEnable() { this.getServer().getMessenger().registerOutgoingPluginChannel(this, BungeeConector.PLUGIN_CHANNEL); } 2. Teraz należy stworzyć sobie klasę BungeeConnector w Twoim projekcie. Będzie ona miała za zadanie łączyć wybranych graczy z wybranym przez ciebie serwerem. /** * Connect players between servers within the BungeeCord proxy. */ public class BungeeConnector { public static final String PLUGIN_CHANNEL = "BungeeCord"; private final Plugin plugin; public BungeeConnector(Plugin plugin) { this.plugin = plugin; } /** * Connect given <code>player</code> into the given <code>target</code> server. * @param player {@link Player} who should be connected. * @param target The target server identifier specified in the BungeeCord proxy configuration. */ public void connect(Player player, String target) { ByteArrayOutputStream array = new ByteArrayOutputStream(); DataOutputStream output = new DataOutputStream(array); try { output.writeUTF("Connect"); output.writeUTF(target); } catch (IOException ignored) { } player.sendPluginMessage(this.plugin, PLUGIN_CHANNEL, array.toByteArray()); } } 3. W głównej klasie Twojego pluginu możesz sobie zrobić instancję tej klasy. W tym celu na górze zrób sobie zmienną ją przetrzymującą. private BungeeConnector connector; 4. W onEnable() definiuj zmienną do jej prawidłowej wartości. @Override public void onEnable() { this.connector = new BungeeConnector(this); this.getServer().getMessenger().registerOutgoingPluginChannel(this, BungeeConector.PLUGIN_CHANNEL); // to już było wcześniej } 5. Teraz wystarczy już tylko zrobić sobie do niej getter. public BungeeConnector getConnector() { return this.connector; } I gotowe! Oczywiście można by to jeszcze ulepszyć, na przykład w connect(...) dodać anulowalny event. Dzięki temu można by go anulować w pewnych przypadkach. Na przykład gdy na serwerze jest anti-logout, a Ty nie chcesz żeby w czasie PvP mógł się przenosić między serwerami. Aby połączyć gracza z serwerem wystarczy użyć this.getConnector().connect(player, "survival"); Dzięki temu gracz połączy się z serwerem Survival. Zgodnie z zaleceniami konfiguracyjnymi serwery powinny zostać nazwane całkowicie małymi literami. Podana tutaj nazwa serwera odpowiada tej podanej w pliku config.yml BungeeCorda. Pozdrawiam Czerwono1 punkt -
Problem w pisowni moda (GameRegistry)
Misio12320 przyznał(a) reputację Szifter za temat
W sensie jak ten problem się objawia? Daj log czy cokolwiek.1 punkt -
właśnie, ja zrozumiałem, że chodzi o to że jak ktoś postawi skrzynie "XD" to potem jak otworzy to nie otworzy ale sie zniszczy, a tu on pisze ze skrzynek "XD" nie da sie stawiac. zdecuduj sie ...1 punkt
-
o dobrze ze ktos zauwazyl bo zapomniałem o tym usunięciu. dzięki @knugi1 punkt
-
Tylko nie usuwasz zmiennej, gość może w taki sposób mieć tysiąc tych skrzynek, stawiając w miejsce wcześniej postawioną zwykłą skrzynię lub jakikolwiek inny blok1 punkt
-
Odwiedziłem, była to krótka wizyta (zostałem wyrzucony za spam komendami, po próbie wybrania trybu). Stwierdzenie "jaki serwer, taka prezentacja" jest tutaj bardzo trafne. Serwer - porażka, postawiony na standardowych paczkach trybów, szkoda czasu na opisywanie błędów itd. Pewnie szybko padnie. W prezentacji oczywiście brakuje podstawowych informacji m. in. wersji serwera (1.8.8 najlepsza ) i zdjęć ( to jest akurat logiczne, bo nie ma czego pokazywać).1 punkt
-
To skromny choć dobrze rozbudowany serwer Jesteśmy na wersji 1.13.2 i mamy już ponad rok :00 punktów
-
i w sumie nie wiem, czy dobrze, że używasz event-block, jak mniemam to wtedy jest zapisywane {skrzyniaxd::chest} i nie będzie działać na danej skrzynce poprawnie. Lepiej, żebyś użył lokacji0 punktów
Ten Ranking jest ustawiony na Warszawa/GMT+02:00
-
Najwięcej postów w tygodniu
-
Najwięcej tematów w tygodniu
-
Aktywni użytkownicy
Nikt jeszcze nie otrzymał reputacji w tym tygodniu.
