- Баллы
- 103
- Имя в Minecraft
- Nick
В общем с тяжкими усилиями разобрался как это все работает и нацарапал вот такой вот код, который вроде бы работает, но имеет свои проблемы.
1. Моргание ника в табе и скорборда (сильное моргание)
2. Подозрение на утечку памяти
За советы буду очень благодарен!
1. Моргание ника в табе и скорборда (сильное моргание)
2. Подозрение на утечку памяти
Java:
[USER=79777]@Override[/USER]
public void onEnable(){
plugin = this;
new BukkitRunnable(){
[USER=79777]@Override[/USER]
public void run(){
startscoreboard();
starttabprefix();
}}.runTaskLater(this, 60L);
Bukkit.getPluginManager().registerEvents(this, this);
}
public void createBoard(Player player){
Scoreboard scoreboard = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
Objective objective = scoreboard.registerNewObjective("stats", "dummy");
setScore(objective, player);
setPrefix(scoreboard);
player.setScoreboard(scoreboard);
}
public void setScore(Objective o, Player p){
o.setDisplaySlot(DisplaySlot.SIDEBAR);
o.setDisplayName("§e§lШлакоКрафт");
o.getScore("§fТут").setScore(3);
o.getScore("§fКакой-то бред").setScore(2);
o.getScore(" ").setScore(1);
o.getScore("§6сайт точка ру").setScore(0);
}
@SuppressWarnings("deprecation")
public void startscoreboard() {
new BukkitRunnable(){
[USER=79777]@Override[/USER]
public void run() {
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
Scoreboard scoreboard = player.getScoreboard();
if(scoreboard == null){
createBoard(player);
}else{
scoreboard.getObjective("stats").unregister();
Objective objective = scoreboard.registerNewObjective("stats", "dummy");
setScore(objective, player);
player.setScoreboard(scoreboard);
}
}
}
}.runTaskTimerAsynchronously(plugin, 0L, (long)(80));
}
public void starttabprefix() {
new BukkitRunnable(){
[USER=79777]@Override[/USER]
public void run() {
updatePrefix();
}
}.runTaskTimerAsynchronously(plugin, 0L, (long)(81));
}
public void setPrefix(Scoreboard scoreboard) {
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
String string = "#" + player.getName();
String preo;
if(string.length() > 16) {
preo = string.substring(0, 16);
}else{
preo = string;
}
Team team = scoreboard.getTeam(preo);
if (team == null) {
team = scoreboard.registerNewTeam(preo);
team.addPlayer((OfflinePlayer)player);
team.setPrefix(getStatus(player)+" §e| §a");
team.setSuffix(" §e• ");
}else{
team.addEntry(player.getName());
}
}
}
public void updatePrefix() {
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
for (Team team : player.getScoreboard().getTeams()) {
team.unregister();
}
}
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
setPrefix(player.getScoreboard());
}
}
[USER=74023]@EventHandler[/USER]
public void onJoin(PlayerJoinEvent e){
createBoard(e.getPlayer());
}