2016-08-31 8 views
-4

アイテムの知識が特定の文字列を含んでいるかどうかを確認しようとしています。アイテムに情報が含まれているかどうかを確認します

私はすでにこれを試してみました:私はあなたが何をしたい推測している何

if (p.getItemInHand().getItemMeta().getLore() != null) { 
    List<String> LoreInHand = p.getItemInHand().getItemMeta().getLore(); 

    if (LoreInHand.contains("lore")){ 
     //do stuff 
    } 
} 

ヘルプが

+1

'LoreInHand'を印刷して私たちと共有できますか? – Mureinik

答えて

1

;-)をappreaciatedされ、それが与えられたものを含まれている場合は、すべての伝承の文字列をチェックすることです。 だから基本的に、あなたが何をする必要があるか、以下のようになります。

ItemStack itemInMainHand = player.getInventory().getItemInMainHand(); 
if (itemInMainHand != null && itemInMainHand.hasItemMeta()) { 
    ItemMeta metaOfItemInHand = itemInMainHand.getItemMeta(); 
    if (metaOfItemInHand.hasLore()) { 
     List<String> loreInHand = metaOfItemInHand.getLore(); 

     for(String loreLine : loreInHand) { 
      if(loreLine.contains("lore") { 
       //do stuff 
      } 
     } 
    } 
} 

が、これは何度も「伝承」が実際の伝承に含まれているかによって、あなたのコードを複数回実行する可能性があることに注意してください。この問題を回避するには、ifボディに戻り値を代入するか(メソッド内にある限り)、forループを再利用可能な余分なメソッドに抽出します。 Java8ではストリームで何かできます:

ItemStack itemInMainHand = player.getInventory().getItemInMainHand(); 
if (itemInMainHand != null && itemInMainHand.hasItemMeta()) { 
    ItemMeta metaOfItemInHand = itemInMainHand.getItemMeta(); 
    if (metaOfItemInHand.hasLore()) { 
     List<String> loreInHand = metaOfItemInHand.getLore(); 

     if(!loreInHand.stream().filter(s -> s.contains("lore")) 
      .collect(Collectors.toList()).isEmpty()) { 
      //do stuff 
     } 
    } 
} 

希望します。


編集:getItemInHand()以来がdeprectaedされ、私は今、有効なコードに私の例を更新しました。また、Krijn Tojetsの提案が追加されました。あなたがアイテムにnullチェックを追加する必要があり、それがメタだ

ItemStack itemInMainHand = player.getInventory().getItemInMainHand(); 
if (itemInMainHand != null && itemInMainHand.hasItemMeta()) { 
    ItemMeta metaOfItemInHand = itemInMainHand.getItemMeta(); 
    if (metaOfItemInHand.hasLore() && 
     String.join(" ", metaOfItemInHand.getLore()).contains("lore")) { 
     //do stuff 
    } 
} 
+0

'getItemMeta();'がNullを返すかどうかを確認してください。 –

+0

ありがとうございました。私の答えにそれを加えました。 – Mit0x2

0


ちょうどループのための必要はありませんJava7互換性の方法、のために別のアイデアを持っていました。プレーヤーが何も保持していない場合、getItemInHand()はnullを返します。また、アイテムにメタがない場合(これが可能かどうかは不明ですが、同じ行に同じエラーが発生しました)

関連する問題