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

Версия Minecraft
1.7.10
210
1
19
На сервере я вписываю свои данные в игрока так: 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() и сделать какой-то эффект с этим стаком

В общем-то это все подробно описано в...

tox1cozZ

aka Agravaine
8,455
598
2,892
Ты делаешь через одно место. Для таких вещей есть IEEP. Там намного удобнее работать с данными и синхронизировать их.
Тебе нужно просто отправить пакет со своими данными и на клиенте заполнить ими getEntityData().
 
210
1
19
Ты делаешь через одно место.
Не спорю, но охота пуще неволи.

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

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


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

Поделись, будь добр, ссылкой на конкретный туториал, который, как тебе кажется, прост, понятен и основательно разжёван. Спасибо.
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Не, юзать DataWatcher для игрока нельзя. Почему? Да потому что в него можно поместить только 32 переменных, половина из которых уже занята майном. Либо напорешься на айдишник который уже занял другой мод, либо свободных айдишников не будет вообще.
 
210
1
19
юзать DataWatcher для игрока нельзя


Мне нужно передать с сервера в клиент один ItemStack. Я всё-таки попробовал через DataWatcher, но не получилось. А жаль. Неужели мне ковыряться с этими пакетами из-за одного стака? 😭
 

timaxa007

Модератор
5,831
409
672
 
7,099
324
1,510
Если приемлемо добавление звисимостей, то можно попробовать CCL
Очень простая пакетная система, как раз для кейсом с небольшим количеством пакетов.
Тутор написан с примерам на скале, однако в конце приложен архив с example-модов на джаве
~~~
Кстати в CCL есть готовый write/readItemStack у пакетов
 

tox1cozZ

aka Agravaine
8,455
598
2,892
202
14
36
Неужели мне ковыряться с этими пакетами из-за одного стака?
Стоит 1 раз хорошенько ими заняться, и дальше легче будет. И да, с пакетами в разработке модов придётся частенько встречаться.
 
210
1
19
Короче, я вообще не втыкаю в эту тему. Категорически. Мне нужно из моего метода отправить итемстак пакетом в клиент. В клиенте нужно его поймать и засетить. Потом в рендере экрана засеченный итемстак показать.
Подключил CodeChicken, посмотрел представленные выше листинги, не понял, как их применить к моей задаче.
Вот всё, что я сделал за последние полчаса:
Ly3I35Ss48.png


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