Пакеты

Версия Minecraft
1.12.2
API
Forge
459
13
35
Всем привет, отсылаю пакет при открытие гуи на сервер с целью получить информацию с базы данных, но почему-то в итоге оно мне ничего не возвращает.
По моей логике это должно работать так:
CLIENT --> SERVER (запрос на получение данных)
SERVER --> CLIENT (отсылает информацию на клиент)

GuiOpenEvent:
    @SubscribeEvent
    public void onGuiOpened(GuiOpenEvent event) {
        if (event.getGui() instanceof ListScreen) {
            System.out.println("Gui opened");
            new CPacketInfo().sendToServer();
        }
    }

CPacketInfo:
@ElegantPacket
@Value
public class CPacketInfo implements ClientToServerPacket {

    @Override
    public void onReceive(EntityPlayerMP player) {
        System.out.println("[CPacketInfo] Packet here");
        new SPacketInfo().sendToPlayer(player);
    }
}

SPacketInfo:
@ElegantPacket
@Value
public class SPacketInfo implements ServerToClientPacket {

    public String getName(EntityPlayer player) {
        String getNameS = new String();
        try {
            getNameS = SqlHelper.sqlHelperInstance.getName(player.getDisplayNameString());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return getNameS ;
    }

    @Override
    public void onReceive(Minecraft mc) {
        System.out.println("[SPacketInfo] Packet here");
        System.out.println("Name: " + getClanName(mc.player));
    }
}

Писал этот код после того, как выпил кваса, поэтому не факт, что где-то сильно затупил, не надо бить палками, спасибо!)
Возможно где-то в логике затупил, что скорее всего и есть, если есть предложения для иной реализации - буду рад услышать и буду благодарен за совет!
 
Решение
2 примера из мода, который я недавно писал:
На клиент: hastebin
На сервер: hastebin
Для ясности: в билдере задаются все аргументы, а потом только вызывается метод билда класса и метод отправки пакета на таргет.
459
13
35
Пакет лучше всего слать в момент срабатывания бинда на гуи. И в момент получения данных - открывать саму гуишку
Так дело в том, что по сути и так должно работать, хотябы в консоль выводить, а ничего не происходит

И кстати, почему именно так будет лучше сделать?
 
Последнее редактирование:

will0376

Токсичная личность
2,077
55
585
И кстати, почему именно так будет лучше сделать?
99% уверенность, что данные дойдут до того, как откроется гуишка.
у тебя регистрация класса через аннотацию? там статик метод тогда нужен.
 
7,099
324
1,510
Наверное, он имел ввиду, что данные из бд нужно записывать в пакет до отправки, а не получать их(откуда?) при получении
 
459
13
35
Просто поле добавь 🤦‍♂️
Это понятно
Оно само запишется
И это понятно

Я о том, что где его лучше всего записать, тк там в любом случае игрока надо получать? Можно было бы например в каком-то событие на стороне сервера, но это ведь не то немного
 
7,099
324
1,510
Ну типо там, где ты создаешь экземпляр пакета перед отправкой
CPacketInfo#onReceive
 
459
13
35
Java:
@ElegantPacket
@Value
public class CPacketInfo implements ClientToServerPacket {

    @Override
    public void onReceive(EntityPlayerMP player) {
        String name = new String();

        try {
            name = SqlHelper.sqlHelperInstance.getName(player.getDisplayNameString());
        } catch (SQLException e) {
            e.printStackTrace();
        }

        System.out.println("packet here");
        new SPacketClanInfo(name).sendToPlayer(player);
    }
}



Java:
@ElegantPacket
@Value
public class SPacketInfo implements ServerToClientPacket {

    String name;

    @Override
    public void onReceive(Minecraft mc) {
        System.out.println("name: " + name);
    }
}

Где туплю?
 
459
13
35
Внимательнее вчитайся в названия интерфейсов.
Получать данные из sql на стороне клиента - наитупейшая идея.
Java:
@ElegantPacket
@Value
public class SPacketInfo implements ServerToClientPacket {
    
    @Override
    public void onReceive(Minecraft mc) {
        String name = new String();
        
        try {
            name = SqlHelper.sqlHelperInstance.getName(mc.player.getDisplayNameString());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        System.out.println("name: " + name);
    }
}

абсолютно то-же самое
 

will0376

Токсичная личность
2,077
55
585
2 примера из мода, который я недавно писал:
На клиент: hastebin
На сервер: hastebin
Для ясности: в билдере задаются все аргументы, а потом только вызывается метод билда класса и метод отправки пакета на таргет.
 
Сверху