Bukkit -> Forge, невозможность обработать пакеты
Короче... отправляю пакет через плагин Bukkit. Код отправки пакета:
try {
String full_msg = "Text(" + message + ")"; // Формируем текст сообщения
byte[] data = full_msg.getBytes(StandardCharsets.UTF_8); // Получаем байты строки в UTF-8
MinecraftKey channel = new MinecraftKey("chilove", "main"); // Указываем канал
PacketContainer packet = new PacketContainer(PacketType.Play.Server.CUSTOM_PAYLOAD);
packet.getMinecraftKeys().write(0, channel);
ByteBuf byteBuf = Unpooled.wrappedBuffer(data);
Object serializer = MinecraftReflection.getPacketDataSerializer(byteBuf);
packet.getModifier().withType(ByteBuf.class).write(0, serializer);
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
return true;
} catch (Exception exception) {
Bukkit.getLogger().info(ConsoleColor.ANSI_RED + "Error on TextPacket: " + ConsoleColor.ANSI_CYAN + " (" + exception.getMessage() + ")" + ConsoleColor.ANSI_RESET);
exception.printStackTrace();
}
return false;
}
Пакет сам отправляется безоговорочно... но вот обработчик на моде не работает от слова совсем. Код попытки создать обработчик:
private static final String PROTOCOL_VERSION = "1";
public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel(
new ResourceLocation("chilove", "main"),
() -> PROTOCOL_VERSION,
PROTOCOL_VERSION::equals,
PROTOCOL_VERSION::equals
);
public static void register() {
// INSTANCE.registerMessage(0, TextPacket.class, TextPacket::encode, TextPacket::decode, TextPacket::handle);
int id = 0;
INSTANCE.messageBuilder(TextPacket.class, id++, NetworkDirection.PLAY_TO_SERVER)
.decoder(TextPacket::decode)
.consumerMainThread(TextPacket::handle)
.add();
INSTANCE.registerMessage(id++, TextPacket.class, TextPacket::encode, TextPacket::decode, TextPacket::handle);
INSTANCE.messageBuilder(TextPacket.class, id++, NetworkDirection.PLAY_TO_CLIENT)
.decoder(TextPacket::decode)
.consumerMainThread(TextPacket::handle)
.add();
}
TextPacket.class:
public class TextPacket {
private String text;
public TextPacket() { }
public TextPacket(String text) {
this.text = text;
}
public String getText() {
return text;
}
public static TextPacket decode(FriendlyByteBuf buffer) {
byte[] bytes = buffer.readByteArray();
String text = new String(bytes, StandardCharsets.UTF_8);
ChiloveMod.LOGGER.info("Decoded text: {}", text);
return new TextPacket(text);
}
public void encode(FriendlyByteBuf buffer) {
byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
buffer.writeByteArray(bytes);
}
public void handle(Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> {
ChiloveMod.LOGGER.info("Received message: {}", text);
});
ctx.get().setPacketHandled(true);
}
}
Перепробовал ОЧЕНЬ много вариантов, и в интернете перерыл все что можно по поводу SimpleImpl. Обычно, при отправке пакета получаю в консоли 2 ошибки:
- [15:15:32] [Netty Client IO #1/ERROR] [ne.mi.ne.si.IndexedMessageCodec/SIMPLENET]: Received invalid discriminator byte 84 on channel chilove:main
- [15:15:32] [Render thread/WARN] [minecraft/ClientPacketListener]: Unknown custom packet identifier: chilove:main
Не знаю, что уже делать, перерыл реально всё что можно. Прошу помощи... Ах да, версия 1.19.3