Example #1
0
// Handle0D handles incoming requests of packet 0x0D: PlayerPosLook
func Handle0D(server *Server, sender *player.Player) {
	pkt := new(packet.PlayerPosLook)
	pkt.ReadFrom(sender.Conn)

	if pkt.Y > pkt.Stance {
		r := &packet.Disconnect{"Weird packet 0x0D. Server didn't switch Y with Stance."}
		r.WriteTo(sender.Conn)
		return
	}

	// Player is ready for broadcasts
	sender.SetReady()
	// Save position
	sender.SetPos(pkt.X, pkt.Y, pkt.Z)
	sender.SetLook(pkt.Pitch, pkt.Yaw)

	var p packet.Packet

	// BUG(toqueteos): NMS handle relative movements with other packet
	// `packet.EntityRelMove` right now we just teleport to the destination.
	p = &packet.EntityTeleport{
		Entity: sender.Id(),
		X:      pkt.X,
		Y:      pkt.Y,
		Z:      pkt.Z,
		Yaw:    pkt.Yaw,
		Pitch:  pkt.Pitch,
	}
	server.BroadcastPacket(p)

	p = &packet.EntityHeadLook{
		Entity:  sender.Id(),
		HeadYaw: pkt.Yaw,
	}
	server.BroadcastPacket(p)
}