Ir para conteúdo
  • 0

O que posso fazer para deslagar? (ScoreBoard)


Solitario

Pergunta

Bom ... o scoreboard creio que seja o que mais provoque o lagg pelos metodos que já usei e tudo o que aconteceu sempre foi o scoreboard...

 

Queria saber como optimizar ao atualizar os dados do scoreboard (Kills,Deaths, etc...)

 

Code atual: (Esta no onEnable())

        new BukkitRunnable() {

			@SuppressWarnings("deprecation")
			@Override
			public void run() {
				if(Bukkit.getOnlinePlayers().length == 0){
					return;
				}
				for(Player p : Bukkit.getOnlinePlayers()){
        		if (Score.ntemscore.contains(p.getName())) {
        			if (p.getScoreboard() != null && p.getScoreboard().getObjective("scoreboardutils") != null) {
        				final String cash = Main.instance.obterinfo.cash(p);
        				final Team a2 = p.getScoreboard().getTeam("a2");
                        final Team a3 = p.getScoreboard().getTeam("a3");
                        final Team a4 = p.getScoreboard().getTeam("a4");
                        final Team a6 = p.getScoreboard().getTeam("a6");
                        final Team a7 = p.getScoreboard().getTeam("a7");
                        final Team a9 = p.getScoreboard().getTeam("a9");
                        final Team a10 = p.getScoreboard().getTeam("a10");
                        final Team a11 = p.getScoreboard().getTeam("a11");
                        a11.setSuffix(KillsDeathsRankXp.getRank(p));
                        a10.setSuffix(Integer.valueOf(KillsDeathsRankXp.getXp(p)).toString());
                        a9.setSuffix(Integer.valueOf(KillsDeathsRankXp.getCaixa(p)).toString());
                        a7.setSuffix(API.getKit(p));
                        a6.setSuffix(CombatLog.statuscombat(p));
                        
                        a4.setSuffix(Integer.valueOf(KillsDeathsRankXp.getKills(p)).toString());
                        a3.setSuffix(Integer.valueOf(KillsDeathsRankXp.getDeaths(p)).toString());
                        a2.setSuffix(cash);
                        
                    }     
                }
                if (Score.temscore.contains(p.getName())) {
                    p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
                }
			}
			}
        	
        }.runTaskTimer(Main.getPlugin(), 60l, 20l);

Antes eu usava no playerjoinevent ou seja para cada player ele gerava 1 atualizador ...

Gostaria de saber o melhor metodo para evitar o lagg e atualizar todos os scoreboard

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

Bom ... o scoreboard creio que seja o que mais provoque o lagg pelos metodos que já usei e tudo o que aconteceu sempre foi o scoreboard...

 

Queria saber como optimizar ao atualizar os dados do scoreboard (Kills,Deaths, etc...)

 

Code atual: (Esta no onEnable())

        new BukkitRunnable() {

			@SuppressWarnings("deprecation")
			@Override
			public void run() {
				if(Bukkit.getOnlinePlayers().length == 0){
					return;
				}
				for(Player p : Bukkit.getOnlinePlayers()){
        		if (Score.ntemscore.contains(p.getName())) {
        			if (p.getScoreboard() != null && p.getScoreboard().getObjective("scoreboardutils") != null) {
        				final String cash = Main.instance.obterinfo.cash(p);
        				final Team a2 = p.getScoreboard().getTeam("a2");
                        final Team a3 = p.getScoreboard().getTeam("a3");
                        final Team a4 = p.getScoreboard().getTeam("a4");
                        final Team a6 = p.getScoreboard().getTeam("a6");
                        final Team a7 = p.getScoreboard().getTeam("a7");
                        final Team a9 = p.getScoreboard().getTeam("a9");
                        final Team a10 = p.getScoreboard().getTeam("a10");
                        final Team a11 = p.getScoreboard().getTeam("a11");
                        a11.setSuffix(KillsDeathsRankXp.getRank(p));
                        a10.setSuffix(Integer.valueOf(KillsDeathsRankXp.getXp(p)).toString());
                        a9.setSuffix(Integer.valueOf(KillsDeathsRankXp.getCaixa(p)).toString());
                        a7.setSuffix(API.getKit(p));
                        a6.setSuffix(CombatLog.statuscombat(p));
                        
                        a4.setSuffix(Integer.valueOf(KillsDeathsRankXp.getKills(p)).toString());
                        a3.setSuffix(Integer.valueOf(KillsDeathsRankXp.getDeaths(p)).toString());
                        a2.setSuffix(cash);
                        
                    }     
                }
                if (Score.temscore.contains(p.getName())) {
                    p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
                }
			}
			}
        	
        }.runTaskTimer(Main.getPlugin(), 60l, 20l);

Antes eu usava no playerjoinevent ou seja para cada player ele gerava 1 atualizador ...

Gostaria de saber o melhor metodo para evitar o lagg e atualizar todos os scoreboard

https://hastebin.com/otezinaguc.java

 

Aviso : Onde está valor é onde tem de ficar as variáveis de retorno de valores 

Exemplo :Jogador.getKills(p) ---> E ele devolve as kills

 

deaths.setPrefix("§f" + valor);

kills.setPrefix("§f" + valor);

coins.setPrefix("§f" + valor);

exp.setPrefix("§f" + valor);

level.setPrefix("§f" + valor);

 

 

Depois no evento de entrada chama o método da scoreboard

ScoreboardHud.getHud().buildScoreboard(p);

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

https://hastebin.com/otezinaguc.java

 

Aviso : Onde está valor é onde tem de ficar as variáveis de retorno de valores 

Exemplo :Jogador.getKills(p) ---> E ele devolve as kills

 

deaths.setPrefix("§f" + valor);

kills.setPrefix("§f" + valor);

coins.setPrefix("§f" + valor);

exp.setPrefix("§f" + valor);

level.setPrefix("§f" + valor);

 

 

Depois no evento de entrada chama o método da scoreboard

ScoreboardHud.getHud().buildScoreboard(p);

Então para cada player um bukkit runnable ? (Literalmente o que eu fiz de começo)

Link para o comentário
Compartilhar em outros sites

Experimenta esse e vê se dá lag :|

 

E vê as diferenças 

tipo ... ambos dão lagg ... porém pelo que tou vendo quando tem o ultimo code que usei (O que postei) ele termina dando 1 travada a cada atualizada e o bukkit runnable a cada player é umas lagadas em diferentes tempos

Link para o comentário
Compartilhar em outros sites

tipo ... ambos dão lagg ... porém pelo que tou vendo quando tem o ultimo code que usei (O que postei) ele termina dando 1 travada a cada atualizada e o bukkit runnable a cada player é umas lagadas em diferentes tempos

Eu utilizo assim e nao tenho lag :| 

Link para o comentário
Compartilhar em outros sites

Então para cada player um bukkit runnable ? (Literalmente o que eu fiz de começo)

Rodar uma Sync para atualizar ScoreBoard de cada jogador não é uma boa.

 

Ou utilize os eventos para atualizar, ou rode uma Sync a cada tempo, pra atualizar de todos os jogadores de uma vez.

 

Invés de:

 

if (Score.temscore.contains(p.getName())) {

p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);

}

 

Utilize:

if(score.getObjective(DisplaySlot.SIDEBAR) != null) p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);

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

Rodar uma Sync para atualizar ScoreBoard de cada jogador não é uma boa.

 

Ou utilize os eventos para atualizar, ou rode uma Sync a cada tempo, pra atualizar de todos os jogadores de uma vez.

 

Invés de:

 

if (Score.temscore.contains(p.getName())) {

p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);

}

 

Utilize:

if(score.getObjective(DisplaySlot.SIDEBAR) != null) p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);

Tentei tipo ...

        getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
                    atualizarscores();
            }
        }, 0, 20*5);
    }
        
    public void atualizarscores(){
    	new Thread(){
			public void run() {
				if(Bukkit.getOnlinePlayers().length == 0){
					return;
				}
				for(Player p : Bukkit.getOnlinePlayers()){
        		if (Score.ntemscore.contains(p.getName())) {
        			if (p.getScoreboard() != null && p.getScoreboard().getObjective("scoreboardutils") != null) {
        				final String cash = Main.instance.obterinfo.cash(p);
        				final Team a2 = p.getScoreboard().getTeam("a2");
                        final Team a3 = p.getScoreboard().getTeam("a3");
                        final Team a4 = p.getScoreboard().getTeam("a4");
                        final Team a6 = p.getScoreboard().getTeam("a6");
                        final Team a7 = p.getScoreboard().getTeam("a7");
                        final Team a9 = p.getScoreboard().getTeam("a9");
                        final Team a10 = p.getScoreboard().getTeam("a10");
                        final Team a11 = p.getScoreboard().getTeam("a11");
                        a11.setSuffix(KillsDeathsRankXp.getRank(p));
                        a10.setSuffix(Integer.valueOf(KillsDeathsRankXp.getXp(p)).toString());
                        a9.setSuffix(Integer.valueOf(KillsDeathsRankXp.getCaixa(p)).toString());
                        a7.setSuffix(API.getKit(p));
                        a6.setSuffix(CombatLog.statuscombat(p));
                        
                        a4.setSuffix(Integer.valueOf(KillsDeathsRankXp.getKills(p)).toString());
                        a3.setSuffix(Integer.valueOf(KillsDeathsRankXp.getDeaths(p)).toString());
                        a2.setSuffix(cash);
                        
                    }     
                }
			}
			}
    	}.start();

Só que ainda dava umas travadas (Creio que era quando atualizava)

 

Eu utilizo assim e nao tenho lag :|

30+ players '-' (Bem que no lobby uso assim e não da lagg porém no sv diferente deu '-')

Link para o comentário
Compartilhar em outros sites

https://hastebin.com/otezinaguc.java

 

Aviso : Onde está valor é onde tem de ficar as variáveis de retorno de valores 

Exemplo :Jogador.getKills(p) ---> E ele devolve as kills

 

deaths.setPrefix("§f" + valor);

kills.setPrefix("§f" + valor);

coins.setPrefix("§f" + valor);

exp.setPrefix("§f" + valor);

level.setPrefix("§f" + valor);

 

 

Depois no evento de entrada chama o método da scoreboard

ScoreboardHud.getHud().buildScoreboard(p);

bom ... usei sem o thread deslagou + '-' (Acho que o jeito que eu tava usando tava meio ruim kk)

Link para o comentário
Compartilhar em outros sites

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