Ir para conteúdo
  • 0

[Ajuda] BungeeChanelApi


LuizB

Pergunta

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:

byRhHHG.png 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 por Cuthmf
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

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 por leonardosc
Link para o comentário
Compartilhar em outros sites

 

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)

 

 

NkiFCyT.png

 

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:

 

cnkWKJC.png

Editado por Cuthmf
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...