Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Какой ивент отвечает за скордборд?

Метки:
Теги Теги
плагин самопис
В смысле какой ивент? Когда надо - тогда и создавай скорборд. Можно при входе игрока на сервер, например, т.е. в PlayerJoinEvent
 
А как сделать чтобы скордборд создавало?
 
Почитаю эту статью. Будет полезно. *тык*
 
А причем здесь ивент к созданию борда?

Вот тебе пример борда:

Код:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scheduler.BukkitRunnable;
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 ScoreListener implements Listener {

    /**
     * Первым делом мы делаем ивент, который при входе игрока будет отображать борд
     * Пустые пробелы меняем на текст, в зависимости что будете отображать
     */
 
 @EventHandler   
 public void PlayerJoinEvent(PlayerJoinEvent event) {
      scoreboard(event.getPlayer());
   }
    
 public static void scoreboard(final Player player) {
 new BukkitRunnable() { 
 public void run() {
 if (Bukkit.getPlayer(player.getUniqueId()) == null) {
     this.cancel();
  } else {
    ScoreboardManager scoreboardmanager = Bukkit.getScoreboardManager();
    Scoreboard scoreboard = scoreboardmanager.getNewScoreboard();
    Objective objective = scoreboard.registerNewObjective("test", "dummy");
              
    objective.setDisplaySlot(DisplaySlot.SIDEBAR);
    objective.setDisplayName("Server Name");
    
    /**
    * Здесь я сделал отображение даты (МСК)
    **/
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    Date date = new Date();
    Score score12 = objective.getScore("§7" + dateFormat.format(date));
    score12.setScore(12);

    Score score11 = objective.getScore("");
    score11.setScore(11);

    Score score10 = objective.getScore("");
    score10.setScore(10);

    Score score9 = objective.getScore("");
    score9.setScore(9);

    // Это как пример, сюда можно что угодно ставить в место получени онлайна
     Score score8 = objective.getScore("" + Bukkit.getServer().getOnlinePlayers().size());
     score8.setScore(8);
    
     Score score7 = objective.getScore("");
     score7.setScore(7);
    
     Score score6 = objective.getScore("");
     score6.setScore(6);

     Score score5 = objective.getScore("");
     score5.setScore(5);
 
     Score score4 = objective.getScore("");
     score4.setScore(4);
 
     Score score3 = objective.getScore("");
     score3.setScore(3);

     Score score2 = objective.getScore("");
     score2.setScore(2);
 
     Score score1 = objective.getScore("");
     score1.setScore(1);

     Score score0 = objective.getScore("server ip");
     score0.setScore(0); 
 
     player.setScoreboard(scoreboard);
   }
   }
         // Здесь getInstance идёт из основного класса, я думаю, что вы сможете это метод создать
   }.runTaskTimer(Название_Вашего_Класса.getInstance(), 0L, 40L);
   }
  }
 
С этой проверки я выпал)
Код:
Bukkit.getPlayer(player.getUniqueId()) == null
Используй player.isOnline() и будет счастье.
 
Он не может быть нулл, если изначально им не был. Это же не AtomicReference.
Поэтому в данном случае только player.isOnline() и никак иначе
По идее же вообще можно вызвать этот метод в цикле Bukkit.getOnlinePlayers() и проверка не будет нужна, да?
 
По идее же вообще можно вызвать этот метод в цикле Bukkit.getOnlinePlayers() и проверка не будет нужна, да?
В примере выше идёт работа с конкретным игроком, поэтому перебирать всех не требуется.
Чисто теоретически сработает и Bukkit.getOnlinePlayers().contains(), но .isOnline() работает существенно эффективней
 
В примере выше идёт работа с конкретным игроком, поэтому перебирать всех не требуется.
Чисто теоретически сработает и Bukkit.getOnlinePlayers().contains(), но .isOnline() работает существенно эффективней
А, Я думал он создаётся для всех игроков на сервере
 

Поделиться этой страницей

Назад
Верх