2016-08-27 3 views
0

私は非常に新しいですMinecraftのプラグインで学習物事の過程で、開発。私は刑務所のプラグインに取り組んでおり、在庫がいっぱいであるかどうかをプレイヤーに知らせる方法を作りました。それは機能していないと私は理由を把握することはできません。 コード:プレイヤーのインベントリがいっぱいになった場合に見分ける方法 - Minecraftの

public void invFull(Player p) { 
     if (p.getInventory().contains(Material.AIR)) { 

     } else { 
      p.sendMessage(ChatColor.DARK_RED + "Your inventory is full!"); 
     } 
    } 
} 

ブール値を返す別のメソッドも作成しました。これも機能しません。 コード:

public boolean invFull(Player p) {   
     if (p.getInventory().contains(Material.AIR)) { 
      return false; 
     } else { 
      return true; 
     }   
} 
+0

どうしたらうまくいかないのですか? – Li357

+0

@ AndrewL.What私はプラグインのフォルダにプラグインをエクスポートし、サーバーをリロードします。それだけでは機能しません。必要なときにメッセージが表示されません。 – MrSanfrinsisco

+0

このメソッドをどのように使用していますか? 'if(invFull(insert_player)){//処理する、いっぱいにする} else {// not full}' – Li357

答えて

1

私はプレーヤーの在庫がMaterial.AIRが含まれていないことを問題は、あると思います。次のことを試してみてください。

public boolean invFull(Player p) {   
    return p.getInventory().firstEmpty() == -1;   
} 

私は現在、鎧のスロットが空の場合、このfirstEmpty()が失敗した場合は100%わからないんだけど、私は現在、これをテストすることはできません。そうであれば、別のオプションがあります:

public boolean invFull(Player p) {   
    return !Arrays.asList(p.getInventory().getStorageContents()).contains(null);   
} 
+0

。私。在庫は 'Material.AIR'(または他の' Material'!)を決して*含むことはありません! – Draco18s

+0

これは単に真実ではありません。 PlayerInventoryには(あなたがItemStacksと言ったように)含まれているので、あなたは正しいです。 PlayerInventoryは、インベントリインターフェイスを実装しています。これは、さまざまなパラメータに対してオーバーロードされるcontainsメソッドを提供します。そう確認[ '含有(素材)'](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/Inventory.html#contains(org.bukkit.Material))メソッドは、ありますマテリアルが提供されたタイプである場合、各ItemStackしかし、Material.AIRはPlayers Inventoryには決して置かれず、空のInventory SlotにはItemStacks - > nullがありません。 – Mit0x2

+0

それは、普遍的に真実ではないBukkitを使用する場合にのみ当てはまります。 – Draco18s

関連する問題