Вопрос Как проверить является ли убийца Entity игроком?

Версия Minecraft
1.16.X

SacDos

Пользователь
Сообщения
101
Разрешается выкладывание кода, файлов конфигураций, логов и т.д. только под BB-код CODE
Привет, может ли кто-то подсказать как проверить убийцу любого Entity на игрока? (Ивент EntityDamageByEntityEvent)
Вот моя проверка, но она не работает и бьет ошибку в консоль
Entity EntityKiller = q.getEntity().getKiller();
if (EntityKiller instanceof Player)
Вот ошибка с консоли
Код:
[14:04:15 ERROR]: Could not pass event EntityDeathEvent to TestPlugin v1.0-SNAPSHOT[/COLOR][/SUB]
[COLOR=rgb(226, 80, 65)][SUB]java.lang.NullPointerException: Cannot invoke "org.bukkit.entity.Entity.getName()" because "EntityKiller" is null[/SUB]
[SUB]        at org.quenna.quenna.MoneyFromMobs.MobKillEvent(MoneyFromMobs.java:19) ~[?:?][/SUB]
[SUB]        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor772.execute(Unknown Source) ~[?:?][/SUB]
[SUB]        at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory.callEntityDeathEvent(CraftEventFactory.java:862) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityLiving.d(EntityLiving.java:1643) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityLiving.die(EntityLiving.java:1561) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityLiving.damageEntity(EntityLiving.java:1389) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityInsentient.damageEntity(EntityInsentient.java:347) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityBat.damageEntity(EntityBat.java:276) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.Entity.entityBaseTick(Entity.java:635) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityLiving.entityBaseTick(EntityLiving.java:368) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityInsentient.entityBaseTick(EntityInsentient.java:316) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.Entity.tick(Entity.java:592) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityLiving.tick(EntityLiving.java:2614) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityInsentient.tick(EntityInsentient.java:404) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.EntityBat.tick(EntityBat.java:162) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.WorldServer.entityJoinedWorld(WorldServer.java:1512) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.World.a(World.java:1072) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.WorldServer.doTick(WorldServer.java:1138) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.MinecraftServer.b(MinecraftServer.java:1567) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:449) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1416) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1142) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:293) ~[patched_1.16.5.jar:git-Purpur-1171][/SUB]
[SUB]        at java.lang.Thread.run(Thread.java:831) [?:?]
 
Последнее редактирование модератором:
Entity EntityKiller = q.getEntity().getKiller();

Добавь после проверки

Java:
//Entity EntityKiller = q.getEntity().getKiller();
if (q.getEntity().getKiller() instanceof Player killer){
    Entity EntityKiller = q.getEntity().getKiller();
}
 
Последнее редактирование:
Entity EntityKiller = q.getEntity().getKiller();

Добавь после проверки

Java:
//Entity EntityKiller = q.getEntity().getKiller();
if (q.getEntity().getKiller() instanceof Player killer){
    Entity EntityKiller = q.getEntity().getKiller();
}
а что означает instanceof Player killer
 
Entity EntityKiller = q.getEntity().getKiller();

Добавь после проверки

Java:
//Entity EntityKiller = q.getEntity().getKiller();
if (q.getEntity().getKiller() instanceof Player killer){
    Entity EntityKiller = q.getEntity().getKiller();
}
Java:
package org.quenna.quenna;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;

public class MoneyFromMobs implements Listener {

@EventHandler
    public void MobKillEvent(EntityDeathEvent q) {
            Entity Mob = q.getEntity();
if (q.getEntity().getKiller() instanceof Player) {
            Entity EntityKiller = q.getEntity().getKiller();
if (!(Mob instanceof Player)) ;
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "money give " + EntityKiller.getName() + " 25");
EntityKiller.sendMessage(ChatColor.GOLD + "Вы получили 25 монет за убийство " + Mob.getType());
        }
    }
}
 
Java:
    @EventHandler
    public void onKillEntity(EntityDeathEvent event){
        if(event.getEntity().getKiller() == null)
            return;
       
        if(event.getEntity().getKiller() instanceof Player player){
            Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "money give " + player.getName() + " 25");
            player.sendMessage(ChatColor.GOLD + "Вы получили 25 монет за убийство " + event.getEntity().getName());
        }
       
    }
Объединено

а что означает instanceof Player killer
Проверяю, если убийца игрок - создаю объект игрока и присваиваю ему имя killer
 
Последнее редактирование:
Java:
    @EventHandler
    public void onKillEntity(EntityDeathEvent event){
        if(event.getEntity().getKiller() == null)
            return;
      
        if(event.getEntity().getKiller() instanceof Player player){
            Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "money give " + player.getName() + " 25");
            player.sendMessage(ChatColor.GOLD + "Вы получили 25 монет за убийство " + event.getEntity().getName());
        }
      
    }
Объединено


Проверяю, если убийца игрок - создаю объект игрока и присваиваю ему имя killer
У меня всё равно не работает, но решил я это так. я поставил проверку на разрешение и выдал группе default это разрешение.
 
У меня всё равно не работает, но решил я это так. я поставил проверку на разрешение и выдал группе default это разрешение.
offtop Самые ужасные костыли, которые я когда-либо видел
 
ну, а что ты мне предлагаешь если не работает? да и в целом не так все плохо, работает как надо
Первое, что я предлагаю - не сидеть с двух аккаунтов на форуме.
Второе - когда что-то не работает, надо не просто писать "у меня не работает", надо прикладывать ошибки, которые вы получаете в ходе работы. Иначе как вам помогут, никто ж не знает, что у вас там конкретно не получается сделать.
 
Первое, что я предлагаю - не сидеть с двух аккаунтов на форуме.
Второе - когда что-то не работает, надо не просто писать "у меня не работает", надо прикладывать ошибки, которые вы получаете в ходе работы. Иначе как вам помогут, никто ж не знает, что у вас там конкретно не получается сделать.
в самом начале темы указал ошибку, она ни разу не изменилась с того момента как я пытался использовать решения других людей, а если бы что-то и изменилось, я бы написал.
 
в самом начале темы указал ошибку, она ни разу не изменилась с того момента как я пытался использовать решения других людей, а если бы что-то и изменилось, я бы написал.
У вас вопрос один, а ошибка другая. В вопросе вы пишите про EntityDamageByEntityEvent, но в ошибке речь идёт про EntityDeathEvent.
Ошибка, что убийца null свидетельствует о том, что сущность умерла не от рук убийцы, а от чего-то иного (утонула, сгорела в огне/лаве и т.д. и т.п.).
 
У вас вопрос один, а ошибка другая. В вопросе вы пишите про EntityDamageByEntityEvent, но в ошибке речь идёт про EntityDeathEvent.
Ошибка, что убийца null свидетельствует о том, что сущность умерла не от рук убийцы, а от чего-то иного (утонула, сгорела в огне/лаве и т.д. и т.п.).
так потому что я изначально и писал про EntityDeathEvent, после редактированию тобой моей темы ивент резко изменился.
 
после редактированию тобой моей темы ивент резко изменился
offtop Ну, вообще нет, не трогал ивенты, обвинять меня в этом не стоит.

Вам необходимо зарегистрироваться для просмотра изображений-вложений



Ещё раз проверьте работу кода из этого сообщения: You must be logged in to see this link.
Он полностью рабочий, там не должно быть такой ошибки, которую вы оставили в своём первом сообщении.
 
offtop Ну, вообще нет, не трогал ивенты, обвинять меня в этом не стоит.

Вам необходимо зарегистрироваться для просмотра изображений-вложений



Ещё раз проверьте работу кода из этого сообщения: You must be logged in to see this link.
Он полностью рабочий, там не должно быть такой ошибки, которую вы оставили в своём первом сообщении.
offtop Извини за то что обвинил просто так и да, тоже моя проблема, что оставил не тот ивент

Код который оставлял Hahatyn в тот момент у меня не работал, у меня не давало закомпилить плагин, сейчас тему я закрыл т.к. уже решил эту проблему с помощью "костыля" в виде разрешения. Спасибо, что грамотно объяснил в чём я не прав.
 
Назад
Сверху Снизу