- Баллы
- 76
- Имя в Minecraft
- Namer_PRO
Добрый день!
Возникла проблема: когда я обновляю scoreboard с интервалом в 1 тик, он начинает мигать. На сколько понял - это из-за того, что отправляются два пакета: один для удаления, а другой для добавления, между чем есть некоторое время и поэтому табло мерцает. Слышал, что можно использовать teams, но не очень понял, как это к заголовку применить.
Проблема:
Вот мой код:
Заранее спасибо 🙂
Возникла проблема: когда я обновляю scoreboard с интервалом в 1 тик, он начинает мигать. На сколько понял - это из-за того, что отправляются два пакета: один для удаления, а другой для добавления, между чем есть некоторое время и поэтому табло мерцает. Слышал, что можно использовать teams, но не очень понял, как это к заголовку применить.
Проблема:
Вот мой код:
PHP:
package ru.namerpro.NamerBoard;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
public class sendBoard implements Listener
{
@SuppressWarnings("deprecation")
public void createBoard(Player p)
{
String title = "12345678";
Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.plugin, new Runnable() {
int n = 0, s = 0;
boolean flag = false;
String line = " ";
@Override
public void run() {
ScoreboardManager manager = Bukkit.getScoreboardManager();
Scoreboard board = manager.getNewScoreboard();
Objective objective = board.registerNewObjective("test", "dummy");
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
if(!flag)
{
if(pushLetter(line).equals("null"))
{
char[] hLine = line.toCharArray();
hLine[line.length() - 1] = title.toCharArray()[n];
line = String.copyValueOf(hLine);
n += 1;
}
else if(pushLetter(line).equals("full"))
{
line = " ";
n = 0;
flag = true;
}
else
{
line = pushLetter(line);
}
objective.setDisplayName(ChatColor.AQUA + "► " + ChatColor.WHITE + "§l" + line);
}
else
{
objective.setDisplayName(ChatColor.AQUA + "► " + ChatColor.WHITE + "§l" + title);
s += 1;
}
if(s == 60)
{
flag = false;
s = 0;
}
Score sc1 = objective.getScore("ПРОСТО ТЕКСТ!");
sc1.setScore(1);
p.setScoreboard(board);
}
}, 0, (long) 1);
}
public static String pushLetter(String line)
{
boolean full = true;
for(int i = 0; i < line.length(); i++)
{
if(line.charAt(i) == ' ')
{
full = false;
}
}
if(full)
{
return "full";
}
char[] res = new char[line.length()];
for(int i = line.length()-1; i > 0; i--)
{
if((line.charAt(i) != ' ') & (line.charAt(i - 1) == ' '))
{
res = line.toCharArray();
res[i] = ' ';
res[i-1] = line.charAt(i);
return String.copyValueOf(res);
}
}
return "null";
}
@EventHandler()
public void applyBoard(PlayerJoinEvent e)
{
Bukkit.getScheduler().runTaskLater(Main.plugin, new Runnable()
{
@Override
public void run()
{
createBoard(e.getPlayer());
}
}, 1);
}
}
Заранее спасибо 🙂