2017-06-11 16 views
3

設定の特定のセクションからデータを取得するメインクラスのリストがあります。これはコードです。リストを<String>からプレイヤー名に変換するspigot java

private List<String> datalist; 

public List<String> getDataList() { 
    if (datalist == null) { 
     datalist = new ArrayList<>(); 
    } 
    datalist = datalist.stream().distinct().collect(Collectors.toList()); 
    return datalist; 
} 
void loadConfig() { 
    final FileConfiguration config = this.getConfig(); 
    config.options().copyDefaults(true); 
    saveConfig(); 

    ConfigurationSection section = this.getConfig().getConfigurationSection("data"); 
    if (section != null) { 
     Set<String> datas = section.getKeys(false); 
     if (datas != null && !datas.isEmpty()) { 
      for (String data : datas) { 
       getDataList().add(data); 
      } 
     } 
    } 
} 

onEnableメソッドでloadConfig()が呼び出されました。現在、これをプレイヤーやコンソールに送った場合、arraylistでフォーマットされます。 ([uuid、uuid、uuid、etc、etc])。私の設定は次のようにフォーマットされています。

data: 
    e81a48c8-6e82-304a-b435-832a362b4cbf: 
    name: PiggyPiglet 
    stat1: 0 
    stat2: 0 
    stat3: 0 
    hasjoined: true 

PlayerJoinEventのプレーヤーでこれらの1つが生成されています。コマンドクラスに/ lb showというコマンドがあります。ここにコードがあります。

if (type.equalsIgnoreCase("show")) { 
        if (sender.hasPermission("leaderboard.show")) { 
         sender.sendMessage(cc("&7LeaderBoard:")); 

         String lb = String.valueOf(plugin.getDataList()).replace("[", 
           "").replace("]", 
           "").replace(",", 
           "\n"); 
         TextComponent leaderboard = new TextComponent(lb); 
         leaderboard.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("test").create())); 
         sender.spigot().sendMessage(leaderboard); 
        } 
       } 

このコードは、このような設定でuuidsをチャットで送信します。

uuid 
uuid 
uuid 

uuidsのいずれかにカーソルを合わせると、「テスト」と表示されます。私の質問は、私はプレイヤー名に、それらのUUIDを変更する方法をであり、また、代わりに現在行のUUIDとUUIDを交換

"EGCW | EGCL | KWC\n" + String.valueOf(cfg.getInt("data." + uuid + ".EGCW")) + " | " + String.valueOf(cfg.getInt("data." + uuid + ".EGCL")) + " | " + String.valueOf(cfg.getInt("data." + uuid + ".KWC"))"

を言って、「テスト」という。

答えて

3

あなたのUUIDはdataの子として別のConfigSectionですので、一層深くする必要があります。

この方法は最適ではないかもしれませんが、機能します。

ConfigurationSection section = config.getConfigurationSection("data"); 
     if (section != null) { 
      Set<String> datas = section.getKeys(false); 
      if (datas != null && !datas.isEmpty()) { 
       for (String uuid : datas) { 
        ConfigurationSection section2 = config.getConfigurationSection("data." + uuid); 
        if (section2 != null) { 

        getDataList().add(section2.getString("name")); 

        } 
       } 
      } 
     } 
     System.out.println(datalist); 

少し変更されたconfig.ymlを使用してからの出力(それはそれで複数のユーザーを持っている方が良いでしょう):
[PiggyPiglet1, PiggyPiglet2, PiggyPiglet3]

意図したとおりComponentBuilderが、その後動作するはずです。単に "test"を表示したい文字列に置き換えてください。

0

PlayerServiceの種類があり、方法がfindByUuid(String uuid)になり、Playerが返されます。

あなたがそれをしたら、あなたはこのような名前のリストにStringのリストに変換することができます:

datalist.stream().map(uuid -> playerService.findByUuid(uuid)) 
    .filter(player -> player != null) 
    .map(player -> player.getName()) 
    .collect(Collectors.toList()) 

しかし、あなたの場合には、あなたがより良いというだけよりも、設定からMap<String,Player>を取得したいですキー。次に、サービスからの必要性がない場合は、get(uuid)を地図上で実行するだけです。

関連する問題