package net.minecraft.network; import com.google.common.collect.BiMap; import io.netty.buffer.ByteBuf; import java.io.IOException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public abstract class Packet { private static final Logger logger = LogManager.getLogger(); private static final String __OBFID = "CL_00001272"; /** * Returns a packet instance, given the params: BiMap<int, (Packet) Class> and (int) id */ public static Packet generatePacket(BiMap protocolMap, int packetId) { try { Class oclass = (Class)protocolMap.get(Integer.valueOf(packetId)); return oclass == null ? null : (Packet)oclass.newInstance(); } catch (Exception exception) { logger.error("Couldn\'t create packet " + packetId, exception); return null; } } /** * Will write a byte array to supplied ByteBuf as a separately defined structure by prefixing the byte array with * its length */ public static void writeBlob(ByteBuf buffer, byte[] blob) { buffer.writeShort(blob.length); buffer.writeBytes(blob); } /** * Will read a byte array from the supplied ByteBuf, the first short encountered will be interpreted as the size of * the byte array to read in */ public static byte[] readBlob(ByteBuf buffer) throws IOException { short short1 = buffer.readShort(); if (short1 < 0) { throw new IOException("Key was smaller than nothing! Weird key!"); } else { byte[] abyte = new byte[short1]; buffer.readBytes(abyte); return abyte; } } /** * Reads the raw packet data from the data stream. */ public abstract void readPacketData(PacketBuffer data) throws IOException; /** * Writes the raw packet data to the data stream. */ public abstract void writePacketData(PacketBuffer data) throws IOException; /** * Passes this Packet on to the NetHandler for processing. */ public abstract void processPacket(INetHandler handler); /** * If true, the network manager will process the packet immediately when received, otherwise it will queue it for * processing. Currently true for: Disconnect, LoginSuccess, KeepAlive, ServerQuery/Info, Ping/Pong */ public boolean hasPriority() { return false; } public String toString() { return this.getClass().getSimpleName(); } /** * Returns a string formatted as comma separated [field]=[value] values. Used by Minecraft for logging purposes. */ public String serialize() { return ""; } }