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

Помогите Личный скорборд отображается всем

Тема в разделе "Разработка плагинов для новичков", создана пользователем kungermu, 12 июл 2021.

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

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

    Баллы:
    66
    Имя в Minecraft:
    kungermu
    Приветствую. Пишу плагин со скорбордом, столкнулся с проблемой, что скорборд обновляется для всех во время вызова, т.е. скорборда игрока Player1 обновляется и становиться у всех игроков идентичным.

    Код обновления:
    Код:
     public static void updateScoreboard(Player p)
      {
        String playerName = p.getName();
        File userdata = new File(Bukkit.getServer().getPluginManager().getPlugin("неважно").getDataFolder(), File.separator + "users");
        File user = new File(userdata, File.separator + playerName + ".yml");
        FileConfiguration data = YamlConfiguration.loadConfiguration(user);
        p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
        Scoreboard playerBoard = p.getScoreboard();
        for (Objective obj : playerBoard.getObjectives()) {
          obj.unregister();
        }
        Objective stats = playerBoard.registerNewObjective("§e§lневажно", "dummy");
        stats.setDisplaySlot(DisplaySlot.SIDEBAR);
        stats.getScore("§8неважно").setScore(6);
        stats.getScore("§8").setScore(5);
        stats.getScore("§b§lСтатистика").setScore(4);
        stats.getScore("   §fМонеты: §6" + data.getInt("stats.coins")).setScore(3);
        stats.getScore("   §fЗолото: §e" + data.getInt("stats.gold")).setScore(2);
        stats.getScore("§8§l").setScore(1);
        stats.getScore("§eневажно").setScore(0);
      }
    Код вызова обновления:
    Код:
    ScoreBoard api = new ScoreBoard();
    Player p = e.getPlayer();
    
    api.updateScoreboard(p);
     
  2. alexandrage

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

    Баллы:
    173
    А нафига ты делаешь ScoreBoard api = new ScoreBoard();? У тебя метод статичный, да и конфиг даже не кешируешь.
     
  3. Автор темы
    kungermu

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

    Баллы:
    66
    Имя в Minecraft:
    kungermu
    Не использую конфиг, если я правильно понял о чем ты.
     
  4. Автор темы
    kungermu

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

    Баллы:
    66
    Имя в Minecraft:
    kungermu
    Насчет статичности метода и правда ступил, поправлю, авось заработает.
     
  5. alexandrage

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

    Баллы:
    173
    А еще ты нигде не создаешь новый скорборд и не присваиваешь его игроку.
     
  6. Автор темы
    kungermu

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

    Баллы:
    66
    Имя в Minecraft:
    kungermu
    Пересоздание я думаю неособо требуется, скорборд и так хорошо обновляется, тут лишь проблема с тем, что всем показывалось, щас прикрутил для каждого игрока свой team в скорборде, думаю проблема исчезнет. Что скажешь насчет данного?

    Код:
     public static void updateScoreboard(Player p)
      {
        String playerName = p.getName();
        File userdata = new File(Bukkit.getServer().getPluginManager().getPlugin("неважно").getDataFolder(), File.separator + "users");
        File user = new File(userdata, File.separator + playerName + ".yml");
        FileConfiguration data = YamlConfiguration.loadConfiguration(user);
        p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
        Scoreboard playerBoard = p.getScoreboard();
        for (Objective obj : playerBoard.getObjectives()) {
          obj.unregister();
        }
        Objective stats = playerBoard.registerNewObjective("§e§lневажно", "dummy");
        if (playerBoard.getTeam(playerName) == null) {
          Team team = playerBoard.registerNewTeam(playerName);
          team.setDisplayName(playerName);
        }
        stats.setDisplaySlot(DisplaySlot.SIDEBAR);
        stats.getScore("§8неважно").setScore(6);
        stats.getScore("§8").setScore(5);
        stats.getScore("§b§lСтатистика").setScore(4);
        stats.getScore("   §fМонеты: §6" + data.getInt("stats.coins")).setScore(3);
        stats.getScore("   §fЗолото: §e" + data.getInt("stats.gold")).setScore(2);
        stats.getScore("§8§l").setScore(1);
        stats.getScore("§eневажно").setScore(0);
        playerBoard.getTeam(playerName).addPlayer(p);
      }
    }
    или лучше все-же для каждого свое название вместо dummy?
     

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