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

Помогите Возможно ли сверить тип моба?

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

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

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Должно быть что-то типо такого:
    Код:
    @EventHandler
       public void onInteractEntity(PlayerInteractEntityEvent event) {
         EntityType entity = event.getRightClicked().getType();
            {
             if(entity instanceof Cow) {
               //blabla
             }
         }
       }
    
    Возможно ли это в этом обработчике событий?
    Просто в PlayerDeathEvent есть getDamager и getKiller, которые относятся к классу Player(killer instanceof Player). А вот в PlayerInteractEntityEvent можно ли определить класс энтити?
     
  2. StealerSlain

    StealerSlain Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    StealerSlain
    Тебе именно instanceof нужно использовать? Можно же через EntityType проверить.
    И вот скорее правильный код:
    Код:
    @EventHandler
      public void onInteractEntity(PlayerInteractEntityEvent event) {
        Entity e = event.getEntity();
            {
            if(e instanceof Cow) {
              //blabla
            }
        }
      }
    
    Вот с EntityType
    Код:
    @EventHandler
      public void onInteractEntity(PlayerInteractEntityEvent event) {
        EntityType eType = event.getEntity().getType();
            {
            if(eType == EntityType.COW) {
              //blabla
            }
        }
      }
    
     
    MrSharky, musel70 и Shockwave нравится это.
  3. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Это я уже использую, но кидает ошибку иногда.
     
  4. StealerSlain

    StealerSlain Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    StealerSlain
    какую?
     
  5. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Код:
    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.Passenger.Passenger.onInteractEntity(Passenger.java:55)
       at sun.reflect.GeneratedMethodAccessor326.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

    А первый твой способ не робит, ибо можно определить только Type и id энтити.
     
  6. JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Может первый не работает, потому что ты в entity и тип его еще получаешь?! Удали это и будет все хорошо. :confused:
     
  7. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Что? Я ничего не понял.
    Вот мой код. Ошибку выдает на if( entity == EntityType.SPIDER)
    Код:
      @EventHandler
       public void onInteractEntity(PlayerInteractEntityEvent event) {
         EntityType entity = event.getRightClicked().getType();
            {
             if( entity == EntityType.SPIDER) {
               //blooo
             }
         }
       }
    
    А я хочу сверять тип Entity через instanceof
     
  8. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Сверять-то можно и при помощи instanceof, только зачем? Насколько я помню instanceof очень медленный оператор по сравнению со сравнением enum'ов. Понятно, что с точки зрения нынешних производительностей и мощностей это фигня, но даже чисто с эстетической точки зрения конструкция entity.getType()==EnityType.SPIDER симпатичнее чем entity instanceof Spider (ну или как там класс паучинный называется ;))
     
    konfyciu98 и JustBlender нравится это.
  9. Автор темы
    konfyciu98

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

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Я решил попробовать такой метод, ибо хочу убрать эту ошибку.
    Может он поможет, может не поможет...хз
     
  10. BeYkeR

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

    Баллы:
    173
    Код:
    @EventHandler
      public void onInteractEntity(PlayerInteractEntityEvent event) {
        Entity entity = event.getRightClicked();
         
            if(entity instanceof Cow) {
              Cow cow = (Cow) entity;
              cow.getWorld().createExplosion(cow.getLocation(), 10);
            }
     
      }
    Не люблю пользоваться EntityType , так как там в нужный момент нету LivingEntity и приходится все прописывать в ручную.
     
    Последнее редактирование: 22 мар 2014
    Gentalion, MrSharky и konfyciu98 нравится это.
  11. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Для людей, использующих instanceof в аду есть отдельный котел.
     
    Gentalion нравится это.
  12. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    С чего бы это?
    instanceof на HotSpotVM между прочим очень быстрая операция.

    А типы лучше не сравнивать если вы не знаете кода всех остальных плагинов которые стоят у вас, а также если вы работаете на mcpc+, потому что тут запросто пожет оказаться что getType вернёт null или что ещё похуже(Привет всем плагинам который использовали какой-то древний гайд для создания кастомных энтитей. Там getType возвращал null)
     
    Последнее редактирование: 26 мар 2014
    serega6531, Den_Abr и JustBlender нравится это.
  13. Sirse

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

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    Может коровку стоит перед этим убить?
     
  14. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А зачем? Когда у кого-то бомбит, он же не исчезает:lol::lol::lol:
     
    musel70 и Jampire нравится это.
  15. Sirse

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

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    А если этот кто-то забафаан или в привате, то при каждом клике у кого-то будет бомбить :D
     
    Den_Abr нравится это.
  16. Gentalion

    Gentalion Активный участник Пользователь

    Баллы:
    93
    Имя в Minecraft:
    Gentalion
    Можно поместить их в 9 круг ада (по Данте) вместе с отступниками.
     
  17. JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Не так уж instanceof и плох. EntityType может выдавать иногда null.
     
  18. ptnk

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

    Баллы:
    173
    И как же, к примеру проверить, что определённый объект реализует интерфейс или наследует определённый класс, если метода\поля, который явно указывал бы на тип объекта нет?
    Делать приведение и заворачивать в try-catch? В эту самую тормозную операцию?

    Если имеется нужна в использовании instanceof - ооп используется не правильно.
     
  19. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    На этот случай есть ещё isAlive() у EntityType. А по поводу instanceof в PlayerInteractEvent -- есть безусловно те случаи, когда без этого не обойтись, но я не считаю что это тот самый случай. Для MCPC+ тут можно и по другому пути пойти, хотя эта ситуация напоминает мне ситуацию с событиями, когда моды их не кидают.
     

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