Advertisement
JolyJDIA

Untitled

Jul 13th, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.84 KB | None | 0 0
  1. public class BoardImpl implements Board {//Runnable, AutoCloseable
  2.     private static final Cleaner cleaner = Cleaner.create();
  3.     //Задач > 16 быть не может!(дефолт капасити - 16, но поставил для справки)
  4.     private final PriorityQueue<BoardTask> tasksQueue = new PriorityQueue<>(16,
  5.             Comparator.comparingLong(BoardTask::getNextRun)
  6.     );
  7.     private final Map<Integer, String> scores = new HashMap<>(16);
  8.     private final Scoreboard board;
  9.     private final Objective objective;
  10.     private final Cleaner.Cleanable cleanable;
  11.  
  12.     public BoardImpl(String displayName) {
  13.         this.board = Objects.requireNonNull(Bukkit.getScoreboardManager()).getNewScoreboard();
  14.         this.objective = board.registerNewObjective("test", "dummy", displayName);
  15.         this.objective.setDisplaySlot(DisplaySlot.SIDEBAR);
  16.         this.cleanable = cleaner.register(this, () -> {
  17.             tasksQueue.clear();//Удаляем задачи
  18.             scores.clear();//Хз, на всякий случай
  19.         });
  20.     }
  21.     /*@Override
  22.     protected void finalize() {
  23.         tasksQueue.clear();
  24.     }*/
  25.  
  26.     @Override
  27.     public void setDisplayName(String displayName) {
  28.         this.objective.setDisplayName(displayName);
  29.     }
  30.     @Override
  31.     public Board insertScore(int score, String entry) {
  32.         scores.compute(score, (integer, line) -> {
  33.             if(line != null) {
  34.                 board.resetScores(line);
  35.             }
  36.             objective.getScore(entry).setScore(score);
  37.             return entry;
  38.         });
  39.         return this;
  40.     }
  41.     @Override
  42.     public void addTask(Consumer<? super Board> runnable, long delay, long period, @NotNull TimeUnit scale) {
  43.         BoardTask task = new BoardTask(() -> runnable.accept(this), scale.toMillis(period));
  44.         task.setNextRun(System.currentTimeMillis() + scale.toMillis(delay));
  45.         tasksQueue.add(task);
  46.     }
  47.  
  48.     @Override
  49.     public void shutdownNow() {
  50.         tasksQueue.clear();
  51.     }
  52.     @Override
  53.     public void resetScores(String entry) {
  54.         board.resetScores(entry);
  55.     }
  56.     @Override
  57.     public void sendPlayers(Player @NotNull ... player) {
  58.         for(Player p : player) {
  59.             p.setScoreboard(board);
  60.         }
  61.     }
  62.     @Override
  63.     public void sendPlayer(@NotNull Player player) {
  64.         player.setScoreboard(board);
  65.     }
  66.     @Override
  67.     public void run() {
  68.         long now = System.currentTimeMillis();
  69.         BoardTask task = tasksQueue.poll();
  70.         if(task == null) {
  71.             return;
  72.         }
  73.         if(now >= task.getNextRun()) {
  74.             task.getRunnable().run();
  75.         }
  76.         task.setNextRun(now + task.getPeriod());
  77.         tasksQueue.add(task);
  78.     }
  79.  
  80.     @Override
  81.     public void close() {
  82.         cleanable.clean();
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement