LuizB Postado Fevereiro 13, 2017 Denunciar Compartilhar Postado Fevereiro 13, 2017 (editado) Bem, toda vez que eu tenho pegar o número de jogadores de todos os servidores, do bungeecord da java.io.EOFExceptionStacktrace completo: java.io.EOFException [15:59:32] [Server thread/WARN]: at java.io.DataInputStream.readUnsignedShort(Unknown Source) [15:59:32] [Server thread/WARN]: at java.io.DataInputStream.readUTF(Unknown Source) [15:59:32] [Server thread/WARN]: at java.io.DataInputStream.readUTF(Unknown Source) [15:59:32] [Server thread/WARN]: at me.cuthmf.lobbyl.Lobby.onPluginMessageReceived(Lobby.java:43) [15:59:32] [Server thread/WARN]: at org.bukkit.plugin.messaging.StandardMessenger.dispatchIncomingMessage(StandardMessenger.java:427) [15:59:32] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:2114) [15:59:32] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.PacketPlayInCustomPayload.a(SourceFile:55) [15:59:32] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.PacketPlayInCustomPayload.a(SourceFile:8) [15:59:32] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [15:59:32] [Server thread/WARN]: at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [15:59:32] [Server thread/WARN]: at java.util.concurrent.FutureTask.run(Unknown Source) [15:59:32] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [15:59:32] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [15:59:32] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [15:59:32] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [15:59:32] [Server thread/WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [15:59:32] [Server thread/WARN]: at java.lang.Thread.run(Unknown Source) Isso só acontece quando eu uso thread ou RunnableSe eu colocar por comando, funciona normal.Código: private static Map<String, Integer> players = new HashMap<>(); @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { if (!channel.equals("BungeeCord")) return; try { DataInputStream in = new DataInputStream(new ByteArrayInputStream(message)); String command = in.readUTF(); if (command.equals("PlayerCount")) { String server = in.readUTF().toString(); int playerCount = in.readInt(); players.clear(); players.put(server, playerCount); } } catch (Exception e) { e.printStackTrace(); } } public static String getNumberofplays(String server) { try { ByteArrayOutputStream b = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(b); out.writeUTF("PlayerCount"); out.writeUTF(server); Bukkit.getServer().sendPluginMessage(Lobby.getPlugin(Lobby.class), "BungeeCord", b.toByteArray()); return Integer.toString(players.get(server)); } catch (Exception e) { return "0"; } } Editado Fevereiro 13, 2017 por Cuthmf Link para o comentário Compartilhar em outros sites More sharing options...
??? Postado Fevereiro 20, 2017 Denunciar Compartilhar Postado Fevereiro 20, 2017 Bom, eu nunca mexi com bungee, então... fui só pela lógica. Onde tava o erro do código dele? Ordem, ele tava pegando uma coisa que ainda não tinha acontecido, bungeecord é assim mesmo, as mensagens do bungeecord somente são enviadas quando um player entra/sai(se não me falha a memória), ai ele tava limpando a Map e colocando ao receber a mensagem, só que GET dele, ele já tava tentando retornar sem ao menos o servidor ter recebido a mensagem, apenas enviado, por este motivo o messaging do bungeecord tem a função de enviar por player e por servidor, por player ele retorna pra tu continuar a tua função a partir daquele player especifico, e o servidor é o servidor kk 1 Link para o comentário Compartilhar em outros sites More sharing options...
Lightwood Postado Fevereiro 13, 2017 Denunciar Compartilhar Postado Fevereiro 13, 2017 public static String getNumberofplays(String server) Esse servidor aqui String server tá online? Link para o comentário Compartilhar em outros sites More sharing options...
LuizB Postado Fevereiro 13, 2017 Autor Denunciar Compartilhar Postado Fevereiro 13, 2017 (editado) public static String getNumberofplays(String server) Esse servidor aqui String server tá online? Ta, e o servidor é ALL, que é só o lobby, quando eu uso o comando ele retorna o número, já em uma thread ou runnable da esse erro. @EDIT È só o ALL, que é pra pegar todos os jogadores conectado. Editado Fevereiro 13, 2017 por Cuthmf Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Fevereiro 13, 2017 Denunciar Compartilhar Postado Fevereiro 13, 2017 Ta dando erro pq n tem mais coisa pra ler... Tu ta escrevendo isso out.writeUTF("PlayerCount");out.writeUTF(server); mas ta lendo isso String command = in.readUTF(); String server = in.readUTF().toString();int playerCount = in.readInt(); // ????? esqueceu de escrever isso? Link para o comentário Compartilhar em outros sites More sharing options...
LuizB Postado Fevereiro 13, 2017 Autor Denunciar Compartilhar Postado Fevereiro 13, 2017 (editado) Ta dando erro pq n tem mais coisa pra ler... Tu ta escrevendo isso out.writeUTF("PlayerCount"); out.writeUTF(server); mas ta lendo isso String command = in.readUTF(); String server = in.readUTF().toString(); int playerCount = in.readInt(); // ????? esqueceu de escrever isso? Entendi nada '-' @EDIT Sò a parte que n tem mais coisa pra ler Editado Fevereiro 13, 2017 por Cuthmf Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Fevereiro 13, 2017 Denunciar Compartilhar Postado Fevereiro 13, 2017 Entendi nada '-' @EDIT Sò a parte que n tem mais coisa pra ler Tu ta escrevendo 2 coisas no buffer e ta lendo 3..... Esse teu código n faz sentido, oq tu ta tentando fazer? Link para o comentário Compartilhar em outros sites More sharing options...
LuizB Postado Fevereiro 13, 2017 Autor Denunciar Compartilhar Postado Fevereiro 13, 2017 Tu ta escrevendo 2 coisas no buffer e ta lendo 3..... Esse teu código n faz sentido, oq tu ta tentando fazer? ainda n entendi, estou querendo pegar todos os jogadores de todos os servidor do bungeecord Link para o comentário Compartilhar em outros sites More sharing options...
??? Postado Fevereiro 20, 2017 Denunciar Compartilhar Postado Fevereiro 20, 2017 (editado) Tu ta escrevendo 2 coisas no buffer e ta lendo 3..... Esse teu código n faz sentido, oq tu ta tentando fazer? Técnicamente o código dele ta certo, o primeiro que escreve no buffer é o bungeecord, que no caso é o subChannel, no caso seria o primeiro argumento que o cara escreveu, PlayerCount, o bungee já escreve o segundo argumento, o nome do servidor, que o dev já escreveu no segundo argumento, e o bungeecord retorna o valor que o dev pediu no terceiro argumento, logo o dev não precisa escrever o terceiro argumento, pois é a response do que o dev solicitou, o bungeecord respondeu @Topic @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { if (!channel.equals("BungeeCord")) return; try { DataInputStream in = new DataInputStream(new ByteArrayInputStream(message)); String sub = in.readUTF(); if (sub.equals("PlayerCount")) { String server = in.readUTF(); int pCount = in.readInt(); player.sendMessage(String.format("Players online %s", pCount)); } } catch (Exception e) { e.printStackTrace(); } } private static void getPlayersCount(String server, Player p) { try { ByteArrayOutputStream b = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(b); out.writeUTF("PlayerCount"); out.writeUTF(server); p.sendPluginMessage(Lobby.getPlugin(Lobby.class), "BungeeCord", b.toByteArray()); } catch (Exception e) { e.printStackTrace(); } } @Override public boolean execute(CommandSender sender, String label, String[] args){ getPlayersCount("ALL", ((Player)sender)); return true; } Editado Fevereiro 20, 2017 por MikeSantos Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Fevereiro 20, 2017 Denunciar Compartilhar Postado Fevereiro 20, 2017 Técnicamente o código dele ta certo, o primeiro que escreve no buffer é o bungeecord, que no caso é o subChannel, no caso seria o primeiro argumento que o cara escreveu, PlayerCount, o bungee já escreve o segundo argumento, o nome do servidor, que o dev já escreveu no segundo argumento, e o bungeecord retorna o valor que o dev pediu no terceiro argumento, logo o dev não precisa escrever o terceiro argumento, pois é a response do que o dev solicitou, o bungeecord respondeu @Topic @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { if (!channel.equals("BungeeCord")) return; try { DataInputStream in = new DataInputStream(new ByteArrayInputStream(message)); String sub = in.readUTF(); if (sub.equals("PlayerCount")) { String server = in.readUTF(); int pCount = in.readInt(); player.sendMessage(String.format("Players online %s", pCount)); } } catch (Exception e) { e.printStackTrace(); } } private static void getPlayersCount(String server, Player p) { try { ByteArrayOutputStream b = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(b); out.writeUTF("PlayerCount"); out.writeUTF(server); p.sendPluginMessage(Lobby.getPlugin(Lobby.class), "BungeeCord", b.toByteArray()); } catch (Exception e) { e.printStackTrace(); } } @Override public boolean execute(CommandSender sender, String label, String[] args){ getPlayersCount("ALL", ((Player)sender)); return true; } Bom, eu nunca mexi com bungee, então... fui só pela lógica. Onde tava o erro do código dele? Link para o comentário Compartilhar em outros sites More sharing options...
LuizB Postado Fevereiro 20, 2017 Autor Denunciar Compartilhar Postado Fevereiro 20, 2017 Ordem, ele tava pegando uma coisa que ainda não tinha acontecido, bungeecord é assim mesmo, as mensagens do bungeecord somente são enviadas quando um player entra/sai(se não me falha a memória), ai ele tava limpando a Map e colocando ao receber a mensagem, só que GET dele, ele já tava tentando retornar sem ao menos o servidor ter recebido a mensagem, apenas enviado, por este motivo o messaging do bungeecord tem a função de enviar por player e por servidor, por player ele retorna pra tu continuar a tua função a partir daquele player especifico, e o servidor é o servidor kk Vlw, consegui resolver com sua resposta. Link para o comentário Compartilhar em outros sites More sharing options...
žφµร†ล√™ Postado Fevereiro 20, 2017 Denunciar Compartilhar Postado Fevereiro 20, 2017 Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas. Atenciosamente, Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
LuizB
Bem, toda vez que eu tenho pegar o número de jogadores de todos os servidores, do bungeecord da java.io.EOFException
Stacktrace completo:
Isso só acontece quando eu uso thread ou Runnable
Se eu colocar por comando, funciona normal.
Código:
Editado por CuthmfLink para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados