Killerek01 10 Opublikowano 18 marca 2017 Udostępnij Opublikowano 18 marca 2017 Witam, mam problem robię swój plugin na huba i nie wiem jak zrobić komendę która będzie wykonywana przez gracza. Chodzi mi o to że jak gracz naciśnie w gui miecz to go tepnie na serwer komędą ,server survival. Pomoże ktoś? @TheMolkaPL @Libter Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 TheMolkaPL 345 Opublikowano 18 marca 2017 Udostępnij Opublikowano 18 marca 2017 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. 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. 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 Czerwono Killerek01 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 Killerek01 10 Opublikowano 19 marca 2017 Autor Udostępnij Opublikowano 19 marca 2017 @TheMolkaPL Dzięki dużo mi pomogłeś. Temat do zamknięcia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 TheMolkaPL 345 Opublikowano 19 marca 2017 Udostępnij Opublikowano 19 marca 2017 Nie ma sprawy Towarzyszu Jak masz jakiś problem to pisz na forum, a wszystko się razem Robotniczo rozwiąże! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 Impression 139 Opublikowano 20 marca 2017 Udostępnij Opublikowano 20 marca 2017 Problem został rozwiązany. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
Killerek01 10
Witam, mam problem robię swój plugin na huba i nie wiem jak zrobić komendę która będzie wykonywana przez gracza. Chodzi mi o to że jak gracz naciśnie w gui miecz to go tepnie na serwer komędą ,server survival. Pomoże ktoś? @TheMolkaPL @Libter
Odnośnik do komentarza
Udostępnij na innych stronach
4 odpowiedzi na to pytanie
Rekomendowane odpowiedzi