Commit Graph

91 Commits

Author SHA1 Message Date
joodicator bf49006553 Add support for Minecraft 1.18 and 1.18.1. 2021-12-16 19:39:13 +01:00
joo 93db454cb5 Add test case reproducing #146 (fixed to behave consistently) 2020-12-04 17:06:39 +01:00
joo 7693961fb9 Let fake server tests override the default client exception handler
This can by done by adding an exception handler with `early=True'
in the `_start_client' method of a subclass of
`fake_server._FakeServerTest'.
2020-12-04 15:37:49 +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 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
Sillyfrog b582029099 Support for 1.16-rc1 2020-06-19 09:18:29 +10:00
Tristan Gosselin-Hane 7d9ffb8836 Fix line length 2020-05-22 14:05:45 -04:00
Tristan Gosselin-Hane e61cfffab1 Attempt to fix test? 2020-05-22 13:28:02 -04:00
Tristan Gosselin-Hane 1b714e6449 Update tests to use new join game packet definiton 2020-05-22 12:49:12 -04: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 997f813a6c Add tests for string representation of PlayerListItemPacket (issue #133) 2019-07-03 19:54:15 +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 1012ee8640 Revert: Add tests for Angle (were already present) 2019-05-18 02:54:21 +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 a6c11bbb34 Flake8: Correct E501 line too long (81 > 79 characters) 2019-05-17 21:56:32 +01:00
Zachy 0b127da0ca Feedback: Correct Fixed Point conversion & take mod of angle send value 2019-05-17 21:31:33 +01:00
Zachy 93f6d269da Fix tests to work with new Angle type@ 2019-05-17 02:09:27 +01:00
Zachy 3c594a1386 Remove debugging print statement and make send static 2019-05-15 13:59:23 +01:00
Zachy 0fc8c3bbfe Add tests for new Angle type. 2019-05-15 13:52:13 +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 41ea36c642 Add test coverage for @listener. 2019-05-13 19:04:35 +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
Ammar Askar b4c58477f4 Fixes for flake8 2019-01-04 20:12:07 -05:00
Ammar Askar 6adefa8c75 Add test for new invalidate_previous functionality 2019-01-04 19:59:45 -05:00
joo 527f3d3146 Add support for Minecraft 1.13.2-pre1, 1.13.2-pre2 and 1.13.2 (protocols 402 to 404). 2018-10-26 19:58:20 +01:00
joo 48e1003f42 Fix issue #109 and add regression test. 2018-10-12 17:07:04 +01:00
joo adc8d15ddc Add support for Minecraft 1.13 and 1.13-pre3 to pre10 (protocols 385 to 393).
Add clientbound.login.PluginRequestPacket and serverbound.login.PluginResponsePacket.
2018-07-19 09:50:13 +01:00
joo bea2222c58 Fix: MutableRecord.__ne__ misspelt as '__neq__'.
Add tests for MutableRecord and Position.
2018-06-21 07:06:45 +01:00
joo 4b6feda1cb Various improvements to utility types:
- Add operations for Vector.
- Move some tests into test_utility_types.py.
- Add tests for PositionAndLook and Vector.
2018-06-21 06:39:55 +01:00
Zachy d3a8cc8dfb Implement New Type. FixedPointInteger. (#93)
Fix: SpawnPlayerPacket coordinates read wrongly before protocol 100. Add types.FixedPointInteger.
2018-06-20 05:32:35 +01:00
joo d36a4170ed Add tests for various Connection edge cases. 2018-05-29 01:14:46 +01:00
joo db714f9490 Fix: MapPacket.write_fields() is incorrect. 2018-05-27 17:12:50 +01:00
joo 8578326c2f Add serialisation and tests for SpawnObjectPacket. 2018-05-27 15:36:13 +01:00
joo 709b80b539 Add serialisation and tests for Explosion, {Multi,}BlockChange, and CombatEvent packets. 2018-05-27 13:28:01 +01:00
joo 92f2eff681 Add several tests for the Connection class. 2018-05-27 07:40:13 +01:00
joo ab9ca6dfee Add full connection tests with encryption enabled. 2018-05-27 03:30:43 +01:00
joo 38fa39a236 Extract Hand enum classes to minecraft.networking.types. 2018-03-02 02:07:25 +00:00
joo 0ec2398fb4 Fix: test_authenticate_wrong_credentials is not marked as an Internet test. 2018-01-13 02:37:28 +00:00
joo bfaabcad58 Increase maxDiff for test_authenticate_wrong_credentials. 2018-01-13 01:57:59 +00:00
joo 979468b4f1 test_authenticate_wrong_credentials: compare exception string instead of yggdrasil_message, so failure message is more useful in case the latter is None. 2018-01-06 19:25:55 +00:00
joo 53312f997b tests/fake_server.py: use "except Exception" instead of bare except clauses. 2018-01-06 19:24:22 +00:00
joo e9f095de42 Add ClientSettingsPacket and PluginMessagePacket.
Improve Packet string representation.
2017-08-24 05:49:32 +01:00
joo 3269a022a8 Add KeepAlivePacket test to ConnectTest and derived tests. 2017-08-22 18:16:07 +01:00