1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Feymer31, 15 дек 2022.

  1. Автор темы
    Feymer31

    Feymer31 Активный участник Пользователь

    Баллы:
    66
    Я хочу сделать скордборд.
     
  2. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    В смысле какой ивент? Когда надо - тогда и создавай скорборд. Можно при входе игрока на сервер, например, т.е. в PlayerJoinEvent
     
  3. Автор темы
    Feymer31

    Feymer31 Активный участник Пользователь

    Баллы:
    66
    А как сделать чтобы скордборд создавало?
     
  4. Автор темы
    Feymer31

    Feymer31 Активный участник Пользователь

    Баллы:
    66
    Помогите
     
  5. Egorov

    Egorov Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    sqlex
    Почитаю эту статью. Будет полезно. *тык*
     
  6. Wh1teInc

    Wh1teInc Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Wh1teInc
    А причем здесь ивент к созданию борда?

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

    Код:
    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);
       }
      }
     
  7. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    С этой проверки я выпал)
    Код:
    Bukkit.getPlayer(player.getUniqueId()) == null
    Используй player.isOnline() и будет счастье.
     
  8. DestKoder

    DestKoder Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    DestKoder
    Ну или хотяб
    Код:
    Bukkit.getOnlinePlayers().contains(player)
     
  9. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Ужас, ничем не лучше. Бессмысленная штука ваще
     
  10. ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    player != null ?)
     
  11. ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    Та там ваще не нужна эта проверка xD
    Я чёт не сразу заметил где вызывается метод.
     
  12. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Он не может быть нулл, если изначально им не был. Это же не AtomicReference.
    Поэтому в данном случае только player.isOnline() и никак иначе
     
  13. ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    По идее же вообще можно вызвать этот метод в цикле Bukkit.getOnlinePlayers() и проверка не будет нужна, да?
     
  14. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    В примере выше идёт работа с конкретным игроком, поэтому перебирать всех не требуется.
    Чисто теоретически сработает и Bukkit.getOnlinePlayers().contains(), но .isOnline() работает существенно эффективней
     
  15. ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    А, Я думал он создаётся для всех игроков на сервере
     
  16. Wh1teInc

    Wh1teInc Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Wh1teInc
    эту хрень я кодил ещё со времён, когда динозавры зарождались :)
     

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