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

Помогите Как убрать ошибку когда бьёт игрок а не интити?

Тема в разделе "Разработка плагинов для новичков", создана пользователем ItsWay, 16 июн 2022.

Статус темы:
Закрыта.
  1. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Пишу плагин, набрасал немного кода, надо так что бы отправлялось сообщение игроку когда он бьёт entity, всё работает. Но когда игрок бьёт entity всё ок, а когда какой то entity бьёт игрока выдаёт ошибку, конечно я понял что это иза того что нельзя отправить сообщение. Вот код:

    Код:
        @EventHandler
        public void onEntityDamage(EntityDamageByEntityEvent event){
        Player damager = (Player) event.getDamager();
        if(event.getDamager() instanceof Player) {
            LivingEntity damaged = (LivingEntity) event.getEntity();
            damager.sendMessage("hit target " + damaged.getEntityId() + "!");
        }else if(event.getDamager() instanceof Entity) {
            
        }
        }
    Это первая версия.
    вторая версия:

    Код:
        @EventHandler
        public void onEntityDamage(EntityDamageByEntityEvent event){
        Player damager = (Player) event.getDamager();
        if(event.getDamager() instanceof Player) {
            LivingEntity damaged = (LivingEntity) event.getEntity();
            damager.sendMessage("hit target " + damaged.getEntityId() + "!");
        }
        }
    Третья версия до того как сделал проверку:

    Код:
        @EventHandler
        public void onEntityDamage(EntityDamageByEntityEvent event){
        Player damager = (Player) event.getDamager();
            LivingEntity damaged = (LivingEntity) event.getEntity();
            damager.sendMessage("hit target " + damaged.getEntityId() + "!");
        }
    Нечего не изменяет, так же ошибка когда entity бьёт игрока, вот ошибка:
    Could not pass event EntityDamageByEntityEvent to CorePo1 v0.1
    org.bukkit.event.EventException: null
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEvent(CraftEventFactory.java:251) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:980) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:867) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:823) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:1012) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity0(EntityLiving.java:1861) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityHuman.damageEntity0(EntityHuman.java:922) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity(EntityLiving.java:1238) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityHuman.damageEntity(EntityHuman.java:839) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityPlayer.damageEntity(EntityPlayer.java:848) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityInsentient.attackEntity(EntityInsentient.java:1547) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityZombie.attackEntity(EntityZombie.java:345) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.PathfinderGoalMeleeAttack.a(SourceFile:142) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.PathfinderGoalMeleeAttack.e(SourceFile:134) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.PathfinderGoalZombieAttack.e(SourceFile:28) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.PathfinderGoalWrapped.e(SourceFile:55) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[?:?]
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[?:?]
    at java.util.Iterator.forEachRemaining(Iterator.java:133) ~[?:?]
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) ~[?:?]
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[?:?]
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[?:?]
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?]
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?]
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
    Что делать?
     
  2. Sturm_PT

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

    Баллы:
    76
    Перед кастом в игрока проверяй event.getDamager()! = null
     
  3. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    каст это что?
     
  4. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Я сделал так:

    Код:
        @EventHandler
        public void onEntityDamage(EntityDamageByEntityEvent event){
        Player damager = (Player) event.getDamager();
        if(event.getDamager() instanceof Player) {
            if(!(event.getDamager() == null) ) {
                LivingEntity damaged = (LivingEntity) event.getEntity();
                damager.sendMessage("hit target " + damaged.getEntityId() + "!");
            }
        }
        }
     
  5. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Такая же ошибка
     
  6. Sturm_PT

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

    Баллы:
    76
    Возьми код, который был изначально, и первой строкой засунь if (e.getDamager() == null) return;
     
  7. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    спасибо, ща чекну
     
  8. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    вот ошибка такая-же
    Could not pass event EntityDamageByEntityEvent to CorePo1 v0.1
    org.bukkit.event.EventException: null
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEvent(CraftEventFactory.java:251) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEntityDamageEvent(CraftEventFactory.java:980) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:867) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleEntityDamageEvent(CraftEventFactory.java:823) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.handleLivingEntityDamageEvent(CraftEventFactory.java:1012) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity0(EntityLiving.java:1861) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityHuman.damageEntity0(EntityHuman.java:922) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity(EntityLiving.java:1238) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityHuman.damageEntity(EntityHuman.java:839) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityPlayer.damageEntity(EntityPlayer.java:848) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityInsentient.attackEntity(EntityInsentient.java:1547) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.EntityZombie.attackEntity(EntityZombie.java:345) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.PathfinderGoalMeleeAttack.a(SourceFile:142) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.PathfinderGoalMeleeAttack.e(SourceFile:134) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.PathfinderGoalZombieAttack.e(SourceFile:28) ~[server.jar:3096a-Spigot-9fb885e-af1a232]
    at net.minecraft.server.v1_16_R3.PathfinderGoalWrapped.e(SourceFile:55) ~[server.jar:3096a-Spigot-9fb885e-af1a232]

    код:

    Код:
        public void onEntityDamage(EntityDamageByEntityEvent event){
             if (event.getDamager() == null) return;
        Player damager = (Player) event.getDamager();
            LivingEntity damaged = (LivingEntity) event.getEntity();
            damager.sendMessage("hit target " + damaged.getEntityId() + "!");
        }
    Так -же
     
  9. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    И да, плагин и сервер на 1.16.5
     
  10. Sturm_PT

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

    Баллы:
    76
    Сори, я, как обычно, лезу, не прочитав тему
    С энтити всё не ок, потому что ты пытаешься кастить его в игрока

    Код:
    @EventHandler
    public void myMethod(EntityDamageByEntityEvent e) {
      Entity ent = e.getDamager();
      if (ent instanceof Player) {
        //тут делаем что-то, если ударил игрок
      }
      else {
        //а тут - если ударил не игрок
      }
    }
    п.с. прикладывай в следующий раз полный лог ошибки, а то читать текст в теме полностью не прикалывает
     
  11. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Ок, ща чекну, спасибо
     
  12. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Большое тебе спасибо. Заработало, ошибок нет, удачи тебе. Тема закрыта.
     
Статус темы:
Закрыта.

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