LuizB Postado Agosto 15, 2017 Denunciar Compartilhar Postado Agosto 15, 2017 (editado) Olá, estou tentado fazer uma scoreboard usando o bungeechaneapi, porém a api está retornando os valores errado. Còdigo: ScoreManager scoreboard = new ScoreManager(e.getPlayer(), title); scoreboard.add("§r", 16); scoreboard.add(" §7Bem vindo: §a"+e.getPlayer().getName(), 15); scoreboard.add("§r§r", 14); Main.api.getPlayerCount("ALL").whenComplete((result, error)->{ scoreboard.add(" §7Jogadores:§a "+result, 13); }); scoreboard.add("§r§r§r", 12); Main.api.getPlayerCount("rankup").whenComplete((result, error)->{ scoreboard.add(" §f➜ §6RankUP §f-§e "+result, 11); }); Main: public class Main extends JavaPlugin{ public static BungeeChannelApi api; @Override public void onEnable() { api = BungeeChannelApi.of(this); } } Scoreboard: Como que no rankup tem 13 jogadores online, sendo que o total é 11 ?Eu achava que era bug da score, mas não, eu fiz um debug e realmente retorna os valores errado.Tem mais de um plugin utilizando o bungeechanelapi. Editado Agosto 15, 2017 por Cuthmf Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Agosto 15, 2017 Denunciar Compartilhar Postado Agosto 15, 2017 (editado) O bungeechannelapi retorna CompletableFutures que não é executado no "mesmo fluxo", são tipo "callbacks". O jeito que você está usando tá errado. O certo seria: (Não testei) AtomicInteger todos = new AtomicInteger(); AtomicInteger rankup = new AtomicInteger(); CompletableFuture<Integer> um = Main.api.getPlayerCount("ALL").whenComplete((result, error) -> todos.set(result)); CompletableFuture<Integer> dois = Main.api.getPlayerCount("rankup").whenComplete((result, error) -> rankup.set(result)); // Espera os dois completarem CompletableFuture.allOf(um, dois).whenComplete((result, err) -> { ScoreManager scoreboard = new ScoreManager(e.getPlayer(), title); scoreboard.add("§r", 16); scoreboard.add(" §7Bem vindo: §a" + e.getPlayer().getName(), 15); scoreboard.add("§r§r", 14); scoreboard.add(" §7Jogadores:§a " + todos.get(), 13); scoreboard.add("§r§r§r", 12); scoreboard.add(" §f➜ §6RankUP §f-§e " + rankup.get(), 11); // mostra o scoreboard aqui }); Editado Agosto 15, 2017 por leonardosc 1 Link para o comentário Compartilhar em outros sites More sharing options...
LuizB Postado Agosto 15, 2017 Autor Denunciar Compartilhar Postado Agosto 15, 2017 (editado) O bungeechannelapi retorna CompletableFutures que não é executado no "mesmo fluxo", são tipo "callbacks". O jeito que você está usando tá errado. O certo seria: (Não testei) AtomicInteger todos = new AtomicInteger(); AtomicInteger rankup = new AtomicInteger(); CompletableFuture<Integer> um = Main.api.getPlayerCount("ALL").whenComplete((result, error) -> todos.set(result)); CompletableFuture<Integer> dois = Main.api.getPlayerCount("rankup").whenComplete((result, error) -> rankup.set(result)); // Espera os dois completarem CompletableFuture.allOf(um, dois).whenComplete((result, err) -> { ScoreManager scoreboard = new ScoreManager(e.getPlayer(), title); scoreboard.add("§r", 16); scoreboard.add(" §7Bem vindo: §a" + e.getPlayer().getName(), 15); scoreboard.add("§r§r", 14); scoreboard.add(" §7Jogadores:§a " + todos.get(), 13); scoreboard.add("§r§r§r", 12); scoreboard.add(" §f➜ §6RankUP §f-§e " + rankup.get(), 11); // mostra o scoreboard aqui }); Deu quase certo, o problema é que as vezes fica pegando o valor do rankup e setando nos minigame (MINIGAME TA EM WHITELIST) Código: new BukkitRunnable() { @Override public void run() { if ( !e.getPlayer().isOnline()) { this.cancel(); return; } AtomicInteger todos = new AtomicInteger(); AtomicInteger rankup = new AtomicInteger(); AtomicInteger minigame = new AtomicInteger(); CompletableFuture<Integer> um = Main.api.getPlayerCount("ALL").whenComplete((result, error) -> todos.set(result)); CompletableFuture<Integer> dois = Main.api.getPlayerCount("rankup").whenComplete((result, error) -> rankup.set(result)); CompletableFuture<Integer> tres = Main.api.getPlayerCount("minigames").whenComplete((result, error) -> minigame.set(result)); CompletableFuture.allOf(um, dois,tres).whenComplete((result, err) -> { scoreboard.add("§r", 16); scoreboard.add(" §7Bem vindo: §a"+e.getPlayer().getName(), 15); scoreboard.add("§r§r", 14); scoreboard.add(" §7Jogadores:§a "+todos.get(), 13); scoreboard.add("§r§r§r", 12); scoreboard.add(" §f➜ §6RankUP §f-§e "+rankup.get(), 11); scoreboard.add(" §f➜ §6Minigames §f-§e "+minigame.get(), 10); scoreboard.add("§r§r§r§r", 9); Esse bug tem 50% de chance de acontecer, a cada atualização da scoreboard. Quando o player sai e entra, buga mais ainda: Editado Agosto 15, 2017 por Cuthmf Link para o comentário Compartilhar em outros sites More sharing options...
Langsdorf Postado Agosto 18, 2017 Denunciar Compartilhar Postado Agosto 18, 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
Olá, estou tentado fazer uma scoreboard usando o bungeechaneapi, porém a api está retornando os valores errado.
Còdigo:
Main:
Scoreboard:
Como que no rankup tem 13 jogadores online, sendo que o total é 11 ?
Editado por CuthmfEu achava que era bug da score, mas não, eu fiz um debug e realmente retorna os valores errado.
Tem mais de um plugin utilizando o bungeechanelapi.
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados