* Add multi-attribute aliases to some packets, for user convenience.
* Add support for writing PlayerListItemPacket.
* Add 'fields' attributes to manually-read/written packet classes,
implementing 'field_string' where appropriate to allow enable the
default __repr__ implementation.
* Modify data constructors where appropriate so that __repr__
implementations match their constructor protocols.
* Improve comments on type aliases within packet classes.
* Add/modify tests to cover the new functionality.
* Add Angle type for byte-encoded rotation angles.
* Fix: SpawnPlayerPacket and SpawnObjectPacket use wrong type for pitch/yaw.
* Add FacePlayerPacket and EntityLookPacket.
Remarks: I chose to implement an angle between 0-360 degrees as opposed to -180 - 180. linear transformation, the maths was far simpler converting an UnsignedByte into positive values instead of a Byte into negative and positive
Improvements to the test suite:
* List release version names and numbers in minecraft/__init__.py.
* Make some tests, which previously ran for *all* protocol versions,
run only for release protocol versions (to improve test performance).
* Make some tests, which previously ran only for the latest protocol
version, run for all release protocol versions (to improve coverage).
* Print each protocol version being tested to the debug log, to help
identify sources of errors.
* Use the `nose-timer' plugin to show the run time of each test.
Fix errors revealed by increased test coverage:
* Fix: SoundEffectPacket.Pitch is not serialised correctly for early
protocol versions.
* Fix: handleExceptionTest finishes later than necessary because
the test overrode an exception handler used internally by
`_FakeServerTest', causing the server thread to time out after 4s.
* Add support for multiple exception handlers in `Connection'
(required for the above).
Improvements to data descriptors:
* Make syntax of property declarations more consistent/Pythonic.
* Factor the definition of several aliasing properties into the
utility methods `attribute_alias' and `multi_attribute_alias',
which construct suitable data descriptors.
* Define and use the named tuple `Direction' for (pitch, yaw) values.