1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем konfyciu98, 6 мар 2014.

  1. Автор темы
    konfyciu98

    konfyciu98 Старожил Пользователь

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в 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
    

    Есть еще способы проверить имя итема?
     
  2. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Не работает потому, что нужно проверять hasItemMeta().
     
  3. Автор темы
    konfyciu98

    konfyciu98 Старожил Пользователь

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Так?
    Код:
    (pl_st.hasItemMeta() == pl_st_met.getDisplayName().equalsIgnoreCase(ChatColor.GOLD + "My Item"))
    Оно работает!
     
  4. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Эм... Я даже не знаю, что и сказать... Вы сравниваете, есть ли meta с содержит ли она нужную строку?
     
    Последнее редактирование: 6 мар 2014
  5. Автор темы
    konfyciu98

    konfyciu98 Старожил Пользователь

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Да и работает!!!!!
    Это магия :ninja:
     
  6. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Ну... Ладно... Если вы так хотите, то пожалуйста.
    А вообще надо как-то так:

    Код:
    if(i.hasItemMeta()){
    if(i.getItemMeta().getDisplayName().equals("yourstring")){
    //code
    }
    }
     
    konfyciu98 нравится это.
  7. Автор темы
    konfyciu98

    konfyciu98 Старожил Пользователь

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Возьму оба способа :D
     
  8. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Еще хочу заметить что если текст покрашен, то сравнивать надо либо с ChatColor + String либо обрезая первые 2 символа
     
  9. Автор темы
    konfyciu98

    konfyciu98 Старожил Пользователь

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Это я знаю.
     
  10. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate

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

    По идее, в вашей конструкции может происходить обращение к pl_st_met, которая может быть null. Соответственно будет исключительная ситуация.
    Он же может быть в середине раскрашен. Я вообще использую что-то вроде "&1Название итема&1&2&3&5" для того чтобы в наковальне простым переименованием не получить такого же итема (мало ли у кого разрешено цветные названия в наковальнях задавать).
     
    Hephest и JustBlender нравится это.
  11. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Гениальное, а главное, идеальное решение проблемы! Маленькие школьники даже не додумаются сделать такое, если даже в наковальне можно будет цветные названия задавать :)
     
  12. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Не понял задумки)
     
  13. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    ql_Nik_lp, Задумка в том, что если у тебя убермеч, который позволяет летать, вызывать молнии и ругаться матом называется "&4Пупер-меч&1&2&4&5", то игрок, который увидит такой и решит назвать переименовать свой меч в "&4Пупер-меч" получит меч у которого нет "кода" в имени и он не сможет летать, вызывать молнии и ругаться матом :)
     
    serega6531 нравится это.
  14. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    *БРАВО* *ВСЕ ХЛОПАЮТ РУКАМИ*
     
  15. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А как же Lore?
     
    ПриветОтЛайки, fromgate и ql_Nik_lp нравится это.
  16. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Вот плюсую.
    Всегда использовал для этой цели строку в lore покрашенную в черный цвет
     
  17. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    А я лентяй. Я его не использую пока ;)

    Ну и кроме того, иногда может потребоваться, чтобы Lore не было в наличии. Есть два предмета с виду обычные, но один - от плагина, а второй - стандартный.
     
  18. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Прятать лору за пакетами:lol::lol::lol:
     
    Hephest, fromgate и ql_Nik_lp нравится это.
  19. Автор темы
    konfyciu98

    konfyciu98 Старожил Пользователь

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Я сделал так, но именно на проверку консоль кидает ошибку
    Код:
    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
    
     
  20. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    А hasDisplayName() где?
     

Поделиться этой страницей