Skocz do zawartości

Ranking

Popularna zawartość

Treść z najwyższą reputacją w 04/23/19 uwzględniając wszystkie działy

  1. 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 Czerwono
    1 punkt
  2. W sensie jak ten problem się objawia? Daj log czy cokolwiek.
    1 punkt
  3. Grex

    Skript latwy.....

    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
  4. Grex

    Skript latwy.....

    o dobrze ze ktos zauwazyl bo zapomniałem o tym usunięciu. dzięki @knugi
    1 punkt
  5. knugi

    Skript latwy.....

    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 blok
    1 punkt
  6. Szifter

    jdk 8

    Ja jakoś wpisałam puste pola lub kreskę i przeszło. Warto próbować.
    1 punkt
  7. J4ck1

    NestCraft

    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
  8. werfikkk

    Tablista

    Niewiem dlaczego mam taką tabliste jak tu w linku ----> https://www38.zippyshare.com/v/jqiMgQJm/file.html Dzięki jeśli ktoś pomoże a pluginu którego używam do tablisty to Tablist.
    0 punktów
  9. dpa123

    Normal.maxc.pl

    To skromny choć dobrze rozbudowany serwer Jesteśmy na wersji 1.13.2 i mamy już ponad rok :0
    0 punktów
  10. knugi

    Skript latwy.....

    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ł lokacji
    0 punktów
Ten Ranking jest ustawiony na Warszawa/GMT+02:00
  • Najwięcej postów w tygodniu

    Quexsu
    Quexsu
    6 postów
    Nicku
    Nicku
    1 post
    mervi_X
    mervi_X
    1 post
    Fendi
    Fendi
    1 post
    kinimod5021
    kinimod5021
    1 post
    bug128
    bug128
    1 post
  • Najwięcej tematów w tygodniu

    Quexsu
    Quexsu
    1 temat
    mervi_X
    mervi_X
    1 temat
    bug128
    bug128
    1 temat
  • Aktywni użytkownicy

    Nikt jeszcze nie otrzymał reputacji w tym tygodniu.

×
×
  • Dodaj nową pozycję...