Отправлять пакет при заходе на сервер.

Версия Minecraft
1.7.10
Суть в чём: я решил практически все проблемы с посадкой ентити на сервере. Но т.к сделано это через пакеты то ентити спавнится и плеер садится только у тех игроков которые уже были на сервере в момент когда он садился. Как сделать что бы этот пакет отправлялся тем игрокам, которые его не получили, пока сущность жива и игрок сидит на ней?
 
3,005
192
592
Точно такой же ответ, как в прошлой теме, ты можешь это найти в лодке.
Потому что в лодке тоже игрок может сидеть и новый игрок будет видеть, кто сидит в лодке.
 
Я смотрю код лодки и не понимаю. Там нет никаких пакетов, но игрок сидит у всех. А у меня без всяких проверок получается тоже самое что тут. И решаю я это как тимаха пакетами. В чё может быть тогда проблема. Если должно работать и без них.
Это метод спавна стула и посадки на него игрока (без проверки и отправки пакетов):
@Override
    public boolean interactFirst(EntityPlayer player)
    {
        if(player.isSneaking())
        {
            if(this.worldObj.isRemote)
            {
                player.openGui(RTM.instance, RTM.instance.guiIdSelectEntityModel, player.worldObj, this.getEntityId(), 0, 0);
            }
            return true;
        } else
        {
            if(this.getModelSet().getConfig().vagon != null)
            {
                float[] pos = this.getModelSet().getConfig().vagon[0].pos;
                   
                EntitySeat seat = new EntitySeat(this.worldObj, this, pos);
                this.worldObj.spawnEntityInWorld(seat);
                player.mountEntity(seat);
               
                return true;
            }
            else
            {
                NGTLog.sendChatMessage(player, "message.train.noVagon");
            }
        }
       
        return false;
    }
 
Проблема кажется решена. Добавил проверку на сторону сервера. И все обращения к миру делаю через игрока. Плеер сидит у всех.
Как то так:
if(!player.worldObj.isRemote)
{
        if(this.getModelSet().getConfig().vagon != null)
        {
        float[] pos = this.getModelSet().getConfig().vagon[0].pos;
                    
        EntitySeat seat = new EntitySeat(player.worldObj, this, pos);
        player.worldObj.spawnEntityInWorld(seat);
        
        player.mountEntity(seat);
    }
}
 
Как сглазил. 2X не понимаю только что тестил с 4 клиентами на сервере. И у всех сидел причём при заходе на сервер это так же было видно. После перезапуска старые добрые проблемы того что плеер не садится. :D Тема не закрыта!
 
Ну типо хочется иметь возможность сажать несколько игроков. И тот кто садиться на вагон тот им управляет. Поэтому мне и не пришло в голову ничего лучше чем спавнить новую сидуху и убивать ее когда игрок ссаживается.
 
7,099
324
1,509
Логика синхронизации лодка там же, где и для всех остальных энтити. Где - не знаю, но этот код вынесен чтобы избежать дублирования.
Чтобы своя сущность также синхронизировалась видимо нужно сделать ее с использованием тех же механизмов, что и ванильные
 
Я дико извиняюсь, проблема найдена. Всё по тому что я ошибся в он апдейт и это всё ломало. Да механизм синхронизации я так понял уже есть в ентити и теперь всё нормально и работает без пакетов. Ура. Всем спасибо большое. P.S таким образом для того что бы всё было нормально надо что бы сущность просто наследовалась от майновской, а там синхра уже есть
 
Сверху