blob: 1cbd14b2411134ac7f44f77cbb8ab2c4554f1d10 [file] [log] [blame] [raw]
package protocolsupport.protocol.packet.middleimpl;
import java.util.Collection;
import io.netty.util.Recycler;
import net.minecraft.server.v1_9_R2.Packet;
import net.minecraft.server.v1_9_R2.PacketDataSerializer;
import protocolsupport.api.ProtocolVersion;
import protocolsupport.protocol.packet.ServerBoundPacket;
import protocolsupport.protocol.serializer.ProtocolSupportPacketDataSerializer;
import protocolsupport.utils.netty.Allocator;
public class PacketCreator extends ProtocolSupportPacketDataSerializer {
private static final Recycler<PacketCreator> RECYCLER = new Recycler<PacketCreator>() {
@Override
protected PacketCreator newObject(Recycler.Handle handle) {
return new PacketCreator(handle);
}
};
public static PacketCreator create(ServerBoundPacket packet) {
PacketCreator packetdata = RECYCLER.get();
packetdata.packet = packet;
return packetdata;
}
private final Recycler.Handle handle;
private PacketCreator(Recycler.Handle handle) {
super(Allocator.allocateUnpooledBuffer(), ProtocolVersion.getLatest());
this.handle = handle;
}
private final PacketDataSerializer nativeSerializer = new PacketDataSerializer(this);
private ServerBoundPacket packet;
public ServerBoundPacket getPacketType() {
return packet;
}
public Packet<?> create() throws Exception {
try {
Packet<?> npacket = packet.get();
npacket.a(nativeSerializer);
return npacket;
} finally {
clear();
packet = null;
RECYCLER.recycle(this, handle);
}
}
@Override
protected void finalize() {
release();
}
public static void addAllTo(Collection<PacketCreator> creators, Collection<Object> to) throws Exception {
for (PacketCreator creator : creators) {
to.add(creator.create());
}
}
}