Bukkit -> Формировать сетевые сообщенияJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Bukkit -> Формировать сетевые сообщения

Сообщение Anonymous »

Я отправляю пакет через плагин Bukkit. Код отправки посылки:

Код: Выделить всё

public static boolean sendPacket(Player player, String message) {
try {
String full_msg = "Text(" + message + ")";
byte[] data = full_msg.getBytes(StandardCharsets.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 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
Я уже не знаю, что делать, я правда перерыла все, что можно. Прошу помощи...
Версия Minecraft: 1.19.3
Пробывал через такие события, как ClientboundCustomPayloadEvent.

Подробнее здесь: https://stackoverflow.com/questions/783 ... k-messages
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»