как получить EntityPlayerMP из LivingUpdateEvent

Версия Minecraft
1.7.10
235
3
21
у меня есть ивент, который регается только на серверной стороне

onEntityUpdate:
@SubscribeEvent
public void onEntityUpdate(LivingUpdateEvent e)
{
    if(e.entityLiving instanseof EntityPlayer)
    {
        EntityPlayer player = (EntityPlayer)e.entityLiving;
    }
}

как получить отсюда EntityPlayerMP чтобы отправить ему пакет, просто закастовать не получилось

краш при кастовании:
java.lang.ClassCastException: net.minecraft.client.entity.EntityClientPlayerMP cannot be cast to net.minecraft.entity.player.EntityPlayerMP
    at ru.Pa4ok.mod.events.PropsUpdateEvent.onEntityUpdate(PropsUpdateEvent.java:308) ~[PropsUpdateEvent.class:?]
 
Решение
if(e.entityLiving instanseof EntityPlayer)
Потому что ты проверяешь что игрок - EntityPlayer и все, ничего более.
Если будет сервер игрок - он наследует EntityPlayer - значит проверка сработает.
Если будет клиент игрок - он ТОЖЕ наследует EntityPlayer - значит проверка сработает.
Если ты будешь проверять СРАЗУ EntityPlayerMP, то на сервер игрока проверка сработает, а на клиент игрока нет, потому что клиент игрок НЕ наследует этот класс.

~~~

только в CommonProxy
Коммон - это И сервер И клиент.
7,099
324
1,510
Java:
@SubscribeEvent
public void onEntityUpdate(LivingUpdateEvent e)
{
    if(e.entityLiving instanseof EntityPlayerMP)
    {
        EntityPlayerMP player = (EntityPlayerMP)e.entityLiving;
    }
}
 
235
3
21
тут я вернусь к 1 сообщению, ивент зареган только на серверной стороне
я для СВОЕГО удобства разделил регистрацию ивентов, и регаю отдельно через ClientProxy и CommonProxy


EventRegister:
public class EventRegister
{
    public static void registerEvents()
    {
       
    }
   
    public static void registerOnlyServerEvents()
    {
        MinecraftForge.EVENT_BUS.register(new PropertyRegister());
        MinecraftForge.EVENT_BUS.register(new PropsUpdateEvent());
        FMLCommonHandler.instance().bus().register(new LavaSourceDestroyEvent());
    }
   
    public static void registerOnlyClientEvents()
    {
        MinecraftForge.EVENT_BUS.register(new TextHUDRender());
        FMLCommonHandler.instance().bus().register(new ArmorStatusHUDRender());
        FMLCommonHandler.instance().bus().register(new KeyBindsEvent());
        MinecraftForge.EVENT_BUS.register(new RenderPlayerEvent());
    }
}
 

Icosider

Kotliner
Администратор
3,603
99
664
Что ты мне тут затираешь про серверную часть, когда у тебя явно написано в краше:
net.minecraft.client.entity.EntityClientPlayerMP, данный класс по определению не может быть на сервере.

Покажи свои классы прокси.
 
3,005
192
592
if(e.entityLiving instanseof EntityPlayer)
Потому что ты проверяешь что игрок - EntityPlayer и все, ничего более.
Если будет сервер игрок - он наследует EntityPlayer - значит проверка сработает.
Если будет клиент игрок - он ТОЖЕ наследует EntityPlayer - значит проверка сработает.
Если ты будешь проверять СРАЗУ EntityPlayerMP, то на сервер игрока проверка сработает, а на клиент игрока нет, потому что клиент игрок НЕ наследует этот класс.

~~~

только в CommonProxy
Коммон - это И сервер И клиент.
 
3,005
192
592
Сверху