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

Версия Minecraft
1.12.2

will0376

Токсичная личность
2,058
55
572
Доброй ночи всем заглянувшим.
Есть ли нормальный способ открывать гуи у игрока с сервера(без контейнера. по клавише)?

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

з.ы. я спрашивал тут по поводу 1ого пункта - пришли к выводу сделать костыль в роли отрисовывания точками указателя(двигается рвано)
 
Решение
Конечно говнокод. Зачем ты строки шлешь? Почему нельзя слать сырые данные?
Я делаю так:
Открываю гуи, в конструкторе гуи отсылаю пакет на сервер, на сервере собираю нужную инфу и отправляю обратно на клиент, проверяю открыто ли мое гуи и записываю эти данные в гуишку.

will0376

Токсичная личность
2,058
55
572
Скинь код чтоли
Код:
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);
}
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Конечно говнокод. Зачем ты строки шлешь? Почему нельзя слать сырые данные?
Я делаю так:
Открываю гуи, в конструкторе гуи отсылаю пакет на сервер, на сервере собираю нужную инфу и отправляю обратно на клиент, проверяю открыто ли мое гуи и записываю эти данные в гуишку.
 

will0376

Токсичная личность
2,058
55
572
Зачем ты строки шлешь?
относительно строк.
Я шлю ссылку на нужный json, который заблаговременно заливаю сервером на hastebin... а на клиенте загружаю по ссылке и парсю его...
в конструкторе гуи отсылаю пакет на сервер
я думал об этом... Но не допер до конца, как заносить данные в уже открытое гуи... Только если сохранять где-то ссылку на объект класса
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Лол. А сразу слать пакетом свой жсон, не?) Опять же, что у тебя за жсон? Может можно обойтись без него и слать сырые данные? В десятки раз меньше весят.
Minecraft#currentScreen - это текущее открытое гуи.
 

will0376

Токсичная личность
2,058
55
572
В десятки раз меньше весят.
Ну. не знаю. у меня масштабируемый json.Жутко идиотская система. один общий массив, в котором массивы предметов, в котором(хд) 14 строк... При 30 предметах уже ~500 строк получается(~8.5k символов...) как бэ не было переполнения пакета XD
 

Icosider

Kotliner
Администратор
3,600
99
663
Конечно говнокод. Зачем ты строки шлешь? Почему нельзя слать сырые данные?
Я делаю так:
Открываю гуи, в конструкторе гуи отсылаю пакет на сервер, на сервере собираю нужную инфу и отправляю обратно на клиент, проверяю открыто ли мое гуи и записываю эти данные в гуишку.
Это ты ещё не видел мод BetterQuesting, то ещё говнище...
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Ну. не знаю. у меня масштабируемый json.Жутко идиотская система. один общий массив, в котором массивы предметов, в котором(хд) 14 строк... При 30 предметах уже ~500 строк получается(~8.5k символов...) как бэ не было переполнения пакета XD
Говорю же, пиши в PacketBuffer сразу нужные данные. Какие там они у предмета? Айди, метедата и количество. Инт, шорт и байт. В купе всего лишь 7 байт на предмет.
 
Сверху