Помогите Проблема с изменением ника в Tab

konfyciu98

Старожил
Пользователь
Баллы
123
Имя в Minecraft
konfyciu
Присоединяю игроку в табе префикс, но если задать более 1 цвета, то вылетает ошибка. Префикс с кодами цветов читается из конфига. Бывало ли такое у кого-то?
 
Ошибка
Код:
[22:22:09] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'tag' in plugin Tag v1.0
   at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:175) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCommand(CraftServer.java:706) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.PlayerConnection.handleCommand(PlayerConnection.java:984) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:829) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.PacketPlayInChat.a(PacketPlayInChat.java:28) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.PacketPlayInChat.handle(PacketPlayInChat.java:65) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:147) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.ServerConnection.c(ServerConnection.java:77) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:700) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:273) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:562) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:469) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
Caused by: java.lang.IllegalArgumentException: Player list names can only be a maximum of 16 characters long
   at org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer.setPlayerListName(CraftPlayer.java:180) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   at me.konfyciu.Tag.Tag.onCommand(Guilds.java:83) ~[?:?]
   at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-1.7.2-R0.3-122-gb58e277]
   ... 13 more

Кажется, что это вызвано тем, что префикс с ником превышают лимит в 16 символов
Caused by: java.lang.IllegalArgumentException: Player list names can only be a maximum of 16 characters long
Но, ведь есть плагины, которые преодолевают этот порог! ColoredTags этому пример.
 
ColoredTags этому пример.
Код:
  public static void updateTab(Player player)
  {
    if (Configuration.changeTabNames)
    {
      player.setPlayerListName(null);
    }
    else
    {
      String playerName = player.getName();
      if (player.getPlayerListName().equals(playerName)) {
        player.setPlayerListName("§f" + (playerName.length() > 14 ? playerName.substring(0, 14) : playerName));
      }
    }
  }

Тут как бы идет контроль за длиной строки. Это кусок ColoredTags, да.
 
Код:
  public static void updateTab(Player player)
  {
    if (Configuration.changeTabNames)
    {
      player.setPlayerListName(null);
    }
    else
    {
      String playerName = player.getName();
      if (player.getPlayerListName().equals(playerName)) {
        player.setPlayerListName("§f" + (playerName.length() > 14 ? playerName.substring(0, 14) : playerName));
      }
    }
  }

Тут как бы идет контроль за длиной строки. Это кусок ColoredTags, да.
Похоже на это, но я не понимаю, как обойти 16-ти символьный лимит?
 
Похоже на это, но я не понимаю, как обойти 16-ти символьный лимит?
Никак. Если в клиенте строка с именем игрока объявляется на размер 16 символов, то больше ее не сделать. Только копатся в клиенте.
 
Никак. Если в клиенте строка с именем игрока объявляется на размер 16 символов, то больше ее никак не сделать. Только копатся в клиенте.
Эмммм, у меня на сервере 1.6.4 с помощью ColoredTags (префикс + ник) > 16 символов
 
Эмммм, у меня на сервере 1.6.4 с помощью ColoredTags (префикс + ник) > 16 символов
И как это в табе выглядит? Ибо для версии 1.6.4 идет такая-же проверка. Или же очень похоже, что реализируется это через Scoreboard'овские фичи (из версии 1.6.4 код):
Код:
private static void setPrefix(Player player, String prefix, String suffix)
  {
    if (prefix == null) {
      prefix = "";
    }
    if (suffix == null) {
      suffix = "";
    }
    prefix = AsciiSymbols.placeholdersToSymbols(prefix);
    suffix = AsciiSymbols.placeholdersToSymbols(suffix);
    if (prefix.length() > 16) {
      prefix = prefix.substring(0, 16);
    }
    if (suffix.length() > 16) {
      suffix = suffix.substring(0, 16);
    }
    String teamName = getTeamName(prefix, suffix);
    if (teamName.length() > 16) {
      teamName = teamName.substring(0, 16);
    }
    Team t = sb.getTeam(teamName);
    if (t == null)
    {
      t = sb.registerNewTeam(teamName);
      t.setPrefix(prefix);
      t.setSuffix(suffix);
      t.setCanSeeFriendlyInvisibles(false);
    }
    t.addPlayer(player);
  }
  private static String getTeamName(String prefix, String suffix)
  {
    StringBuilder sb = new StringBuilder("CT");
   
    prefix = AsciiSymbols.toAscii(prefix);
    suffix = AsciiSymbols.toAscii(suffix);
    if (prefix.length() > 7) {
      sb.append(prefix.substring(0, 7));
    } else {
      sb.append(prefix);
    }
    if (suffix.length() > 7) {
      sb.append(suffix.substring(0, 7));
    } else {
      sb.append(suffix);
    }
    return sb.toString();
  }
 
И как это в табе выглядит? Ибо для версии 1.6.4 идет такая-же проверка. Или же очень похоже, что реализируется это через Scoreboard'овские фичи (из версии 1.6.4 код):
Код:
private static void setPrefix(Player player, String prefix, String suffix)
  {
    if (prefix == null) {
      prefix = "";
    }
    if (suffix == null) {
      suffix = "";
    }
    prefix = AsciiSymbols.placeholdersToSymbols(prefix);
    suffix = AsciiSymbols.placeholdersToSymbols(suffix);
    if (prefix.length() > 16) {
      prefix = prefix.substring(0, 16);
    }
    if (suffix.length() > 16) {
      suffix = suffix.substring(0, 16);
    }
    String teamName = getTeamName(prefix, suffix);
    if (teamName.length() > 16) {
      teamName = teamName.substring(0, 16);
    }
    Team t = sb.getTeam(teamName);
    if (t == null)
    {
      t = sb.registerNewTeam(teamName);
      t.setPrefix(prefix);
      t.setSuffix(suffix);
      t.setCanSeeFriendlyInvisibles(false);
    }
    t.addPlayer(player);
  }
  private static String getTeamName(String prefix, String suffix)
  {
    StringBuilder sb = new StringBuilder("CT");
  
    prefix = AsciiSymbols.toAscii(prefix);
    suffix = AsciiSymbols.toAscii(suffix);
    if (prefix.length() > 7) {
      sb.append(prefix.substring(0, 7));
    } else {
      sb.append(prefix);
    }
    if (suffix.length() > 7) {
      sb.append(suffix.substring(0, 7));
    } else {
      sb.append(suffix);
    }
    return sb.toString();
  }
1)В табе обычный ник, ибо строка изменения ника в табе выдает ошибку и не выполняется.
2)Как Scoreboard влияет на Tab? До меня это вообще никаким боком не доходит!
 
1)В табе обычный ник, ибо строка изменения ника в табе выдает ошибку и не выполняется.
2)Как Scoreboard влияет на Tab? До меня это вообще никаким боком не доходит!
Можно скрин этого чуда? Того, которое работает?
 
секунду
Вот-сБезымянный.PNG
И если рядом стоит ник другого игрока, то этот ник "налезает" на него.
 
2)Как Scoreboard влияет на Tab? До меня это вообще никаким боком не доходит!
Если бы ты знал, что Scoreboard может ставить префиксы и суффиксы игрокам, которые состоят в командах...
 
Тааак, не робит :( Tab такой же :( Где я накосячил?
Код:
  @EventHandler
   public void onJoin(PlayerJoinEvent e) {
     Player p = e.getPlayer();
    ScoreboardManager manager = Bukkit.getScoreboardManager();
    Scoreboard sb = manager.getNewScoreboard();   
    Team t = sb.getTeam("Gas");
    if (t == null)
    {
    t = sb.registerNewTeam("Gas");
    t.setPrefix("[Ololo]");
    t.setSuffix("Ah");
    t.setCanSeeFriendlyInvisibles(true);
    }
    t.addPlayer(p);

   }
 
Тааак, не робит :( Tab такой же :( Где я накосячил?
Код:
  @EventHandler
   public void onJoin(PlayerJoinEvent e) {
     Player p = e.getPlayer();
    ScoreboardManager manager = Bukkit.getScoreboardManager();
    Scoreboard sb = manager.getNewScoreboard();  
    Team t = sb.getTeam("Gas");
    if (t == null)
    {
    t = sb.registerNewTeam("Gas");
    t.setPrefix("[Ololo]");
    t.setSuffix("Ah");
    t.setCanSeeFriendlyInvisibles(true);
    }
    t.addPlayer(p);

   }
Ты для каждого создаёшь отдельную ОчкоДоску
 
Ты для каждого создаёшь отдельную ОчкоДоску
До меня туго доходит.
Код:
    ScoreboardManager manager = Bukkit.getScoreboardManager();
    Scoreboard sb = manager.getNewScoreboard();  
    Team t = sb.getTeam("Gas");
Это надо вынести за метод?
Сейчас создал отдельную пробную команда, вписал туда это
Код:
              ScoreboardManager manager = Bukkit.getScoreboardManager();
               Scoreboard board = manager.getNewScoreboard();
               Team team = board.registerNewTeam(args[1]);
               team.setAllowFriendlyFire(false);
               team.setCanSeeFriendlyInvisibles(false);
               team.setPrefix(complete);
               team.addPlayer(player);
Нигде префикса нет! Ни в табе, ни в чате(хотя в EssentialsChat добавил {TEAMNAME} и {TEAMPREFIX}), ни над головой!
 
До меня туго доходит.
Код:
    ScoreboardManager manager = Bukkit.getScoreboardManager();
    Scoreboard sb = manager.getNewScoreboard();
    Team t = sb.getTeam("Gas");
Это надо вынести за метод?
Сейчас создал отдельную пробную команда, вписал туда это
Код:
              ScoreboardManager manager = Bukkit.getScoreboardManager();
               Scoreboard board = manager.getNewScoreboard();
               Team team = board.registerNewTeam(args[1]);
               team.setAllowFriendlyFire(false);
               team.setCanSeeFriendlyInvisibles(false);
               team.setPrefix(complete);
               team.addPlayer(player);
Нигде префикса нет! Ни в табе, ни в чате(хотя в EssentialsChat добавил {TEAMNAME} и {TEAMPREFIX}), ни над головой!
Извините за глупый ответ, но я тоже ничего не видел :\ (мда уж кодеры пошли)
 
Назад
Верх