Commit Graph

183 Commits

Author SHA1 Message Date
joo
73728957e7 Allow reconnection from within exception handlers
This implements the changes suggested in
<https://github.com/ammaraskar/pyCraft/issues/146#issuecomment-738914064>,
i.e.:

1. `minecraft.networking.Connection.disconnect' now correctly terminates the
   new networking thread if it is still waiting to replace the old one, and

2. `minecraft.networking.Connectoin._handle_exception' no longer calls
   `disconnect' if any exception handler has initiated a new connection.
2020-12-07 23:47:48 +01:00
joo
93db454cb5 Add test case reproducing #146 (fixed to behave consistently) 2020-12-04 17:06:39 +01:00
joo
969419da3f Fix: non-monotonic protocol versions are not correctly handled
After 1.16.3, Mojang started publishing snapshot, pre-release and release
candidate versions of Minecraft with protocol version numbers of the form
`(1 << 30) | n' where 'n' is a small non-negative integer increasing with each
such version; the release versions continued to use the old format. For
example, these are the last 8 published Minecraft versions as of this commit:

release           1.16.3      uses protocol version 753
pre-release       1.16.4-pre1 uses protocol version 1073741825 == (1 << 30) | 1
pre-release       1.16.4-pre2 uses protocol version 1073741826 == (1 << 30) | 2
release candidate 1.16.4-rc1  uses protocol version 1073741827 == (1 << 30) | 3
release           1.16.4      uses protocol version 754
snapshot          20w45a      uses protocol version 1073741829 == (1 << 30) | 5
snapshot          20w46a      uses protocol version 1073741830 == (1 << 30) | 6
snapshot          20w48a      uses protocol version 1073741831 == (1 << 30) | 7

This means that protocol versions no longer increase monotonically with respect
to publication history, a property that was assumed to hold in much of
pyCraft's code relating to support of multiple protocol versions. This commit
rectifies the issue by replacing any comparison of protocol versions by their
numerical value with a comparison based on their publication time.

Newly defined is the dictionary `minecraft.PROTOCOL_VERSION_INDICES', which
maps each known protocol version to its index in the protocol chronology. As
such, the bound method `minecraft.PROTOCOL_VERSION_INDICES.get` can be used as
a key function for the built-in `sorted`, `min` and `max` functions to collate
protocol versions chronologically.

Two utility functions are provided for direct comparison of protocol versions:
    `minecraft.utility.protocol_earlier` and
    `minecraft.utility.protocol_earlier_eq`.

Additionally, four methods are added to the `ConnectionContext` type to ease
the most common cases where the protocol of a given context must be compared to
a given version number:
    `minecraft.connection.ConnectionContext.protocol_earlier`,
    `minecraft.connection.ConnectionContext.protocol_earlier_eq`,
    `minecraft.connection.ConnectionContext.protocol_later` and
    `minecraft.connection.ConnectionContext.protocol_later_eq`.
2020-12-02 15:11:39 +01:00
joo
f37feeca18 Fix: MultiBlockChangePacket.ChunkSectionPos reads/writes incorrectly 2020-09-10 16:35:53 +02:00
joo
cf93923acc Fix: EntityPositionDeltaPacket.delta_{x,y,z} use wrong format 2020-09-01 00:49:35 +02:00
joo
eae6e5c9cd Fix EntityPositionDeltaPacket format for 1.8.9; closes #190 2020-09-01 00:39:49 +02:00
joo
e434497dc7 Add type for general fixed-point numbers 2020-09-01 00:37:48 +02:00
joo
3c84c2a429 Merge branch 'v1.16' into master 2020-08-19 20:27:11 +02:00
laundmo
2947aa6619
Added listener decorator documentation (#161)
* added decorator example to connection.rst

since decorators are more pythonic, it was put in front of the register method.

* Expanded listener decorator docstring

* changed autofunction to autodecorator

* removed whitespace in empty line

* remvoed trailing whitespace

i didn't even edit there WTF
2020-08-17 17:49:25 +02:00
joo
fcacb8abf8 Remove trailing space from join_game_and_respawn_packets.py 2020-08-17 12:01:03 +02:00
joo
4c35517157 Fix support for Minecraft 20w06a to 1.16.2 (protocols 701 to 751) 2020-08-17 11:25:30 +02:00
joo
b79f8b30eb Remove support for Python 2.7 2020-08-17 07:10:10 +02:00
joo
84df884ca4 Remove 'Packet.packet_id' attribute, replacing with 'id' 2020-08-17 05:39:48 +02:00
joo
c6afe25429 Remove 'UUIDIntegerArray' type, as 'UUID' already exists 2020-08-16 05:40:13 +02:00
Sillyfrog
8a098b399b Support for v1.16.2 2020-08-13 22:19:04 +10:00
Sillyfrog
b582029099 Support for 1.16-rc1 2020-06-19 09:18:29 +10:00
Tristan Gosselin-Hane
0343df918c Fixed packet types 2020-05-22 12:49:02 -04:00
Tristan Gosselin-Hane
9c08c6c9f5 Added support for snapshots 20w20a and 20w20b 2020-05-14 21:37:25 -04:00
Tristan Gosselin-Hane
8cb02e7f7f Added support for snapshot 20w18a 2020-05-04 12:04:04 -04:00
Tristan Gosselin-Hane
7380bc2c61 Added support for snapshots 20w13b, 20w14a, 20w15a, 20w16a 2020-04-17 00:07:41 -04:00
Tristan Gosselin-Hane
428a599f40 Added support for snapshot 20w13a 2020-04-16 20:54:51 -04:00
Tristan Gosselin-Hane
76f7b4bdc9 Added support for snapshot 20w12a 2020-03-20 15:00:31 -04:00
joo
b38adc1aa1 Add pre-release versions between 1.14.4 and 1.15.1; update test config 2020-01-08 16:15:42 +01:00
Sillyfrog
51c618aeb5 Support v1.15.1 2019-12-23 21:53:16 -05:00
Sillyfrog
e1afabcba5 Add support for v1.15 2019-12-23 21:53:10 -05:00
joodicator
bbbd3fb195 Add pre-release versions for 1.14.3 and 1.14.4 2019-08-16 00:16:41 +02:00
joodicator
a03e1a7c47 Fix: MutableRecord interprets __slots__ incorrectly (issue #133) 2019-07-03 19:53:30 +02:00
joodicator
e3d2b1a368 Improve metadata and auxiliary methods of existing packets.
* 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.
2019-06-08 15:39:24 +02:00
joodicator
a3357762d7 Add tests for FacePlayerPacket, Angle; fix bugs; misc. changes
* Add alias FacePlayerPacket.target for x, y, z fields.
* Replace FacePlayerPacket.OriginPoint type alias with Origin and
  EntityOrigin aliases.
2019-05-18 02:36:36 +02:00
Zachy
b0a9a3693c Remove white space 2019-05-17 21:45:21 +01:00
Zachy
e8a0e34aef Feedback: Replace FeetEyes convention with OriginPoint for forward compat 2019-05-17 21:38:57 +01:00
Zachy
0b127da0ca Feedback: Correct Fixed Point conversion & take mod of angle send value 2019-05-17 21:31:33 +01:00
Zachy
a60b513e74 Fix import order 2019-05-17 02:15:01 +01:00
Zachy
93f6d269da Fix tests to work with new Angle type@ 2019-05-17 02:09:27 +01:00
Zachy
22008c5c5c New line at end of file 2019-05-15 14:18:49 +01:00
Zachy
3c594a1386 Remove debugging print statement and make send static 2019-05-15 13:59:23 +01:00
Zachy
7361f761f5 Implement type 'Angle', packet 'EntityLookPacket' and fix Packet Types
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
2019-05-15 13:51:31 +01:00
Zachy
d7b560a9f4 Implement FacePlayerPacket
Called when using the teleport chat command and you specify a facing parameter. `/teleport [<targets>] <x> <y> <z> facing`
2019-05-15 01:28:56 +01:00
joodicator
7b1567c352 Improve test coverage wrt protocol versions; other fixes/improvements
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.
2019-05-14 18:41:58 +02:00
joodicator
d24b6eaded Update SoundEffectPacket and UseItemPacket to 1.14; misc improvements 2019-05-13 21:58:59 +02:00
joodicator
faf02acf62 Merge branch 'master' into packets 2019-05-13 21:28:02 +02:00
joodicator
e4f8b5583a Fix: networking.types.utility.__all__ is incorrect. 2019-05-13 21:24:41 +02:00
joodicator
24ca96accb Merge branch 'master' into patch-2 2019-05-13 19:02:23 +02:00
joodicator
bf719611ec Update RespawnPacket and ServerDifficultyPacket to 1.14. 2019-05-13 18:23:05 +02:00
joo
d627423949 Merge branch 'master' into patch-1 2019-05-13 18:02:01 +02:00
joodicator
612fa8e324 Add support for Minecraft 18w43a to 1.14 (protocols 441 to 477)
This commit introduces two backward-incompatible changes which may break
existing code:

(1) `networking.packets.clientbound.play.SpawnObjectPacket.EntityType'
is no longer accessible as an attribute of the the `SpawnObjectPacket'
class: the values now depend on a `ConnectionContext`, and must be
accessed through an instance, or using `SpawnObjectPacket.field_enum'.
See the text of the `AttributeError` raised from the descriptor for
`SpawnObjectPacket.EntityType` for the full details.

(2) For some subclasses of `networking.types.Type', it is necessary to
call the methods `read_with_context' and `send_with_context' instead of
`read' and `send', supplying a `ConnectionContext' for those data types
- currently only `Position` - whose layout depends on it.
2019-05-11 08:43:51 +02:00
Amund Eggen Svandal
1a1b9803f8 Edit definition of SoundEffectPacket 2019-01-13 23:05:51 +00:00
Amund Eggen Svandal
56d1300db1 Updated id of UseItemPacket 2019-01-13 22:06:39 +00:00
Amund Eggen Svandal
bea661860d Add Use Item packet 2019-01-02 01:38:53 +01:00
Amund Eggen Svandal
e21c0d877f Implement the Sound Effect packet
Information gathered from https://wiki.vg/Protocol_version_numbers.
Due to some difficulties the change from "sound_id" to "sound_name" and
the re-implementation of "sound_category" in the packet may be off by
some protocol versions.
2019-01-02 01:38:14 +01:00