2017-01-26 3 views
1

Я пытаюсь отправить сообщение игроку со своими спасенными друзьями. Эти друзья сохраняются в файле .yml, но только UUIDS каждого отдельного игрока.Замена UUID игрока на имя игрока

Я затем пытается заменить UUID или преобразовать его в имени игроков, когда появится сообщение (если это имеет смысл)

КОД:

p.sendMessage("§7▄▄▄▄▄▄▄▄▄▄▄▄§aFriend System - page 1 of 1§7▄▄▄▄▄▄▄▄▄▄▄▄"); 

      int i = 1; 
      int length = cfg.getList(p.getUniqueId() + ".Friends").size(); 
      if (length != 0) 
      { 
      while (i <= length) 
      { 
       String uuid = (String)cfg.getList(p.getUniqueId() + ".Friends").get(i - 1); 
       ProxiedPlayer p2 = ProxyServer.getInstance().getPlayer(UUID.fromString(uuid)); 
       if (p2 != null) 
       { 
       TextComponent prefix = new TextComponent(Main.prefix); 

       TextComponent join = new TextComponent("§a§lONLINE"); 



       prefix.addExtra("§9" + p2.getName()); 
       prefix.addExtra(" "); 
       prefix.addExtra(join); 

       p.sendMessage(prefix); 
       } 
       else 
       { 
       String name = getNamebyUUID(uuid); 
       if (name != null) 
       { 
        p.sendMessage(Main.prefix + "§9" + name + " §c§lOFFLINE"); 
        Main.names.put(uuid, name); 

       } 
       else if (Main.names.containsKey(uuid)) 
       { 
        p.sendMessage(Main.prefix + "§9" + (String)Main.names.get(uuid) + " §8[§c§lOFFLINE§8]"); 
       } 
       else 
       { 
        p.sendMessage(Main.prefix + "§cThis is not a valid player!"); 
       } 
       } 
       i++; 
      } 
      } 
      else 
      { 
      p.sendMessage(Main.prefix + "§cYou don't have any friends."); 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     } 
+0

Bukkit.getPlayer (UUID) .getDisplayName(); – Kerooker

ответ

1

Связанные Вопрос: Get Offline Player by UUID


Если игрока онлайн:


String playerUUID; 
Bukkit.getPlayer(playerUUID).getDisplayName(); 

Если Игрок вне форума:


Не Trully возможно. Игрок может изменять имена в любое время, и Bukkit не может хранить эту информацию и постоянно обновлять все имя игрока при каждом изменении. Вы можете использовать только метод онлайн-игрока или сохранить имя игрока вместе с uuid.

@UPDATE

Как указано пользователем Pokechu22, Bukkit делает сохранить имя последний пользователя, используемый перед выходом из системы. Он может быть получен таким образом:

OfflinePlayer off = Bukkit.getOfflinePlayer(String uuid); 
String lastKnownName = off.getName(); 

Но будьте очень осторожны! Это может быть не последнее имя игрока.


+1

Bukkit хранит последнее известное имя игрока. Вы не можете получить имя _current_, пока он не отключен, если он изменится (если вы не запросите его вручную из API mojang), но вы можете использовать 'OfflinePlayer.getName', чтобы получить последнее известное имя. (Просто вы не можете использовать 'getDisplayName'). – Pokechu22

+0

Это правда! Обновлен мой ответ. Благодаря! – Kerooker