HolographicDisplays/nms/v1_10_r1/src/main/java/me/filoghost/holographicdisplays/nms/v1_10_R1/PacketByteBuffer.java

97 lines
2.1 KiB
Java
Raw Normal View History

2021-08-09 09:20:54 +02:00
/*
* Copyright (C) filoghost and contributors
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package me.filoghost.holographicdisplays.nms.v1_10_R1;
import io.netty.buffer.Unpooled;
2023-03-19 16:44:40 +01:00
import net.minecraft.server.v1_10_R1.Packet;
2021-08-09 09:20:54 +02:00
import net.minecraft.server.v1_10_R1.PacketDataSerializer;
2023-03-19 16:44:40 +01:00
import java.io.IOException;
2021-08-09 09:20:54 +02:00
import java.util.UUID;
2023-03-19 16:44:40 +01:00
class PacketByteBuffer {
2021-08-09 09:20:54 +02:00
private static final ThreadLocal<PacketByteBuffer> LOCAL_INSTANCE = ThreadLocal.withInitial(PacketByteBuffer::new);
2021-08-09 09:20:54 +02:00
2023-03-19 16:44:40 +01:00
private final PacketDataSerializer serializer;
2021-08-09 09:20:54 +02:00
static PacketByteBuffer get() {
PacketByteBuffer instance = LOCAL_INSTANCE.get();
instance.clear();
return instance;
2021-08-09 09:20:54 +02:00
}
private PacketByteBuffer() {
2023-03-19 16:44:40 +01:00
this.serializer = new PacketDataSerializer(Unpooled.buffer());
}
int readableBytes() {
return serializer.readableBytes();
}
void readBytes(byte[] bytes) {
serializer.readBytes(bytes);
}
void writeBoolean(boolean flag) {
serializer.writeBoolean(flag);
}
void writeByte(int i) {
serializer.writeByte(i);
}
void writeShort(int i) {
serializer.writeShort(i);
}
void writeInt(int i) {
serializer.writeInt(i);
}
void writeDouble(double d) {
serializer.writeDouble(d);
2021-08-09 09:20:54 +02:00
}
void writeVarInt(int i) {
2023-03-19 16:44:40 +01:00
serializer.d(i);
2021-08-09 09:20:54 +02:00
}
2021-09-14 23:55:19 +02:00
void writeVarIntArray(int i1) {
writeVarInt(1);
writeVarInt(i1);
2021-08-09 09:20:54 +02:00
}
2021-09-14 23:55:19 +02:00
void writeUUID(UUID uuid) {
2023-03-19 16:44:40 +01:00
serializer.a(uuid);
2021-08-09 09:20:54 +02:00
}
<T> void writeDataWatcherEntry(DataWatcherKey<T> key, T value) {
2023-03-19 16:44:40 +01:00
serializer.writeByte(key.getIndex());
2021-08-09 09:20:54 +02:00
writeVarInt(key.getSerializerTypeID());
2023-03-19 16:44:40 +01:00
key.getSerializer().a(serializer, value);
2021-08-09 09:20:54 +02:00
}
void writeDataWatcherEntriesEnd() {
2023-03-19 16:44:40 +01:00
serializer.writeByte(0xFF);
}
void clear() {
serializer.clear();
}
<T extends Packet<?>> T writeDataTo(T packet) {
try {
packet.a(serializer);
return packet;
} catch (IOException e) {
// Never thrown by the implementations
throw new RuntimeException(e);
}
2021-08-09 09:20:54 +02:00
}
}