А ты видел это?
[1.7.2][Tutorial]Netty Packet Handling - удобная система пакетов
Я просто использовал именно такой подход начиная с 1.47 и любой пакет содержал в себе код как клиентской, так и серверной стороны.
А чтобы на сервере всё работало правильно, приходилось делить мод на две части. Но сейчас есть способы получше, которые позволяют настраивать сборщики jar через аннотации так, чтобы они сами помещали нужную часть кода на нужную сторону, жаль они не умеют разделять import которые собственно и создают краш на серверной стороне.
И даже если это не подойдет, то что мешает тебе отправить тот же самый пакет обратно? У каждого пакета как минимум есть его
packetId, по которому приемник или отправитель понимает какой пакет к каком классу относится. Что мешает тебе отправить его же обратно, только пустым.
И судя поэтому коду, так ничего и не изменилось. У пакета по прежнему нет стороны
[1.12] Sending a packet from the server to the client
просто надо проверять на какой из сторон мы его обрабатываем как полученный