MocSwiatla320 1 Opublikowano 16 lipca 2020 Udostępnij Opublikowano 16 lipca 2020 (edytowane) Witam może ktoś wytłumaczyć lub podesłać poradnik jak pobrać gracza range z obiektu User? Mianowicie mam plugin na bungee, jest tam obiekt User który przechowuje String rank. I teraz pytanie jak mogę za pomocą kanałów pobrać gracza range na serwerze spigot. Chodzi mi o takie coś jak to: out.writeUTF("PlayerCount"); out.writeUTF("pvp"); Tylko właśnie nie wiem jak za to się zabrać. Z góry dziękuję daje + Edytowane 20 lipca 2020 przez TakiJakTy Poprawiam literówkę w tytule. Notatka dodana przez TakiJakTy Odnośnik do komentarza https://skript.pl/temat/40537-pobieranie-danych-z-bungee-na-spigota/ Udostępnij na innych stronach Więcej opcji udostępniania...
0 kerpson 551 Opublikowano 16 lipca 2020 Udostępnij Opublikowano 16 lipca 2020 Prościej będzie pobrać przez bazę danych ale ewentualnie możesz zrobić własny channel, ale to troche trudniejsza sprawa https://www.spigotmc.org/wiki/sending-a-custom-plugin-message-from-bungeecord/ MocSwiatla320 1 Odnośnik do komentarza https://skript.pl/temat/40537-pobieranie-danych-z-bungee-na-spigota/#findComment-252967 Udostępnij na innych stronach Więcej opcji udostępniania...
0 patryk96 14 Opublikowano 17 lipca 2020 Udostępnij Opublikowano 17 lipca 2020 W dniu 16.07.2020 o 20:16, kerpson napisał: Prościej będzie pobrać przez bazę danych ale ewentualnie możesz zrobić własny channel, ale to troche trudniejsza sprawa https://www.spigotmc.org/wiki/sending-a-custom-plugin-message-from-bungeecord/ @kerpson Widziałem już jak ludzie robią pluginy którę wysyłają/odbierają dane do serwerów przez mysql, większość z nich laguje serwer bo otwierają/zamykają połączenie co chwila. Lepszą opcją tak jak napisałeś będą kanały, wysyłamy treść a ona natychmiastowo jest odbierana następnie ją cachujemy. Już tłumaczę jak to dokładnie zrobić. Plugin bungee: 1. Rejestrujesz kanał np.: "namespace:getinfo" 2. Tworzysz event (PluginMessageEvent) a w nim - Sprawdzasz czy event.geTag to twój kanał. - Następnie pobierasz akcje i wiadomości, możesz to zrobić w ten sposób: String action = null; ArrayList<String> received = new ArrayList<>(); DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(event.getData())); try { action = dataInputStream.readUTF(); while (dataInputStream.available() > 0){ received.add(dataInputStream.readUTF()); } }catch (Exception exeption){ exeption.printStackTrace(); } - Sprawdzasz czy akcja to getRank z received[0] pobierasz nazwe serwera z received[1] pobierasz nick gracza Następnie wysyłasz wiadomość do serwera bukkit ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream); try { dataOutputStream.writeUTF("get"); dataOutputStream.writeUTF(received.get(1)); //Tutaj już mysle ze wiadomo o co chodzi pobierasz usera z nicku a nastepnie pobierasz jego range dataOutputStream.writeUTF(UserManager(received.get(1)).getRank()); //Tutaj wyslyasz wiadomosc od serwera z received[0] getProxy().getServerInfo(received.get(0)).sendData("namespace:getinfo", byteArrayOutputStream.toByteArray()); } catch (IOException e) { e.printStackTrace(); } 3. Rejestrujesz listenery Bukkit 1. Rejestrujesz kanały. getServer().getMessenger().registerOutgoingPluginChannel( this, "namespace:getinfo"); getServer().getMessenger().registerIncomingPluginChannel( this, "namespace:getinfo", this); 2. Tworzysz mape w której bedziesz przechowywał 2 ciągi: Nick oraz range gracza 3. Implementujesz klase do PluginMessageListener. 4. Następnie uzupełniasz onPluginMessageReceived @Override public void onPluginMessageReceived(String s, Player player, byte[] bytes) { if(s.equalsIgnoreCase("namespace:getinfo")){ String action = null; ArrayList<String> received = new ArrayList<>(); DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(bytes)); try { action = dataInputStream.readUTF(); while (dataInputStream.available() > 0){ received.add(dataInputStream.readUTF()); } }catch (Exception exeption){ exeption.printStackTrace(); } if(action.equalsIgnoreCase("get")){ String playername = received.get(0); String rank = received.get(1); map.put(playername, rank); } } } Następnie możesz zrobić taska który aktualzuję mape: ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("getRank"); out.writeUTF("main"); //TUTAJ DAJESZ NAZWE SWOJEGO SERWERA out.writeUTF(player.getName()); player.sendPluginMessage(this, "namespace:getinfo", out.toByteArray()); Jest to chyba najlepsza i najbardziej optymalna opcja! MocSwiatla320 1 Odnośnik do komentarza https://skript.pl/temat/40537-pobieranie-danych-z-bungee-na-spigota/#findComment-253064 Udostępnij na innych stronach Więcej opcji udostępniania...
0 kerpson 551 Opublikowano 17 lipca 2020 Udostępnij Opublikowano 17 lipca 2020 31 minut temu, patryk96 napisał: @kerpson Widziałem już jak ludzie robią pluginy którę wysyłają/odbierają dane do serwerów przez mysql, większość z nich laguje serwer bo otwierają/zamykają połączenie co chwila. Lepszą opcją tak jak napisałeś będą kanały, wysyłamy treść a ona natychmiastowo jest odbierana następnie ją cachujemy. Już tłumaczę jak to dokładnie zrobić. Plugin bungee: 1. Rejestrujesz kanał np.: "namespace:getinfo" 2. Tworzysz event (PluginMessageEvent) a w nim - Sprawdzasz czy event.geTag to twój kanał. - Następnie pobierasz akcje i wiadomości, możesz to zrobić w ten sposób: String action = null; ArrayList<String> received = new ArrayList<>(); DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(event.getData())); try { action = dataInputStream.readUTF(); while (dataInputStream.available() > 0){ received.add(dataInputStream.readUTF()); } }catch (Exception exeption){ exeption.printStackTrace(); } - Sprawdzasz czy akcja to getRank z received[0] pobierasz nazwe serwera z received[1] pobierasz nick gracza Następnie wysyłasz wiadomość do serwera bukkit ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream); try { dataOutputStream.writeUTF("get"); dataOutputStream.writeUTF(received.get(1)); //Tutaj już mysle ze wiadomo o co chodzi pobierasz usera z nicku a nastepnie pobierasz jego range dataOutputStream.writeUTF(UserManager(received.get(1)).getRank()); //Tutaj wyslyasz wiadomosc od serwera z received[0] getProxy().getServerInfo(received.get(0)).sendData("namespace:getinfo", byteArrayOutputStream.toByteArray()); } catch (IOException e) { e.printStackTrace(); } 3. Rejestrujesz listenery Bukkit 1. Rejestrujesz kanały. getServer().getMessenger().registerOutgoingPluginChannel( this, "namespace:getinfo"); getServer().getMessenger().registerIncomingPluginChannel( this, "namespace:getinfo", this); 2. Tworzysz mape w której bedziesz przechowywał 2 ciągi: Nick oraz range gracza 3. Implementujesz klase do PluginMessageListener. 4. Następnie uzupełniasz onPluginMessageReceived @Override public void onPluginMessageReceived(String s, Player player, byte[] bytes) { if(s.equalsIgnoreCase("namespace:getinfo")){ String action = null; ArrayList<String> received = new ArrayList<>(); DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(bytes)); try { action = dataInputStream.readUTF(); while (dataInputStream.available() > 0){ received.add(dataInputStream.readUTF()); } }catch (Exception exeption){ exeption.printStackTrace(); } if(action.equalsIgnoreCase("get")){ String playername = received.get(0); String rank = received.get(1); map.put(playername, rank); } } } Następnie możesz zrobić taska który aktualzuję mape: ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("getRank"); out.writeUTF("main"); //TUTAJ DAJESZ NAZWE SWOJEGO SERWERA out.writeUTF(player.getName()); player.sendPluginMessage(this, "namespace:getinfo", out.toByteArray()); Jest to chyba najlepsza i najbardziej optymalna opcja! można cały czas mieć otwarte połączenie ale te channele to też dobra opcja nawet Odnośnik do komentarza https://skript.pl/temat/40537-pobieranie-danych-z-bungee-na-spigota/#findComment-253065 Udostępnij na innych stronach Więcej opcji udostępniania...
0 MocSwiatla320 1 Opublikowano 18 lipca 2020 Autor Udostępnij Opublikowano 18 lipca 2020 Dobra udało mi się zrobić te kanały! Do zamknięcia Następnym razem zgłoś temat. Notatka dodana przez TakiJakTy Odnośnik do komentarza https://skript.pl/temat/40537-pobieranie-danych-z-bungee-na-spigota/#findComment-253122 Udostępnij na innych stronach Więcej opcji udostępniania...
0 TakiJakTy 140 Opublikowano 20 lipca 2020 Udostępnij Opublikowano 20 lipca 2020 Problem został rozwiązany. Odnośnik do komentarza https://skript.pl/temat/40537-pobieranie-danych-z-bungee-na-spigota/#findComment-253246 Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
MocSwiatla320 1
Witam może ktoś wytłumaczyć lub podesłać poradnik jak pobrać gracza range z obiektu User?
Mianowicie mam plugin na bungee, jest tam obiekt User który przechowuje String rank.
I teraz pytanie jak mogę za pomocą kanałów pobrać gracza range na serwerze spigot.
Chodzi mi o takie coś jak to:
Tylko właśnie nie wiem jak za to się zabrać.
Z góry dziękuję daje +
Edytowane przez TakiJakTyPoprawiam literówkę w tytule.
Notatka dodana przez TakiJakTy
Odnośnik do komentarza
https://skript.pl/temat/40537-pobieranie-danych-z-bungee-na-spigota/Udostępnij na innych stronach
5 odpowiedzi na to pytanie
Rekomendowane odpowiedzi