blob: 90c1e96824a1cc0d94347a1c39f735e25303ac83 [file] [log] [blame] [raw]
package protocolsupport.protocol.legacyremapper;
import gnu.trove.iterator.TIntObjectIterator;
import gnu.trove.map.TIntObjectMap;
import protocolsupport.api.ProtocolVersion;
import protocolsupport.protocol.serializer.RecyclableProtocolSupportPacketDataSerializer;
import protocolsupport.protocol.utils.datawatcher.DataWatcherObject;
import protocolsupport.utils.netty.ChannelUtils;
public class LegacyDataWatcherSerializer {
public static byte[] encodeData(ProtocolVersion version, TIntObjectMap<DataWatcherObject<?>> objects) {
RecyclableProtocolSupportPacketDataSerializer serializer = RecyclableProtocolSupportPacketDataSerializer.create(version);
try {
if (!objects.isEmpty()) {
TIntObjectIterator<DataWatcherObject<?>> iterator = objects.iterator();
while (iterator.hasNext()) {
iterator.advance();
DataWatcherObject<?> object = iterator.value();
int tk = ((object.getTypeId(version) << 5) | (iterator.key() & 0x1F)) & 0xFF;
serializer.writeByte(tk);
object.writeToStream(serializer);
}
} else {
//write fake entry with type byte and index 31
serializer.writeByte(31);
serializer.writeByte(0);
}
serializer.writeByte(127);
return ChannelUtils.toArray(serializer);
} finally {
serializer.release();
}
}
}