Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Способы сравнения DisplayName у 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
Сделай проверку на предмет в руке.
 
Сделай проверку на предмет в руке.

И на мой взгляд лучше не делать это всё в одну строку, а примерно так:
Код:
public boolean isRequiredItemInHand(Player player){
      if (player.getItemInHand() == null) return false;
      ItemStack item = player.getItemInHand();
      if (item.getType()!=Material.НУЖНЫЙ_ТИП) return false;
      if (!item.hasItemMeta()) return false;
      if (!item.getItemMeta().hasDisplayName()) return false;
      return item.getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GOLD +"Itemmorger"+ChatColor.RED);
}

Ну и потом просто вызывать соответствующий метод.
Понятно, что его можно сделать более универсальным, но по крайней мере если где-то вылезет ошибка (тот же NULL) то будет явно видно в какой строке.

Вообще я в последнее время всё чаще склоняюсь к таким конструкциям. А то иногда открываешь старый код, а там десятиэтажное условие в if — пойди пойми что ты там сравниваешь и верная ли конструкция в целом.
 
Назад
Верх