MCPcopy Create free account
hub / github.com/TyphoonMC/TyphoonCore / ReadPacketWithCompression

Method ReadPacketWithCompression

connection.go:246–320  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

244}
245
246func (player *Player) ReadPacketWithCompression() (packet Packet, err error) {
247 packetLength, err := player.ReadVarInt()
248 if err != nil {
249 return
250 }
251
252 dataLength, err := player.ReadVarInt()
253 if err != nil {
254 return
255 }
256 dataLengthLength := binary.PutUvarint(player.io.buffer[:], uint64(dataLength))
257
258 var id int
259 var length int
260
261 if dataLength == 0 {
262 id, err = player.ReadVarInt()
263 if err != nil {
264 return
265 }
266 idLength := binary.PutUvarint(player.io.buffer[:], uint64(id))
267 length = packetLength - dataLengthLength - idLength
268
269 if player.state == PLAY {
270 id = player.HackServerbound(id)
271 }
272 packet, err = player.HandlePacket(id, length)
273
274 if err != nil {
275 return
276 } else if packet != nil {
277 if config.Logs {
278 log.Printf("#%d u-> %d %s", player.id, id, fmt.Sprint(packet))
279 }
280 packet.Handle(player)
281 }
282 } else {
283 var compressed []byte = make([]byte, packetLength-dataLengthLength)
284 player.conn.Read(compressed[:])
285
286 r, err := zlib.NewReader(bytes.NewReader(compressed[:]))
287 if err != nil {
288 return nil, err
289 }
290
291 var uncompressed []byte = make([]byte, packetLength-dataLengthLength)
292 r.Read(uncompressed[:])
293 r.Close()
294
295 tmp := player.io
296 rdr := bytes.NewBuffer(uncompressed[:])
297 player.io.rdr = rdr
298
299 id, err = player.ReadVarInt()
300 if err != nil {
301 return nil, err
302 }
303

Callers 1

ReadPacketMethod · 0.95

Calls 5

ReadVarIntMethod · 0.95
HackServerboundMethod · 0.95
HandlePacketMethod · 0.95
HandleMethod · 0.65
ReadMethod · 0.65

Tested by

no test coverage detected