Ir para conteúdo

[Duvida] Como atualizar esta scoreboard?


yLR111

Posts Recomendados

É só você colocar ela pra atualizar automaticamente.

Assim que faz: 

@EventHandler
	  public void onJoinScore(PlayerJoinEvent e){
	    final Player p = e.getPlayer();
	    
	    Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.plugin, new Runnable() {
	    
	      public void run()
	      {
	    	  Scoreboard(p);
	      }
	    }, 0L, 500L);
	    
	    
	}

O 500L é o tempo em que a score atualiza.

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

15 horas atrás, Kress disse:

Coloca no evento onEnable pois assim não ira causar tanto lag que nem adicionar no método PlayerJoinEvent

Fazendo o evento no onEnable, como faço para puxar o player? fica assim: image.png.633a27f9f068eabc9b28333c99e6dece.png

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, Kress disse:

não vai funfar no onEnable não há como pegar o player,o unico jeito mesmo é colocando no onJoin

 

Exatamente... disse que era melhor por no onEnable para ficar menos lag... porém não tem como....

Link para o comentário
Compartilhar em outros sites

50 minutos atrás, Kress disse:

Dependendo do método que você fizer a score, você pode coloca-la no onEnable

Botar para atualizar a scoreboard no evento de entrar gera muito lag, não consigo nem usar o kangaroo de tanto lag

Link para o comentário
Compartilhar em outros sites

Cria uma classe chamada SimpleScoreboard e coloca este código la

package Apis;

import java.util.AbstractMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;

import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

public class SimpleScoreboard {

	private Scoreboard scoreboard;

	private String title;
	private Map<String, Integer> scores;
	private List<Team> teams;

	public SimpleScoreboard(String title) {
		this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
		this.title = title;
		this.scores = Maps.newLinkedHashMap();
		this.teams = Lists.newArrayList();
	}

	public void blankLine() {
		add(" ");
	}

	public void add(String text) {
		add(text, null);
	}

	public void add(String text, Integer score) {
		Preconditions.checkArgument(text.length() < 48, "text cannot be over 48 characters in length");
		text = fixDuplicates(text);
		scores.put(text, score);
	}

	private String fixDuplicates(String text) {
		while (scores.containsKey(text))
			text += "§r";
		if (text.length() > 48)
			text = text.substring(0, 47);
		return text;
	}

	private Map.Entry<Team, String> createTeam(String text) {
		String result = "";
		if (text.length() <= 16)
			return new AbstractMap.SimpleEntry<>(null, text);
		Team team = scoreboard.registerNewTeam("text-" + scoreboard.getTeams().size());
		Iterator<String> iterator = Splitter.fixedLength(16).split(text).iterator();
		team.setPrefix(iterator.next());
		result = iterator.next();
		if (text.length() > 32)
			team.setSuffix(iterator.next());
		teams.add(team);
		return new AbstractMap.SimpleEntry<>(team, result);
	}

	@SuppressWarnings("deprecation")
	public void build() {
		Objective obj = scoreboard.registerNewObjective((title.length() > 16 ? title.substring(0, 15) : title), "dummy");
		obj.setDisplayName(title);
		obj.setDisplaySlot(DisplaySlot.SIDEBAR);

		int index = scores.size();

		for (Map.Entry<String, Integer> text : scores.entrySet()) {
			Map.Entry<Team, String> team = createTeam(text.getKey());
			Integer score = text.getValue() != null ? text.getValue() : index;
			OfflinePlayer player = Bukkit.getOfflinePlayer(team.getValue());
			if (team.getKey() != null)
				team.getKey().addPlayer(player);
			obj.getScore(player).setScore(score);
			index -= 1;
		}
	}

	public void reset() {
		title = null;
		scores.clear();
		for (Team t : teams)
			t.unregister();
		teams.clear();
	}

	public Scoreboard getScoreboard() {
		return scoreboard;
	}

	public void send(Player... players) {
		for (Player p : players)
			p.setScoreboard(scoreboard);
	}

}

e depois cria uma classe chamada Score

package Apis;

import org.bukkit.Bukkit;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;

import Principal.Main;


public class Score {
	
	
	public static Scoreboard getScoreBoard() {
		ScoreboardManager manager = Bukkit.getScoreboardManager();
		Scoreboard board = manager.getNewScoreboard();
		return board;
	}
	public static void setScoreBoard(Player p) {
		SimpleScoreboard board = new SimpleScoreboard("§6Titulo da score");
	
		board.add("§f");
		board.add("§eEstatisticas");
		board.add("§fKills:§7 " +  p.getStatistic(Statistic.PLAYER_KILLS));
		board.add("§fDeaths:§7 " +  p.getStatistic(Statistic.DEATHS));
		board.add("§fDinheiro: §7" + ConvertMoney.convertInt(Main.pl.getConfig().getInt(p.getName())));
		board.add("§f");
		board.add("§fKit: §7Nenhum");
		board.add("§fRank: §7" + Rank(p));
		board.add("§8/score");
		
		
		
			board.build();
			board.send(p);
			
	}

	public static String Rank(Player p) {
		double a =   +  p.getStatistic(Statistic.PLAYER_KILLS);
	    if (a <= 0.0D) {
	      return "Silver I";
	    }
	    if (a <= 50.0D) {
	      return "Silver II";
	    }
	    if (a <= 100.0D) {
	      return "Silver III";
	    }
	    if (a <= 150.0D) {
	      return "Gold";
	    }
	    if (a <= 200.0D) {
	      return "Gold I";
	    }
	    if (a <= 250.0D) {
	      return "Gold II";
	    }
	    if (a <= 300.0D) {
	      return "Gold III";
	    }
	    if (a <= 450.0D) {
		      return "Diamond I";
		    }
		    if (a <= 500.0D) {
		      return "Diamond II";
		    }
		    if (a <= 550.0D) {
		      return "Diamond III";
		    }
		    if (a <= 600.0D) {
		      return "Esmerald I";
		    }
		    if (a <= 650.0D) {
		      return "Esmerald II";
		    }
		    if (a <= 700.0D) {
		      return "Esmerald III";
		    }
		    if (a <= 750.0D) {
		      return "Esmerald IIII";
		    }
		    if (a <= 800.0D) {
			      return "Ruby I";
			    }
		    if (a <= 850.0D) {
			      return "Legendary Eagle I";
			    }
			    if (a <= 900.0D) {
			      return "Legendary Eagle II";
			    }
			    if (a <= 950.0D) {
			      return "Legendary Eagle III";
			    }
			    if (a <= 1000.0D) {
			      return "Legendary Eagle IIII";
			    }
			    if (a <= 1050.0D) {
			      return "Lion";
			    }
			    if (a <= 1100.0D) {
			      return "Supreme I";
			    }
			    if (a <= 1150.0D) {
			      return "Supreme II";
			    }
			    if (a <= 1200.0D) {
				      return "Supreme III";
				    }
			    if (a <= 1250.0D) {
				      return "Supreme IIII";
				    }
				    if (a <= 1300.0D) {
				      return "The Global Elite";
				    }
	    return "The Global Elite";
	}
	public static void clearScoreboard(Player p) {
		getScoreBoard().clearSlot(DisplaySlot.SIDEBAR);
		p.setScoreboard(getScoreBoard());
	}

}

e depois na main crie uma arraylist 

public static ArrayList<String> score = new ArrayList<>();

e depois coloque isto no onEnable

new BukkitRunnable() {
			@Override
			public void run() {
				for(Player p:Bukkit.getOnlinePlayers()) {
					if(!score.contains(p.getName())) {
						Score.setScoreBoard(p);
					}
					else {
						Score.clearScoreboard(p);
					}
				}
			}
		}.runTaskTimer(this, 0, 20);

 

Link para o comentário
Compartilhar em outros sites

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