Окрытие гуи с сервера

will0376

Каменная лига
Сообщения
206
Лучшие ответы
5
Симпатии
10
#1
Версия Minecraft
1.12.2
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Доброй ночи всем заглянувшим.
Есть ли нормальный способ открывать гуи у игрока с сервера(без контейнера. по клавише)?

В данный момент использую систему "запроса". Т.е. игрок,нажимая на нужную клавишу, запрашивает(пакетом) нужные данные для гуи с сервера(ссылку на json, например) и после принятия пакета клиентом - открываю гуи с нужными данными... 3 минуса: 1)Нет мышки,пока не "вынесешь" её за пределы окна майна. 2)если у игрока провайдер кусок... - долгий ответ от сервера( а там и загрузка и парсинг json...). 3)жуткий говнокод(по крайней мере - у меня.)

з.ы. я спрашивал тут по поводу 1ого пункта - пришли к выводу сделать костыль в роли отрисовывания точками указателя(двигается рвано)
 

Agravaine

Алмазная лига
Сообщения
4,253
Лучшие ответы
165
Симпатии
512
#2
Делаю так всегда и все отлично, фиг знает что у тебя за проблемы с мышкой, я такого не замечал.
Скинь код чтоли, как открываешь и отсылаешь данные.
 

will0376

Каменная лига
Сообщения
206
Лучшие ответы
5
Симпатии
10
#3
в main использую SimpleNetwork:
public static SimpleNetworkWrapper network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);
После нажатия биндовой клавиши:
Java:
Main.network.sendToServer(new PluginMessage("GetItemsInfo" + Minecraft.getMinecraft().player.getName()));
На сервере:
Java:
Main.network.sendTo(new Message("OpenItems;" + Main.jsonUrl + ";" + new PlayerClass().getPlayersMoney(args[2])),getEPMP(ctx.getServerHandler().player.getServer(),args[2]));
getEPMP - получение EntityPlayerMP по нику, методом перебора. Знаю, что можно через return, не используя sendTo...
но не сейчас.
Принимаю пакет с сервера и открываю:
Java:
else if(args.length == 3 && args[0].equalsIgnoreCase("OpenItems"))
            Minecraft.getMinecraft().displayGuiScreen(new GuiItems(args[1],args[2]));
private void drawDot(){ //костыль указателя
int x = Mouse.getEventX()*width/mc.displayWidth-2;
int y = super.height-Mouse.getEventY()*height/mc.displayHeight-7;
drawString(mc.fontRenderer,".",x+2,y-2,16777215);
drawString(mc.fontRenderer,"...",x,y,16777215);
drawString(mc.fontRenderer,".",x+2,y+2,16777215);
}
 

Agravaine

Алмазная лига
Сообщения
4,253
Лучшие ответы
165
Симпатии
512
#4
Конечно говнокод. Зачем ты строки шлешь? Почему нельзя слать сырые данные?
Я делаю так:
Открываю гуи, в конструкторе гуи отсылаю пакет на сервер, на сервере собираю нужную инфу и отправляю обратно на клиент, проверяю открыто ли мое гуи и записываю эти данные в гуишку.
 

will0376

Каменная лига
Сообщения
206
Лучшие ответы
5
Симпатии
10
#5
относительно строк.
Я шлю ссылку на нужный json, который заблаговременно заливаю сервером на hastebin... а на клиенте загружаю по ссылке и парсю его...
в конструкторе гуи отсылаю пакет на сервер
я думал об этом... Но не допер до конца, как заносить данные в уже открытое гуи... Только если сохранять где-то ссылку на объект класса
 

Agravaine

Алмазная лига
Сообщения
4,253
Лучшие ответы
165
Симпатии
512
#6
Лол. А сразу слать пакетом свой жсон, не?) Опять же, что у тебя за жсон? Может можно обойтись без него и слать сырые данные? В десятки раз меньше весят.
Minecraft#currentScreen - это текущее открытое гуи.
 

will0376

Каменная лига
Сообщения
206
Лучшие ответы
5
Симпатии
10
#7
В десятки раз меньше весят.
Ну. не знаю. у меня масштабируемый json.Жутко идиотская система. один общий массив, в котором массивы предметов, в котором(хд) 14 строк... При 30 предметах уже ~500 строк получается(~8.5k символов...) как бэ не было переполнения пакета XD
 

Ivasik

Porting GrandBombaster
Команда форума
Сообщения
2,574
Лучшие ответы
72
Симпатии
228
#8
Конечно говнокод. Зачем ты строки шлешь? Почему нельзя слать сырые данные?
Я делаю так:
Открываю гуи, в конструкторе гуи отсылаю пакет на сервер, на сервере собираю нужную инфу и отправляю обратно на клиент, проверяю открыто ли мое гуи и записываю эти данные в гуишку.
Это ты ещё не видел мод BetterQuesting, то ещё говнище...
 

Agravaine

Алмазная лига
Сообщения
4,253
Лучшие ответы
165
Симпатии
512
#10
Ну. не знаю. у меня масштабируемый json.Жутко идиотская система. один общий массив, в котором массивы предметов, в котором(хд) 14 строк... При 30 предметах уже ~500 строк получается(~8.5k символов...) как бэ не было переполнения пакета XD
Говорю же, пиши в PacketBuffer сразу нужные данные. Какие там они у предмета? Айди, метедата и количество. Инт, шорт и байт. В купе всего лишь 7 байт на предмет.
 

Agravaine

Алмазная лига
Сообщения
4,253
Лучшие ответы
165
Симпатии
512
#12
Ну там вроде хукнуться и изменить ограничение по байтам.
 

Ivasik

Porting GrandBombaster
Команда форума
Сообщения
2,574
Лучшие ответы
72
Симпатии
228
#13
Не, это то не проблема, проблемы начинаются когда таких много пакетов отправляется(привет BetterQuesting)
 

Agravaine

Алмазная лига
Сообщения
4,253
Лучшие ответы
165
Симпатии
512
#15
Ну ок, но все равно сырые данные будут в разы меньше весить чем жсон строка.
 
Сверху