2011-04-23 02:06:48 +02:00
|
|
|
package net.minecraft.server;
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
import java.io.DataInput;
|
|
|
|
import java.io.DataOutput;
|
2011-04-23 02:06:48 +02:00
|
|
|
import java.io.EOFException;
|
|
|
|
import java.io.IOException;
|
2012-10-25 05:53:23 +02:00
|
|
|
import java.net.Socket;
|
2011-04-23 02:06:48 +02:00
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.HashSet;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Set;
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
import org.bukkit.craftbukkit.inventory.CraftItemStack; // CraftBukkit
|
|
|
|
|
2011-04-23 02:06:48 +02:00
|
|
|
public abstract class Packet {
|
|
|
|
|
2012-07-29 09:33:13 +02:00
|
|
|
public static IntHashMap l = new IntHashMap();
|
2011-11-20 09:01:14 +01:00
|
|
|
private static Map a = new HashMap();
|
|
|
|
private static Set b = new HashSet();
|
2012-02-29 22:31:04 +01:00
|
|
|
private static Set c = new HashSet();
|
2013-03-13 23:33:27 +01:00
|
|
|
protected IConsoleLogManager m;
|
2013-07-01 13:03:00 +02:00
|
|
|
public final long timestamp = MinecraftServer.aq();
|
2012-03-01 11:49:23 +01:00
|
|
|
public static long o;
|
2012-07-29 09:33:13 +02:00
|
|
|
public static long p;
|
|
|
|
public static long q;
|
2013-03-13 23:33:27 +01:00
|
|
|
public static long r;
|
2013-07-01 13:03:00 +02:00
|
|
|
public boolean lowPriority;
|
2013-03-25 05:22:32 +01:00
|
|
|
// CraftBukkit start - Calculate packet ID once - used a bunch of times
|
2012-08-12 06:14:23 +02:00
|
|
|
private int packetID;
|
2012-09-14 07:03:47 +02:00
|
|
|
|
2012-08-12 06:14:23 +02:00
|
|
|
public Packet() {
|
|
|
|
packetID = ((Integer) a.get(this.getClass())).intValue();
|
2012-09-14 07:03:47 +02:00
|
|
|
}
|
|
|
|
// CraftBukkit end
|
2011-04-23 02:06:48 +02:00
|
|
|
|
|
|
|
static void a(int i, boolean flag, boolean flag1, Class oclass) {
|
2012-07-29 09:33:13 +02:00
|
|
|
if (l.b(i)) {
|
2011-04-23 02:06:48 +02:00
|
|
|
throw new IllegalArgumentException("Duplicate packet id:" + i);
|
2011-11-20 09:01:14 +01:00
|
|
|
} else if (a.containsKey(oclass)) {
|
2011-04-23 02:06:48 +02:00
|
|
|
throw new IllegalArgumentException("Duplicate packet class:" + oclass);
|
|
|
|
} else {
|
2012-07-29 09:33:13 +02:00
|
|
|
l.a(i, oclass);
|
2011-11-20 09:01:14 +01:00
|
|
|
a.put(oclass, Integer.valueOf(i));
|
2011-04-23 02:06:48 +02:00
|
|
|
if (flag) {
|
2011-11-20 09:01:14 +01:00
|
|
|
b.add(Integer.valueOf(i));
|
2011-04-23 02:06:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (flag1) {
|
2012-02-29 22:31:04 +01:00
|
|
|
c.add(Integer.valueOf(i));
|
2011-04-23 02:06:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-03-13 23:33:27 +01:00
|
|
|
public static Packet a(IConsoleLogManager iconsolelogmanager, int i) {
|
2011-04-23 02:06:48 +02:00
|
|
|
try {
|
2012-07-29 09:33:13 +02:00
|
|
|
Class oclass = (Class) l.get(i);
|
2011-04-23 02:06:48 +02:00
|
|
|
|
|
|
|
return oclass == null ? null : (Packet) oclass.newInstance();
|
|
|
|
} catch (Exception exception) {
|
|
|
|
exception.printStackTrace();
|
2013-03-13 23:33:27 +01:00
|
|
|
iconsolelogmanager.severe("Skipping packet with id " + i);
|
2011-04-23 02:06:48 +02:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public static void a(DataOutput dataoutput, byte[] abyte) throws IOException { // CraftBukkit - throws IOException
|
|
|
|
dataoutput.writeShort(abyte.length);
|
|
|
|
dataoutput.write(abyte);
|
2012-07-29 09:33:13 +02:00
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public static byte[] b(DataInput datainput) throws IOException { // CraftBukkit - throws IOException
|
|
|
|
short short1 = datainput.readShort();
|
2012-07-29 09:33:13 +02:00
|
|
|
|
|
|
|
if (short1 < 0) {
|
|
|
|
throw new IOException("Key was smaller than nothing! Weird key!");
|
|
|
|
} else {
|
|
|
|
byte[] abyte = new byte[short1];
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
datainput.readFully(abyte);
|
2012-07-29 09:33:13 +02:00
|
|
|
return abyte;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-03-13 23:33:27 +01:00
|
|
|
public final int n() {
|
2012-08-12 06:14:23 +02:00
|
|
|
return packetID; // ((Integer) a.get(this.getClass())).intValue(); // CraftBukkit
|
2011-04-23 02:06:48 +02:00
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public static Packet a(IConsoleLogManager iconsolelogmanager, DataInput datainput, boolean flag, Socket socket) throws IOException { // CraftBukkit - throws IOException
|
2011-04-23 02:06:48 +02:00
|
|
|
boolean flag1 = false;
|
|
|
|
Packet packet = null;
|
2012-10-25 05:53:23 +02:00
|
|
|
int i = socket.getSoTimeout();
|
2011-04-23 02:06:48 +02:00
|
|
|
|
2012-10-25 05:53:23 +02:00
|
|
|
int j;
|
2011-04-23 02:06:48 +02:00
|
|
|
|
|
|
|
try {
|
2013-07-01 13:03:00 +02:00
|
|
|
j = datainput.readUnsignedByte();
|
2012-10-25 05:53:23 +02:00
|
|
|
if (flag && !c.contains(Integer.valueOf(j)) || !flag && !b.contains(Integer.valueOf(j))) {
|
|
|
|
throw new IOException("Bad packet id " + j);
|
2011-04-23 02:06:48 +02:00
|
|
|
}
|
|
|
|
|
2013-03-13 23:33:27 +01:00
|
|
|
packet = a(iconsolelogmanager, j);
|
2011-04-23 02:06:48 +02:00
|
|
|
if (packet == null) {
|
2012-10-25 05:53:23 +02:00
|
|
|
throw new IOException("Bad packet id " + j);
|
|
|
|
}
|
|
|
|
|
2013-03-13 23:33:27 +01:00
|
|
|
packet.m = iconsolelogmanager;
|
2012-10-25 05:53:23 +02:00
|
|
|
if (packet instanceof Packet254GetInfo) {
|
|
|
|
socket.setSoTimeout(1500);
|
2011-04-23 02:06:48 +02:00
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
packet.a(datainput);
|
2013-03-13 23:33:27 +01:00
|
|
|
++o;
|
|
|
|
p += (long) packet.a();
|
2011-04-23 02:06:48 +02:00
|
|
|
} catch (EOFException eofexception) {
|
2013-09-11 01:45:36 +02:00
|
|
|
//iconsolelogmanager.severe("Reached end of stream for " + socket.getInetAddress()); // CraftBukkit - remove unnecessary logging
|
2011-04-23 02:06:48 +02:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2011-04-23 10:47:38 +02:00
|
|
|
// CraftBukkit start
|
2011-06-27 00:25:01 +02:00
|
|
|
catch (java.net.SocketTimeoutException exception) {
|
2013-03-20 21:09:23 +01:00
|
|
|
iconsolelogmanager.info("Read timed out");
|
2011-04-23 10:47:38 +02:00
|
|
|
return null;
|
2011-06-27 00:25:01 +02:00
|
|
|
} catch (java.net.SocketException exception) {
|
2013-03-20 21:09:23 +01:00
|
|
|
iconsolelogmanager.info("Connection reset");
|
2011-04-23 10:47:38 +02:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
// CraftBukkit end
|
|
|
|
|
2012-10-25 05:53:23 +02:00
|
|
|
PacketCounter.a(j, (long) packet.a());
|
2013-03-13 23:33:27 +01:00
|
|
|
++o;
|
|
|
|
p += (long) packet.a();
|
2012-10-25 05:53:23 +02:00
|
|
|
socket.setSoTimeout(i);
|
2011-04-23 02:06:48 +02:00
|
|
|
return packet;
|
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public static void a(Packet packet, DataOutput dataoutput) throws IOException { // CraftBukkit - throws IOException
|
|
|
|
dataoutput.write(packet.n());
|
|
|
|
packet.a(dataoutput);
|
2013-03-13 23:33:27 +01:00
|
|
|
++q;
|
|
|
|
r += (long) packet.a();
|
2011-04-23 02:06:48 +02:00
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public static void a(String s, DataOutput dataoutput) throws IOException { // CraftBukkit - throws IOException
|
2011-04-23 02:06:48 +02:00
|
|
|
if (s.length() > 32767) {
|
|
|
|
throw new IOException("String too big");
|
|
|
|
} else {
|
2013-07-01 13:03:00 +02:00
|
|
|
dataoutput.writeShort(s.length());
|
|
|
|
dataoutput.writeChars(s);
|
2011-04-23 02:06:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public static String a(DataInput datainput, int i) throws IOException { // CraftBukkit - throws IOException
|
|
|
|
short short1 = datainput.readShort();
|
2011-04-23 02:06:48 +02:00
|
|
|
|
|
|
|
if (short1 > i) {
|
|
|
|
throw new IOException("Received string length longer than maximum allowed (" + short1 + " > " + i + ")");
|
|
|
|
} else if (short1 < 0) {
|
|
|
|
throw new IOException("Received string length is less than zero! Weird string!");
|
|
|
|
} else {
|
|
|
|
StringBuilder stringbuilder = new StringBuilder();
|
|
|
|
|
|
|
|
for (int j = 0; j < short1; ++j) {
|
2013-07-01 13:03:00 +02:00
|
|
|
stringbuilder.append(datainput.readChar());
|
2011-04-23 02:06:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return stringbuilder.toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public abstract void a(DataInput datainput) throws IOException; // CraftBukkit - throws IOException
|
2011-04-23 02:06:48 +02:00
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public abstract void a(DataOutput dataoutput) throws IOException; // CraftBukkit - throws IOException
|
2011-04-23 02:06:48 +02:00
|
|
|
|
2012-12-20 05:03:52 +01:00
|
|
|
public abstract void handle(Connection connection);
|
2011-04-23 02:06:48 +02:00
|
|
|
|
|
|
|
public abstract int a();
|
|
|
|
|
2012-07-29 09:33:13 +02:00
|
|
|
public boolean e() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean a(Packet packet) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean a_() {
|
2013-07-01 13:03:00 +02:00
|
|
|
return this instanceof Packet3Chat && !((Packet3Chat) this).message.startsWith("/"); // CraftBukkit - async chat
|
2012-07-29 09:33:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public String toString() {
|
|
|
|
String s = this.getClass().getSimpleName();
|
|
|
|
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public static ItemStack c(DataInput datainput) throws IOException { // CraftBukkit - throws IOException
|
2011-11-20 09:01:14 +01:00
|
|
|
ItemStack itemstack = null;
|
2013-07-01 13:03:00 +02:00
|
|
|
short short1 = datainput.readShort();
|
2011-11-20 09:01:14 +01:00
|
|
|
|
|
|
|
if (short1 >= 0) {
|
2013-07-01 13:03:00 +02:00
|
|
|
byte b0 = datainput.readByte();
|
|
|
|
short short2 = datainput.readShort();
|
2011-11-20 09:01:14 +01:00
|
|
|
|
|
|
|
itemstack = new ItemStack(short1, b0, short2);
|
2013-07-01 13:03:00 +02:00
|
|
|
itemstack.tag = d(datainput);
|
|
|
|
// CraftBukkit start
|
|
|
|
if (itemstack.tag != null) {
|
|
|
|
CraftItemStack.setItemMeta(itemstack, CraftItemStack.getItemMeta(itemstack));
|
|
|
|
}
|
|
|
|
// CraftBukkit end
|
2011-11-20 09:01:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return itemstack;
|
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public static void a(ItemStack itemstack, DataOutput dataoutput) throws IOException { // CraftBukkit - throws IOException
|
2012-12-20 17:45:12 +01:00
|
|
|
if (itemstack == null || itemstack.getItem() == null) { // CraftBukkit - NPE fix itemstack.getItem()
|
2013-07-01 13:03:00 +02:00
|
|
|
dataoutput.writeShort(-1);
|
2011-11-20 09:01:14 +01:00
|
|
|
} else {
|
2013-07-01 13:03:00 +02:00
|
|
|
dataoutput.writeShort(itemstack.id);
|
|
|
|
dataoutput.writeByte(itemstack.count);
|
|
|
|
dataoutput.writeShort(itemstack.getData());
|
2012-07-29 09:33:13 +02:00
|
|
|
NBTTagCompound nbttagcompound = null;
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
if (itemstack.getItem().usesDurability() || itemstack.getItem().s()) {
|
2012-07-29 09:33:13 +02:00
|
|
|
nbttagcompound = itemstack.tag;
|
2011-11-20 09:01:14 +01:00
|
|
|
}
|
2012-07-29 09:33:13 +02:00
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
a(nbttagcompound, dataoutput);
|
2011-11-20 09:01:14 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
public static NBTTagCompound d(DataInput datainput) throws IOException { // CraftBukkit - throws IOException
|
|
|
|
short short1 = datainput.readShort();
|
2011-11-20 09:01:14 +01:00
|
|
|
|
|
|
|
if (short1 < 0) {
|
|
|
|
return null;
|
|
|
|
} else {
|
|
|
|
byte[] abyte = new byte[short1];
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
datainput.readFully(abyte);
|
2011-11-30 00:17:43 +01:00
|
|
|
return NBTCompressedStreamTools.a(abyte);
|
2011-11-20 09:01:14 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
protected static void a(NBTTagCompound nbttagcompound, DataOutput dataoutput) throws IOException { // CraftBukkit - throws IOException
|
2011-11-20 09:01:14 +01:00
|
|
|
if (nbttagcompound == null) {
|
2013-07-01 13:03:00 +02:00
|
|
|
dataoutput.writeShort(-1);
|
2011-11-20 09:01:14 +01:00
|
|
|
} else {
|
2011-11-30 00:17:43 +01:00
|
|
|
byte[] abyte = NBTCompressedStreamTools.a(nbttagcompound);
|
2011-11-20 09:01:14 +01:00
|
|
|
|
2013-07-01 13:03:00 +02:00
|
|
|
dataoutput.writeShort((short) abyte.length);
|
|
|
|
dataoutput.write(abyte);
|
2011-11-20 09:01:14 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-04-23 02:06:48 +02:00
|
|
|
static {
|
|
|
|
a(0, true, true, Packet0KeepAlive.class);
|
|
|
|
a(1, true, true, Packet1Login.class);
|
2012-07-29 09:33:13 +02:00
|
|
|
a(2, false, true, Packet2Handshake.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(3, true, true, Packet3Chat.class);
|
|
|
|
a(4, true, false, Packet4UpdateTime.class);
|
|
|
|
a(5, true, false, Packet5EntityEquipment.class);
|
|
|
|
a(6, true, false, Packet6SpawnPosition.class);
|
|
|
|
a(7, false, true, Packet7UseEntity.class);
|
|
|
|
a(8, true, false, Packet8UpdateHealth.class);
|
|
|
|
a(9, true, true, Packet9Respawn.class);
|
|
|
|
a(10, true, true, Packet10Flying.class);
|
|
|
|
a(11, true, true, Packet11PlayerPosition.class);
|
|
|
|
a(12, true, true, Packet12PlayerLook.class);
|
|
|
|
a(13, true, true, Packet13PlayerLookMove.class);
|
|
|
|
a(14, false, true, Packet14BlockDig.class);
|
|
|
|
a(15, false, true, Packet15Place.class);
|
2012-12-20 05:03:52 +01:00
|
|
|
a(16, true, true, Packet16BlockItemSwitch.class);
|
2011-11-30 00:17:43 +01:00
|
|
|
a(17, true, false, Packet17EntityLocationAction.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(18, true, true, Packet18ArmAnimation.class);
|
|
|
|
a(19, false, true, Packet19EntityAction.class);
|
|
|
|
a(20, true, false, Packet20NamedEntitySpawn.class);
|
|
|
|
a(22, true, false, Packet22Collect.class);
|
|
|
|
a(23, true, false, Packet23VehicleSpawn.class);
|
|
|
|
a(24, true, false, Packet24MobSpawn.class);
|
|
|
|
a(25, true, false, Packet25EntityPainting.class);
|
2011-09-15 02:23:52 +02:00
|
|
|
a(26, true, false, Packet26AddExpOrb.class);
|
2013-07-01 13:03:00 +02:00
|
|
|
a(27, false, true, Packet27PlayerInput.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(28, true, false, Packet28EntityVelocity.class);
|
|
|
|
a(29, true, false, Packet29DestroyEntity.class);
|
|
|
|
a(30, true, false, Packet30Entity.class);
|
|
|
|
a(31, true, false, Packet31RelEntityMove.class);
|
|
|
|
a(32, true, false, Packet32EntityLook.class);
|
|
|
|
a(33, true, false, Packet33RelEntityMoveLook.class);
|
|
|
|
a(34, true, false, Packet34EntityTeleport.class);
|
2012-03-01 11:49:23 +01:00
|
|
|
a(35, true, false, Packet35EntityHeadRotation.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(38, true, false, Packet38EntityStatus.class);
|
|
|
|
a(39, true, false, Packet39AttachEntity.class);
|
|
|
|
a(40, true, false, Packet40EntityMetadata.class);
|
2011-09-15 02:23:52 +02:00
|
|
|
a(41, true, false, Packet41MobEffect.class);
|
|
|
|
a(42, true, false, Packet42RemoveMobEffect.class);
|
|
|
|
a(43, true, false, Packet43SetExperience.class);
|
2013-07-01 13:03:00 +02:00
|
|
|
a(44, true, false, Packet44UpdateAttributes.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(51, true, false, Packet51MapChunk.class);
|
|
|
|
a(52, true, false, Packet52MultiBlockChange.class);
|
|
|
|
a(53, true, false, Packet53BlockChange.class);
|
|
|
|
a(54, true, false, Packet54PlayNoteBlock.class);
|
2012-07-29 09:33:13 +02:00
|
|
|
a(55, true, false, Packet55BlockBreakAnimation.class);
|
|
|
|
a(56, true, false, Packet56MapChunkBulk.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(60, true, false, Packet60Explosion.class);
|
2011-11-30 00:17:43 +01:00
|
|
|
a(61, true, false, Packet61WorldEvent.class);
|
2012-07-29 09:33:13 +02:00
|
|
|
a(62, true, false, Packet62NamedSoundEffect.class);
|
2013-03-13 23:33:27 +01:00
|
|
|
a(63, true, false, Packet63WorldParticles.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(70, true, false, Packet70Bed.class);
|
|
|
|
a(71, true, false, Packet71Weather.class);
|
|
|
|
a(100, true, false, Packet100OpenWindow.class);
|
|
|
|
a(101, true, true, Packet101CloseWindow.class);
|
|
|
|
a(102, false, true, Packet102WindowClick.class);
|
|
|
|
a(103, true, false, Packet103SetSlot.class);
|
|
|
|
a(104, true, false, Packet104WindowItems.class);
|
|
|
|
a(105, true, false, Packet105CraftProgressBar.class);
|
|
|
|
a(106, true, true, Packet106Transaction.class);
|
2011-09-15 02:23:52 +02:00
|
|
|
a(107, true, true, Packet107SetCreativeSlot.class);
|
2011-11-30 00:17:43 +01:00
|
|
|
a(108, false, true, Packet108ButtonClick.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(130, true, true, Packet130UpdateSign.class);
|
2011-11-30 00:17:43 +01:00
|
|
|
a(131, true, false, Packet131ItemData.class);
|
2012-03-01 11:49:23 +01:00
|
|
|
a(132, true, false, Packet132TileEntityData.class);
|
2013-07-09 01:43:37 +02:00
|
|
|
a(133, true, false, Packet133OpenTileEntity.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(200, true, false, Packet200Statistic.class);
|
2011-09-15 02:23:52 +02:00
|
|
|
a(201, true, false, Packet201PlayerInfo.class);
|
2012-03-22 21:39:39 +01:00
|
|
|
a(202, true, true, Packet202Abilities.class);
|
2012-07-29 09:33:13 +02:00
|
|
|
a(203, true, true, Packet203TabComplete.class);
|
|
|
|
a(204, false, true, Packet204LocaleAndViewDistance.class);
|
|
|
|
a(205, false, true, Packet205ClientCommand.class);
|
2013-03-13 23:33:27 +01:00
|
|
|
a(206, true, false, Packet206SetScoreboardObjective.class);
|
|
|
|
a(207, true, false, Packet207SetScoreboardScore.class);
|
|
|
|
a(208, true, false, Packet208SetScoreboardDisplayObjective.class);
|
|
|
|
a(209, true, false, Packet209SetScoreboardTeam.class);
|
2012-01-12 23:10:13 +01:00
|
|
|
a(250, true, true, Packet250CustomPayload.class);
|
2012-07-29 09:33:13 +02:00
|
|
|
a(252, true, true, Packet252KeyResponse.class);
|
|
|
|
a(253, true, false, Packet253KeyRequest.class);
|
2011-09-15 02:23:52 +02:00
|
|
|
a(254, false, true, Packet254GetInfo.class);
|
2011-04-23 02:06:48 +02:00
|
|
|
a(255, true, true, Packet255KickDisconnect.class);
|
|
|
|
}
|
|
|
|
}
|