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

Помогите Scoreboard и онлайн игроков

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

Статус темы:
Закрыта.
  1. Автор темы
    Forest_SD

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

    Баллы:
    66
    Имя в Minecraft:
    Forest_SD
    Я хочу сделать чтобы в scoreboard показывалось,сколько игроков зашло,пример(Игроков: 1/24),и обновлялось как только игрок зашел или вышел
     
  2. _MediaNik_

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

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Создешь скорборд, обьект, даешь всем игрокам. При заходе игрока увеличиваешь score на 1
     
  3. Автор темы
    Forest_SD

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

    Баллы:
    66
    Имя в Minecraft:
    Forest_SD
    И?я делал это,или ошибка,или значение не обновляется при выходи игрока,мне нужно как-то сделать это в PlayerJoinEvent, и PlayerQuitEvent, а потом передать значения в scoreboard,только я не могу додумать как...
     
  4. _MediaNik_

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

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    5 минут
     
  5. xDark

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

    Баллы:
    96
    чо - та долго.
    Bukkit.getOnlinePlayers()
     
  6. _MediaNik_

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

    Баллы:
    76
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Упс.. Забыл. Счас
    Сори, лоханулся
     
  7. Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    -_-

    Щас се будет


    создаем статичный метод со входящим аргументом Player:
    public static void classname (Player p) {
    }

    Находим сам ск:
    public static void (Player p) {
    ScoreboardManager manager = Bukkit.getScoreboardManageer();
    Scoreboard board = manager.getNewScoreBoard();
    }

    Регаем новую задачу:
    public static void (Player p) {
    ScoreboardManager manager = Bukkit.getScoreboardManageer();
    Scoreboard board = manager.getNewScoreBoard();
    Objective obj = board.registerNewObjective("obj", "dummy");
    }

    Выводим вывод ск и его название:
    public static void (Player p) {
    ScoreboardManager manager = Bukkit.getScoreboardManageer();
    Scoreboard board = manager.getNewScoreBoard();
    Objective obj = board.registerNewObjective("obj", "dummy");

    obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    obj.setDisplayName(String);
    }

    Задаем сами очки и их значение (у нас же dummy)
    public static void (Player p) {
    ScoreboardManager manager = Bukkit.getScoreboardManageer();
    Scoreboard board = manager.getNewScoreBoard();
    Objective obj = board.registerNewObjective("obj", "dummy");

    obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    obj.setDisplayName(String);

    Score sc = obj.getScore(Bukkit.getOnlinePlayers().size + Bukkit.getMaxPlayers()); // я знаю, что не поставил слэш, но не как-то по***.
    sc.setScore(int)
    }

    И последнее:
    public static void (Player p) {
    ScoreboardManager manager = Bukkit.getScoreboardManageer();
    Scoreboard board = manager.getNewScoreBoard();
    Objective obj = board.registerNewObjective("obj", "dummy");

    obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    obj.setDisplayName(String);

    Score sc = obj.getScore(Bukkit.getOnlinePlayers().size + Bukkit.getMaxPlayers());
    sc.setScore(int)

    p.setScoreboard(board);
    }

    Регаешь два твоих ивента на выход и вход, вызываешь этот статичный метод, указываешь ему аргумент (это игрок) и профит. Ты получил то, что хотел.
     
  8. Автор темы
    Forest_SD

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

    Баллы:
    66
    Имя в Minecraft:
    Forest_SD
    Спасибо огромное!)
    Я сделал немного по другому...но у меня возникли проблемы,вот код
    Код:
    public PlayerListener(){
            Objective obj = scoreboard.registerNewObjective("Test","Test");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            obj.setDisplayName("Test_Server");
    
            Score score = obj.getScore(ChatColor.GOLD+ "Сервер: "+ ChatColor.GREEN + "Test");
            score.setScore(5);
    
        }
    
    
        @EventHandler
        public void JoinPlayer(PlayerJoinEvent event){
            Player p = event.getPlayer();
            p.setScoreboard(scoreboard);
            Objective obj = scoreboard.getObjective(DisplaySlot.SIDEBAR);
            Score score = obj.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.BLUE + "Сейчас онлайн: " + ChatColor.YELLOW + "" + ChatColor.BOLD + Bukkit.getOnlinePlayers().size()));
            score.setScore(1);
    
        }
    
        @EventHandler
        public void move(PlayerQuitEvent event){
            Player p = event.getPlayer();
            Objective obj = scoreboard.getObjective(DisplaySlot.SIDEBAR);
            Score score = obj.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.BLUE + "Сейчас онлайн: " + ChatColor.YELLOW + "" + ChatColor.BOLD + (Bukkit.getOnlinePlayers().size() - 1)));
            score.setScore(1);
    
        }
    Проблема на картинке...мне нужно чтобы оно перечисляло(когда игрок зашел на сервер),а не создавало новый score, и отнимало (-1) когда игрок выходит
    Я сделал немного по другому...но у меня возникли проблемы,вот код
    Код:
    public PlayerListener(){
            Objective obj = scoreboard.registerNewObjective("Test","Test");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            obj.setDisplayName("Test_Server");
    
            Score score = obj.getScore(ChatColor.GOLD+ "Сервер: "+ ChatColor.GREEN + "Test");
            score.setScore(5);
    
        }
    
    
        @EventHandler
        public void JoinPlayer(PlayerJoinEvent event){
            Player p = event.getPlayer();
            p.setScoreboard(scoreboard);
            Objective obj = scoreboard.getObjective(DisplaySlot.SIDEBAR);
            Score score = obj.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.BLUE + "Сейчас онлайн: " + ChatColor.YELLOW + "" + ChatColor.BOLD + Bukkit.getOnlinePlayers().size()));
            score.setScore(1);
    
        }
    
        @EventHandler
        public void move(PlayerQuitEvent event){
            Player p = event.getPlayer();
            Objective obj = scoreboard.getObjective(DisplaySlot.SIDEBAR);
            Score score = obj.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.BLUE + "Сейчас онлайн: " + ChatColor.YELLOW + "" + ChatColor.BOLD + (Bukkit.getOnlinePlayers().size() - 1)));
            score.setScore(1);
    
        }
    Проблема на картинке...мне нужно чтобы оно перечисляло(когда игрок зашел на сервер),а не создавало новый score, и отнимало (-1) когда игрок выходит
     

    Вложения:

    • test.png
      test.png
      Размер файла:
      13,3 КБ
      Просмотров:
      26
  9. Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Ты вообще сделал не так. Во-первых я бы порекомендовал делать скорборд в статическом методе, оттуда его вызывать из ивентов.

    Ясное дело, что дублируется, ведь ты, как я понял создаешь два разных объекта.
     
  10. Автор темы
    Forest_SD

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

    Баллы:
    66
    Имя в Minecraft:
    Forest_SD
    Я разобрался)тема закрыта
     
Статус темы:
Закрыта.

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