- 2,955
- 12
Мне не подходит CustomPayload, мне нужно свой пакет, как я знаю, но я не понимаю, как его хэнделить, так как в аргах пакет хэндлера Packet250CustomPayload
void writeToPacket(int[] data) {
for (int i = 0; i < data.length; i++)
os.writeInt(data[i]);
}
writeToPacket(new int[] {x, y, z});
public class TypeBase {
public static HashMap<Byte, Class> idToClass = new HashMap<Byte, Class>();
public static HashMap<Byte, Class> classToId = new HashMap<Byte, Class>();
public static void addClass(byte id, Class cls) {
idToClass.put(id, cls);
classToId.put(cls, id);
}
public static void init() {
addClass((byte)0, int.class);
addClass((byte)1, short.class);
addClass((byte)2, String.class);
//and so on
}
public static byte getId(Class cls) {
return classToId.get(cls);
}
public static Class getType(int i) {
return idToClass.get(i);
}
}
<... класс пакета ...>
public void writeObject(Object o) {
byte id = TypeBase.getId(o.getClass());
os.writeByte(id);
switch (id) {
case 0: os.writeInt((Integer)o); break;
case 1: os.writeShort((Short)o); break;
case 2: writeString((String)o, os); break;
}
}
public void writeData(Object[] data) {
os.writeByte(data.length);
for (Object o : data)
writeObject(o);
}
public void readData() {
byte n = in.readByte();
for (int i = 0; i < n; i++) {
byte id = in.readByte();
Class cls = TypeBase.getType(id);
//узнаем класс и дальше читаем как надо, не забываем читать нужное количество байт
}
}