Синхронизировать компаунд getEntityData() между клиентским и серверным EntityPlayer.

Версия Minecraft
1.7.10
215
1
20
На сервере я вписываю свои данные в игрока так: entityplayermp.getEntityData().setInteger("someparameter", 100500);
В клиентском коде я вызываю mc.thePlayer.getEntityData() с целью получить данные и вывести на экран в игре, но он выводит "{}".
Методом проб и ошибок я уже понял, что они не взаимосвязаны - каждый из них может быть пустым или с данными, не отображаясь на второго. И у меня простой вопрос - как мне в клиенте получить данные из entityplayermp.getEntityData()?
 
Решение
Подключил CodeChicken, посмотрел представленные выше листинги, не понял, как их применить к моей задаче.
Вот всё, что я сделал за последние полчаса:
В целом нужно сделать следующие вещи:
Два класса, реализующих обработчики пакетов(IServerPacketHandler, IClientPacketHandler)
Зарегать их экземпляры на modid (PacketCustom.assignHandler), в клиентском и общем прокси
Там где нужно отправлять пакет с сервера на клиент написать че-то вроде
new PacketCustom("<modid>", <packet id, 1 and above>).writeItemStack(<stack>).sendToPlayer(<player>)
В реализации IClientPacketHandler добавить кейс для отправляемого <packet id>, прочитать стак readItemStack() и сделать какой-то эффект с этим стаком

В общем-то это все подробно описано в...
Ты делаешь через одно место. Для таких вещей есть IEEP. Там намного удобнее работать с данными и синхронизировать их.
Тебе нужно просто отправить пакет со своими данными и на клиенте заполнить ими getEntityData().
 
Ты делаешь через одно место.
Не спорю, но охота пуще неволи.

просто отправить пакет со своими данными и на клиенте заполнить ими getEntityData()
Ты уверен, что слово "просто" тут к месту? Я не умею так делать. Никогда не работал с пакетами. Не рыхлить же весь интернет ради одной задачи?

Если "просто" - напиши готовый метод.
 
В туториалах есть


45 минут копаний в т.н. "туториалах" не приблизили меня к решению задачи. Туториал, который попался мне первым, был просто восхитительным. Теперь у меня есть аж целых два класса - NetworkHandler и SimplePacket, с которыми я ума не приложу, что делать, чтобы передать аж целых два числа в клиент и обработать их в соответствии со своей идеей. Это точно я усложняю?

Поделись, будь добр, ссылкой на конкретный туториал, который, как тебе кажется, прост, понятен и основательно разжёван. Спасибо.
 
Не, юзать DataWatcher для игрока нельзя. Почему? Да потому что в него можно поместить только 32 переменных, половина из которых уже занята майном. Либо напорешься на айдишник который уже занял другой мод, либо свободных айдишников не будет вообще.
 
юзать DataWatcher для игрока нельзя


Мне нужно передать с сервера в клиент один ItemStack. Я всё-таки попробовал через DataWatcher, но не получилось. А жаль. Неужели мне ковыряться с этими пакетами из-за одного стака? 😭
 
 
Если приемлемо добавление звисимостей, то можно попробовать CCL
Очень простая пакетная система, как раз для кейсом с небольшим количеством пакетов.
Тутор написан с примерам на скале, однако в конце приложен архив с example-модов на джаве
~~~
Кстати в CCL есть готовый write/readItemStack у пакетов
 
Неужели мне ковыряться с этими пакетами из-за одного стака?
Стоит 1 раз хорошенько ими заняться, и дальше легче будет. И да, с пакетами в разработке модов придётся частенько встречаться.
 
Короче, я вообще не втыкаю в эту тему. Категорически. Мне нужно из моего метода отправить итемстак пакетом в клиент. В клиенте нужно его поймать и засетить. Потом в рендере экрана засеченный итемстак показать.
Подключил CodeChicken, посмотрел представленные выше листинги, не понял, как их применить к моей задаче.
Вот всё, что я сделал за последние полчаса:
Ly3I35Ss48.png


И я понятия не имею, как продвинуться дальше. Я, пожалуй, брошу эту затею. Не очень-то и хотелось.
 
Назад
Сверху