[1.6.4] получение игрока в рендере имени

435
1
Нужно получить игрока на сервере по нику. MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername не подходит - говорит что MinecraftServer.getServer() null.
[merge_posts_bbcode]Добавлено: 22.08.2015 19:28:58[/merge_posts_bbcode]

Игрока нужно получить в RenderPlayer (наследует апишный RenderPlayerBase)

[merge_posts_bbcode]Добавлено: 22.08.2015 19:34:00[/merge_posts_bbcode]

Получать надо в методе afterPassSpecialRender (там есть EntityLivingBase, но полученный оттуда ExtendedProperties содержит только стандартные значения).
 
И пытаешься получить доступ к серверу с клиента, сразу видно понимание всего процесса синхронизации.
 
Я пробовал получать игрока из EntityLivingBase, но там все переменные стандартны. При этом синхронизация происходит автоматически.
 
В общем нужно получать переменную для рендера над головой вместо ника.
 
MrCreppo написал(а):
Я пробовал получать игрока из EntityLivingBase, но там все переменные стандартны. При этом синхронизация происходит автоматически.
А ты пробовал проверять, не является ли экземпляр класса EntityLivingBase экземпляром класса EntityPlayer и перевести его в EntityPlayer?
 
Foghrye4 написал(а):
MrCreppo написал(а):
Я пробовал получать игрока из EntityLivingBase, но там все переменные стандартны. При этом синхронизация происходит автоматически.
А ты пробовал проверять, не является ли экземпляр класса EntityLivingBase экземпляром класса EntityPlayer и перевести его в EntityPlayer?
Так и делал
 
Нужно получить ExtendedProperties из энтити который рендерится и использовать данные для рендера. Получать надо в методе afterPassSpecialRender(из RenderPlayerBase (RenderPlayerAPI)). Метод содержит EntityLivingBase, double, double, double. Где даблы - расстояние до рисуемого энтити. Я пробовал получать EntityLivingBase как EntityPlayer, но получал стандартные значения в ExtendedProperties. Итак вопрос - как мне правильно получить игрока в этом методе(никнейм получаю без проблем).
 
cucugag написал(а):
if(ent instanceof EntityPlayer){
EntityPlayer player=(EntityPlayer)ent;
}
2 поста выше я уже говорил что это не подходит.
[merge_posts_bbcode]Добавлено: 23.08.2015 20:32:54[/merge_posts_bbcode]

Agravaine написал(а):
Покажи как ты синхронизируешь.
В моем EntityProperties есть например приватная переменная myVar, которая является int. Эта переменная инициализируется в конструкторе и приравнивается к 0. Позже она записывается/читается из NBT.
Так же есть 2 метода:
Код:
public void setMyVar(int var)
{
this.myVar = var;
sync();
}
и
Код:
public int getMyVar()
{
return this.myVar;
}
Это получение/установка моей переменной.

Метод sync(); выглядит так:

Код:
    public final void sync()
    {
        ByteArrayOutputStream bos = new ByteArrayOutputStream(8);
        DataOutputStream outputStream = new DataOutputStream(bos);

        try {
            outputStream.writeInt(this.myVar);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        Packet250CustomPayload packet = new Packet250CustomPayload("ExtPropClient", bos.toByteArray());

        if (!player.worldObj.isRemote) {
            EntityPlayerMP player1 = (EntityPlayerMP) player;
            PacketDispatcher.sendPacketToPlayer(packet, (Player) player1);
        }
    }

Этот метод отправляет пакет игроку(на клиент), где вызывается метод setMyVar (с клиентской стороны крч).

Так я синхронизирую.
 
Мой EntityProperties работает правильно как на клиенте так и на сервере, кроме рендеров.
[merge_posts_bbcode]Добавлено: 23.08.2015 20:46:05[/merge_posts_bbcode]

Итак выходом стало использование для моей переменной DataWatcher'а. Как ни странно с ним все заработало.
 
Назад
Сверху