Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

[Tutorial/LIB] Создаем Scoreboard'ы

Тема в разделе "Разработка плагинов для новичков", создана пользователем JustBlender, 16 фев 2014.

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

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Всем привет! Сегодня я покажу вам, как создать Scoreboard! Это просто, давайте приступим:
    PS. Это "библиотека" очень действительно удобна и проста, главное чтобы руки не росли из точки G :D
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    1. Что нам нужно это создать класс: рекомендую ISCOREAPI (Будет проще для нубиков-кубиков)
    Код:
    public class ISCOREAPI
    {
    /* ISCOREAPI by Firebreath15 v1.5
    *
    * Written for private use. Do not duplicate or republish.
    */
      Scoreboard board;
      Objective obj;
    
      public ISCOREAPI()
      {
        this.board = Bukkit.getScoreboardManager().getNewScoreboard();
      }
    
      public void setScoreboard(Player p) {
        this.board = p.getScoreboard();
        this.obj = this.board.getObjective(DisplaySlot.SIDEBAR);
      }
    
      public void createObjective(String name, String desc) {
        if (this.board.getObjective(name) == null) {
          this.obj = this.board.registerNewObjective(name, desc);
          this.obj.setDisplayName(name);
          this.obj.setDisplaySlot(DisplaySlot.SIDEBAR); // Вы можете сделать не только "таблицы", можно и сделать подсчет над головой, главное в DisplaySlot выберите другой вариант. Их существует несколько. Посмотрите на вики
        }
      }
    
      public void removeObjective(String obj) {
              if(board.getObjective(obj)!=null){
                      this.board.getObjective(obj).unregister();
              }
      }
    
      public void createTeam(String name) {
        if (this.board.getTeam(name) == null) {
          Team team = this.board.registerNewTeam(name);
          team.setDisplayName(name);
        }
      }
    
      public void removeTeam(String team) {
        this.board.getTeam(team).unregister();
      }
    
      public void addPlayerToTeam(String team, Player p) {
        this.board.getTeam(team).addPlayer(p);
      }
    
      public int getScores(OfflinePlayer p) {
        Score score = this.obj.getScore(p);
        return score.getScore();
      }
    
      public void setScore(OfflinePlayer p, int sc) {
        Score score = this.obj.getScore(p);
        score.setScore(sc);
      }
    
      public void removePlayerFromTeam(String team, Player p) {
              if(this.board.getTeam(team)!=null){
                      if(this.board.getTeam(team).hasPlayer(p)){
                              this.board.getTeam(team).removePlayer(p);
                      }
              }
      }
    
      public void refreshPlayerScoreboard(Player p) {
        p.setScoreboard(this.board);
      }
    
      public Scoreboard getPlayerScoreboard(Player p) {
        return p.getScoreboard();
      }
    
      public void removePlayerScoreboard(Player p) {
          board.getObjective(DisplaySlot.SIDEBAR).unregister();
      }
    
    Вставляем это. Проблем быть не должно!

    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    2. Регистрируем это в главном классе.

    Код:
    public class {MainClassName} extends JavaPlugin{
    
            public ISCOREAPI sapi;
    А это в onEnable:
    Код:
            public void onEnable(){
                    sapi=new ISCOREAPI();
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    3. We're done!

    Чтобы создать уже сам Scoreboard (Вот чего мы ждали)
    Делаем так:
    Код:
        ISCOREAPI api = new ISCOREAPI();
        api.createObjective(ChatColor.DARK_AQUA+"Тест", "Тест"); //Ваш заголовок
        api.createTeam("Player");
        api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Красный"), 0);
        api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "Синий"),
        api.addPlayerToTeam("Player", p);
        api.refreshPlayerScoreboard(p);
    Чтобы добавить "очко" "игроку":
    (Не спрашивайте зачем нужны getOnlinePlayers())
    Код:
            Player[] online = Bukkit.getServer().getOnlinePlayers();
            for (int i = 0; i < online.length; i++) {
                    Player o = online[i];
                    plugin.sapi.setScoreboard(o);
                    int sc = plugin.sapi.getScores(Bukkit.getOfflinePlayer(ChatColor.RED+ "Красный"));
                    plugin.sapi.setScore(Bukkit.getOfflinePlayer(ChatColor.RED+ "Красный"), sc + 1); //Присуждаем игроку 1 балл
    Чтобы удалить таблицу совсем:
    Код:
            ISCOREAPI api = new ISCOREAPI();
            api.setScoreboard(p);
            api.removePlayerFromTeam("Player", p);
                api.removeTeam("Player");
                api.removeObjective(ChatColor.DARK_AQUA+ "Тест");
    Посмотреть на само чудо самим, можно тут: Click ME
     
    Последнее редактирование: 5 апр 2014
    kirill2011s, Laster, kris13 и 5 другим нравится это.
  2. Хостинг MineCraft
    <
  3. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Для первого туториала - хорошо
    Но вот только реализовано не совсем верно.
    Для ISCOREAPI лучше использовать паттерн Singlet-on, так как создавать его нам надо только 1 раз
     
  4. StealerSlain

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

    Баллы:
    88
    Имя в Minecraft:
    StealerSlain
    Чувствую взял отсюда. Но хорошо, что потрудился над переводом и показал как с этим работать.
     
  5. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Наличие гайдов по девингу на этом форуме и желание людей их писать - уже отлично.
     
    Bars, ql_Nik_lp и Hilgert нравится это.
  6. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Я сам думаю заняться гайдингом для RB
    Возможно даже в видео-формате, опыт все таки есть)

    Но надо бы сначала на YT вернуться :D
     
  7. Автор темы
    JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Был бы раздел такой, с удовольствием сделал бы туториалов побольше. Рамон, ну, ты понял
     
  8. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Конечно наш Рамон понял с:
     
    antigate нравится это.
  9. Автор темы
    JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Даа... C:
     
    Den_Abr нравится это.
  10. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Блин, я тут заметил..
    Он же попросил..
    Хоть ссылочку оставь на источник
     
  11. Автор темы
    JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    На гитхаб? С кодом сорри, взял с Eclipse, а копирайт там удалил его
     
  12. kris13

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

    Баллы:
    78
    А можно какой-нибудь пример, что это и как это используется?)
     
  13. FirePoint

    FirePoint Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Just_Andrew
    Сойдет :)
     
  14. Автор темы
    JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    А что именно нужно? Например, для создания таблиц подсчета убийств.

    [​IMG]
     
  15. kris13

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

    Баллы:
    78
    Но ведь она будет сброшена при рестарте сервера, или что-то не понимаю? И такой странный вопрос, а как ее отобразить(см. ваш скрин)?
     
  16. Автор темы
    JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    1. ISCOREAPI api = new ISCOREAPI();
    2. api.createObjective(ChatColor.DARK_AQUA+"Тест", "Тест"); //Ваш заголовок
    3. api.createTeam("Player");
    4. api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Красный"), 0);
    5. api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "Синий"),
    6. api.addPlayerToTeam("Player", p);
    7. api.refreshPlayerScoreboard(p);
    Он будет отображаться всегда, даже при рестарте, должно. Если хочешь чтобы сразу это было видно, можно сунуть это в PlayerJoinEvent
     
    ПриветОтЛайки нравится это.
  17. kris13

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

    Баллы:
    78
    Да? Спасибо, прошу прощения за глупый вопрос.
     
  18. Автор темы
    JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Ничего страшного :) Если новенький со Scoreboard, то ничего, со всеми бывает
     
  19. ShaGTF

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

    Баллы:
    68
    Имя в Minecraft:
    CoolShaGGy
    Вопросик:
    Код:
                  ISCOREAPI api = new ISCOREAPI();
                    api.createObjective(ChatColor.DARK_AQUA+"Teams", "Teams");
                    api.createTeam("Player");
                    api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "RED"), 0);
                    api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "BLUE"),
                    api.addPlayerToTeam("Player", p));
                    api.refreshPlayerScoreboard(p);
    Почему у меня "p" выдают ошибку? Типа, эй чувак, мы не можем resolved as variable, а ты отстой D:
    Помоги, а?
     
  20. Автор темы
    JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Стринг для эвента: Player p = e.getPlayer();
    String для команды: Player p = (Player) sender;
     
    Последнее редактирование: 23 фев 2014
  21. ShaGTF

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

    Баллы:
    68
    Имя в Minecraft:
    CoolShaGGy
    Не\
    Нет, ГетПлеер не работает, или я тупой... И вообще, почему Скоробороды стало так сложно создавать? Раньше все было на раз, два,три...
     

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