Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Разработка плагинов для новичков' started by konfyciu98, Mar 21, 2014.

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

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

    Trophy Points:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Должно быть что-то типо такого:
    Code:
    @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. Хостинг MineCraft
    <
  3. StealerSlain

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

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

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

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

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

    Trophy Points:
    88
    Имя в Minecraft:
    StealerSlain
    какую?
     
  6. Автор темы
    konfyciu98

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

    Trophy Points:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Code:
    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
    [DOUBLEPOST=1395425590,1395425433][/DOUBLEPOST]А первый твой способ не робит, ибо можно определить только Type и id энтити.
     
  7. JustBlender

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

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

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

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

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

    Trophy Points:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Я решил попробовать такой метод, ибо хочу убрать эту ошибку.[DOUBLEPOST=1395431842,1395431811][/DOUBLEPOST]Может он поможет, может не поможет...хз
     
  10. BeYkeR

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

    Trophy Points:
    173
    Code:
    @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 и приходится все прописывать в ручную.
     
    Last edited: Mar 22, 2014
    Gentalion, MrSharky and konfyciu98 like this.
  11. Jampire

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

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

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

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

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

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

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

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А зачем? Когда у кого-то бомбит, он же не исчезает:lol::lol::lol:
     
    musel70 and Jampire like this.
  15. Sirse

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

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

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

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

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

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

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

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

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

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

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

Share This Page