Помогите Способы сравнения DisplayName у Item'ов

konfyciu98

Старожил
Пользователь
Баллы
123
Имя в Minecraft
konfyciu
Вот способ, который я использую:
Код:
ItemStack pl_st = event.getPlayer().getInventory().getItemInHand();
ItemMeta pl_st_met = pl_st.getItemMeta();
if(pl_st_met.getDisplayName().equalsIgnoreCase(ChatColor.GOLD + "My Item")) {
//....
}
Но он кидает ошибку:
Код:
2014-03-06 21:24:59 [SEVERE] Could not pass event PlayerInteractEvent to Magica v1.0
org.bukkit.event.EventException
   at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
   at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
   at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
   at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:478)
   at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:463)
   at org.bukkit.craftbukkit.v1_6_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:207)
   at net.minecraft.server.v1_6_R3.PlayerInteractManager.interact(PlayerInteractManager.java:374)
   at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java:631)
   at net.minecraft.server.v1_6_R3.Packet15Place.handle(SourceFile:58)
   at org.spigotmc.netty.NettyNetworkManager.b(NettyNetworkManager.java:230)
   at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java:117)
   at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
   at org.spigotmc.netty.NettyServerConnection.b(NettyServerConnection.java:132)
   at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:594)
   at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:240)
   at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:483)
   at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:415)
   at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
Caused by: java.lang.NullPointerException
   at me.konfyciu.Magica.MagicaListener.onInteractEvent(MagicaListener.java:23)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
   ... 17 more

Есть еще способы проверить имя итема?
 
Не работает потому, что нужно проверять hasItemMeta().
 
Так?
Код:
(pl_st.hasItemMeta() == pl_st_met.getDisplayName().equalsIgnoreCase(ChatColor.GOLD + "My Item"))
Оно работает!
 
Так?
Код:
(pl_st.hasItemMeta() == pl_st_met.getDisplayName().equalsIgnoreCase(ChatColor.GOLD + "My Item"))
Оно работает!
Эм... Я даже не знаю, что и сказать... Вы сравниваете, есть ли meta с содержит ли она нужную строку?
 
Последнее редактирование:
Еще хочу заметить что если текст покрашен, то сравнивать надо либо с ChatColor + String либо обрезая первые 2 символа
 
Так?
Код:
(pl_st.hasItemMeta() == pl_st_met.getDisplayName().equalsIgnoreCase(ChatColor.GOLD + "My Item"))
Оно работает!


Вообще, по моему, логичнее так:
if (pl_st.hasItemMeta()&&pl_st_met.getDisplayName().equalsIgnoreCase(ChatColor.GOLD + "My Item")){....

По идее, в вашей конструкции может происходить обращение к pl_st_met, которая может быть null. Соответственно будет исключительная ситуация.
Еще хочу заметить что если текст покрашен, то сравнивать надо либо с ChatColor + String либо обрезая первые 2 символа
Он же может быть в середине раскрашен. Я вообще использую что-то вроде "&1Название итема&1&2&3&5" для того чтобы в наковальне простым переименованием не получить такого же итема (мало ли у кого разрешено цветные названия в наковальнях задавать).
 
Он же может быть в середине раскрашен. Я вообще использую что-то вроде "&1Название итема&1&2&3&5" для того чтобы в наковальне простым переименованием не получить такого же итема (мало ли у кого разрешено цветные названия в наковальнях задавать).
Гениальное, а главное, идеальное решение проблемы! Маленькие школьники даже не додумаются сделать такое, если даже в наковальне можно будет цветные названия задавать :)
 
Я вообще использую что-то вроде "&1Название итема&1&2&3&5" для того чтобы в наковальне простым переименованием не получить такого же итема (мало ли у кого разрешено цветные названия в наковальнях задавать).
Не понял задумки)
 
ql_Nik_lp, Задумка в том, что если у тебя убермеч, который позволяет летать, вызывать молнии и ругаться матом называется "&4Пупер-меч&1&2&4&5", то игрок, который увидит такой и решит назвать переименовать свой меч в "&4Пупер-меч" получит меч у которого нет "кода" в имени и он не сможет летать, вызывать молнии и ругаться матом :)
 
ql_Nik_lp, Задумка в том, что если у тебя убермеч, который позволяет летать, вызывать молнии и ругаться матом называется "&4Пупер-меч&1&2&4&5", то игрок, который увидит такой и решит назвать переименовать свой меч в "&4Пупер-меч" получит меч у которого нет "кода" в имени и он не сможет летать, вызывать молнии и ругаться матом :)
*БРАВО* *ВСЕ ХЛОПАЮТ РУКАМИ*
 
ql_Nik_lp, Задумка в том, что если у тебя убермеч, который позволяет летать, вызывать молнии и ругаться матом называется "&4Пупер-меч&1&2&4&5", то игрок, который увидит такой и решит назвать переименовать свой меч в "&4Пупер-меч" получит меч у которого нет "кода" в имени и он не сможет летать, вызывать молнии и ругаться матом :)
А как же Lore?
 
ql_Nik_lp, Задумка в том, что если у тебя убермеч, который позволяет летать, вызывать молнии и ругаться матом называется "&4Пупер-меч&1&2&4&5", то игрок, который увидит такой и решит назвать переименовать свой меч в "&4Пупер-меч" получит меч у которого нет "кода" в имени и он не сможет летать, вызывать молнии и ругаться матом :)
Вот плюсую.
Всегда использовал для этой цели строку в lore покрашенную в черный цвет
 
А я лентяй. Я его не использую пока ;)

Ну и кроме того, иногда может потребоваться, чтобы Lore не было в наличии. Есть два предмета с виду обычные, но один - от плагина, а второй - стандартный.
 
А я лентяй. Я его не использую пока ;)

Ну и кроме того, иногда может потребоваться, чтобы Lore не было в наличии. Есть два предмета с виду обычные, но один - от плагина, а второй - стандартный.
Прятать лору за пакетами:lol::lol::lol:
 
Вообще, по моему, логичнее так:
if (pl_st.hasItemMeta()&&pl_st_met.getDisplayName().equalsIgnoreCase(ChatColor.GOLD + "My Item")){....
Я сделал так, но именно на проверку консоль кидает ошибку
Код:
if(event.getPlayer().getItemInHand().hasItemMeta() && event.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GOLD +"Itemmorger"+ChatColor.RED))

Код:
org.bukkit.event.EventException
   at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
   at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
   at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
   at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:478)
   at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:463)
   at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java:1125)
   at net.minecraft.server.v1_6_R3.Packet7UseEntity.handle(SourceFile:36)
   at org.spigotmc.netty.NettyNetworkManager.b(NettyNetworkManager.java:230)
   at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java:117)
   at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
   at org.spigotmc.netty.NettyServerConnection.b(NettyServerConnection.java:132)
   at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:594)
   at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:240)
   at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:483)
   at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:415)
   at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
Caused by: java.lang.NullPointerException
   at me.konfyciu.Itemmorger.Itemmorger.onInteractEntity(Passenger.java:55)
   at sun.reflect.GeneratedMethodAccessor329.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
   ... 15 more
 
Назад
Верх