アイテムのLoreを検知したい

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.271775)

アイテムのLoreを検知したい

投稿記事by まりもっこり!! » 2016年5月02日(月) 23:05

いま、プレイヤーが持っているアイテムのloreに~が書かれていたら処理を実行しないということをしたいのですが、
Player player = (Player)sender
ItemStack itm = player.getInventory().getItemInMainHand();
ItemMeta im = item.getItemMeta();
String lore = im.getLore();

if(!(lore.equals(~))){
処理}
これでやってみたのですが
指定方法が違うみたいで
やりたいことができません
誰かどのようにすればいいか教えてください
まりもっこり!!
ID:5e28647e
 

  • (PostNo.271984)

Re: アイテムのLoreを検知したい

投稿記事by youzuki » 2016年5月04日(水) 20:35

まりもっこり!! さんが書きました:いま、プレイヤーが持っているアイテムのloreに~が書かれていたら処理を実行しないということをしたいのですが、
Player player = (Player)sender
ItemStack itm = player.getInventory().getItemInMainHand();
ItemMeta im = item.getItemMeta();
String lore = im.getLore();

if(!(lore.equals(~))){
処理}
これでやってみたのですが
指定方法が違うみたいで
やりたいことができません
誰かどのようにすればいいか教えてください


LoreはList<String>ですので
lore.get(int);で一行ずつ取得しなければなりません
絵描きの人です。
https://twitter.com/Shiro_Youduki
アバター
youzuki
ID:78fec10d
石炭掘り
 
記事: 188
登録日時: 2013年10月10日(木) 20:28

  • (PostNo.271994)

Re: アイテムのLoreを検知したい

投稿記事by まりもっこり!! » 2016年5月04日(水) 21:42

Player player = (Player)sender;
ItemStack item = player.getInventory().getItemInMainHand();
ItemMeta meta = item.getItemMeta();
List<String> lore = meta.getLore();
String l1 = lore.get(1);

if(!(l1.equals("Test"))){
処理}
こうしてみましたが
内部エラーが出て
if(!(l1.equals("Test"))){
ここに問題があると言われました

理解できなくてすみません、、、
どうしたらいいでしょうか
まりもっこり!!
ID:f86fe74b
 

  • (PostNo.272009)

Re: アイテムのLoreを検知したい

投稿記事by youzuki » 2016年5月04日(水) 23:26

まりもっこり!! さんが書きました:Player player = (Player)sender;
ItemStack item = player.getInventory().getItemInMainHand();
ItemMeta meta = item.getItemMeta();
List<String> lore = meta.getLore();
String l1 = lore.get(1);

if(!(l1.equals("Test"))){
処理}
こうしてみましたが
内部エラーが出て
if(!(l1.equals("Test"))){
ここに問題があると言われました

理解できなくてすみません、、、
どうしたらいいでしょうか


それは一行目を検査してるのでしょうか
これはJavaの話になってしまいますが
配列は一個目は0となっていますので
一行目の場合lore.get(0);である必要があります
絵描きの人です。
https://twitter.com/Shiro_Youduki
アバター
youzuki
ID:78fec10d
石炭掘り
 
記事: 188
登録日時: 2013年10月10日(木) 20:28

  • (PostNo.272055)

Re: アイテムのLoreを検知したい

投稿記事by Hinyari_Gohan » 2016年5月05日(木) 10:39

youzuki さんが書きました:
まりもっこり!! さんが書きました:Player player = (Player)sender;
ItemStack item = player.getInventory().getItemInMainHand();
ItemMeta meta = item.getItemMeta();
List<String> lore = meta.getLore();
String l1 = lore.get(1);

if(!(l1.equals("Test"))){
処理}
こうしてみましたが
内部エラーが出て
if(!(l1.equals("Test"))){
ここに問題があると言われました

理解できなくてすみません、、、
どうしたらいいでしょうか


それは一行目を検査してるのでしょうか
これはJavaの話になってしまいますが
配列は一個目は0となっていますので
一行目の場合lore.get(0);である必要があります


>>内部エラーが出て
エラーを添付してください。

youzukiさんの仰ぐ通り、List配列の一つ目は0から始まります。
ので、配列の1を取得しても、実際は2行目が取得されていることになります。
Hinyari_Gohanで主に活動しております。
見かけた際はどうぞよろしく。
アバター
Hinyari_Gohan
ID:7cddf658
石掘り
 
記事: 92
登録日時: 2014年4月19日(土) 09:00

  • (PostNo.272058)

Re: アイテムのLoreを検知したい

投稿記事by まりもっこり!! » 2016年5月05日(木) 11:03

内部エラーです
[11:02:56 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'break' in plugin ItemBreakPlugin v1
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-e6f93f4-935f18b]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-e6f93f4-935f18b]
at org.bukkit.craftbukkit.v1_9_R1.CraftServer.dispatchCommand(CraftServer.java:645) ~[spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PlayerConnection.handleCommand(PlayerConnection.java:1350) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PlayerConnection.a(PlayerConnection.java:1185) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_79]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [?:1.7.0_79]
at net.minecraft.server.v1_9_R1.SystemUtils.a(SourceFile:45) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.MinecraftServer.D(MinecraftServer.java:721) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.DedicatedServer.D(DedicatedServer.java:400) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.MinecraftServer.C(MinecraftServer.java:660) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.MinecraftServer.run(MinecraftServer.java:559) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_79]
Caused by: java.lang.NullPointerException
at my.bre.breakplugin.ItemBreakEvent.onCommand(ItemBreakEvent.java:35) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-e6f93f4-935f18b]
... 15 more

35行目には
String l1 = lore.get(0);
があります
まりもっこり!!
ID:f86fe74b
 

  • (PostNo.272069)

Re: アイテムのLoreを検知したい

投稿記事by youzuki » 2016年5月05日(木) 12:51

まりもっこり!! さんが書きました:内部エラーです
[11:02:56 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'break' in plugin ItemBreakPlugin v1
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-e6f93f4-935f18b]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-e6f93f4-935f18b]
at org.bukkit.craftbukkit.v1_9_R1.CraftServer.dispatchCommand(CraftServer.java:645) ~[spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PlayerConnection.handleCommand(PlayerConnection.java:1350) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PlayerConnection.a(PlayerConnection.java:1185) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_79]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [?:1.7.0_79]
at net.minecraft.server.v1_9_R1.SystemUtils.a(SourceFile:45) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.MinecraftServer.D(MinecraftServer.java:721) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.DedicatedServer.D(DedicatedServer.java:400) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.MinecraftServer.C(MinecraftServer.java:660) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at net.minecraft.server.v1_9_R1.MinecraftServer.run(MinecraftServer.java:559) [spigot.jar:git-Spigot-e6f93f4-935f18b]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_79]
Caused by: java.lang.NullPointerException
at my.bre.breakplugin.ItemBreakEvent.onCommand(ItemBreakEvent.java:35) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-e6f93f4-935f18b]
... 15 more

35行目には
String l1 = lore.get(0);
があります


NullPointerが発生するとなるとLoreに一切何も記述されていないアイテムのLoreを取得してる時があるのでしょうか
何も記述されていないとLoreはnullを返しますので(ちなみにアイテムがないとアイテムもnull、アイテムメタもないとnullが返されるようです)
コード: 全て選択
if(lore != null){
//処理
}

とするか
コード: 全て選択
if(lore == null) return true(false); //nullであればtrue(false)を返してメソッドを抜ける

とすることによりnullを回避できるかと思います。
もしこの回答が違うのであればソースコードをはっていただけるとありがたいです
絵描きの人です。
https://twitter.com/Shiro_Youduki
アバター
youzuki
ID:78fec10d
石炭掘り
 
記事: 188
登録日時: 2013年10月10日(木) 20:28

  • (PostNo.272499)

Re: アイテムのLoreを検知したい

投稿記事by まりもっこり!! » 2016年5月11日(水) 13:43

返信遅れてすみません

皆さんに教えていただいたやり方を使って
無事解決することができました
ありがとうございました!!
まりもっこり!!
ID:f86fe74b
 


Return to 質問:開発・制作関連

x