Получение результата пакета в функции отправки

Версия Minecraft
1.7.10
API
Forge
13
0
Всем привет, недавно начал писать моды. Значит сделал связку с плагином через пакеты для проверки кое-чего. В моде, в ивенте смерти игрока, я отправляю пакет с проверкой, но мне нужно получить результат в этом же методе, чтобы продолжить проверки. Мой вариант - запустить цикл с проверкой пришел ли результат. Но тут я столкнулся с проблемой. Данный участок кода находится на серверной части, поэтому я не знаю как сделать ожидание, чтобы не ложить весь мод в спячку. Я уверен, кто-то с такой проблемой сталкивался, поделитесь пожалуйста своим опытом.
 
Решение
но мне нужно получить результат в этом же методе
Без асинхронности и прочих корутинов Котлина по-хорошему этого не сделать.
Если ты запустишь цикл - ты заморозишь поток, будет лаг.

Можно попробовать использовать обычную джавошную попытку в псевдоасинхронность: CompletableFuture (гуглится легко).
Основной принцип - ты подготоваливаешь переменные, и дальше запускаешь код в компьютеблФьючере. Твой поток уходит по своим делам, а фьючер создает свой поток, в котором уже можно смело делать циклы ожидания ответа.

Более правильный вариант уже написали: ты отправляешь пакет проверки и всё, поток уходит по своим делам. А когда получаешь ответный пакет - уже обрабатываешь его. Логику придется переделать так, чтобы это было два...
1,200
37
237
Ага, и получить пакет-хак. Нужно смотреть, что конкретно требуется сделать и как это можно реализовать иначе. Вдруг там что-то с предметами/статами игрока делается, а я возьму с клиента и верну, что у меня был креати и стопицот алмазов.
 
78
3
10
но мне нужно получить результат в этом же методе
Без асинхронности и прочих корутинов Котлина по-хорошему этого не сделать.
Если ты запустишь цикл - ты заморозишь поток, будет лаг.

Можно попробовать использовать обычную джавошную попытку в псевдоасинхронность: CompletableFuture (гуглится легко).
Основной принцип - ты подготоваливаешь переменные, и дальше запускаешь код в компьютеблФьючере. Твой поток уходит по своим делам, а фьючер создает свой поток, в котором уже можно смело делать циклы ожидания ответа.

Более правильный вариант уже написали: ты отправляешь пакет проверки и всё, поток уходит по своим делам. А когда получаешь ответный пакет - уже обрабатываешь его. Логику придется переделать так, чтобы это было два независимых куска кода. Можно сказать, что ты всегда реагируешь на ответный пакет как будто ожидал его. Даже если ты не посылал пакет запроса.

Если тебе нужна при этом какая-то информация на момент смерти - храни её, прочитаешь и удалишь когда придет ответ. Так же обязательно храни признак самого факта отправки запроса - чтобы на момент получения можно было проверить, что он был и на ответ надо реагировать.

Помни, что первое правило сетевого программирования - "клиент всегда врёт и всегда пытается поиметь гешефт".
 
Сверху