Commit Graph

52 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
Andrew So c04e831e19 update to 1.17.1 and minor fixes 2021-12-10 14:53:18 -08:00
jyooru e40fb466ae
lint: W293 2021-07-05 15:56:37 +10:00
jyooru 317f3e62b2
lint: E302 2021-07-05 15:56:07 +10:00
jyooru 550886b414
lint: W292 2021-07-05 15:55:22 +10:00
Andrew So 0169e0aa75 updated all other packets that needed updating 2021-06-12 10:38:15 -07:00
Andrew So dd5c77545b fixed compression typo 2021-06-12 09:08:56 -07:00
Andrew So 6400602625 initial 1.17 update changes 2021-06-11 10:34:27 -07: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 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
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 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 e1afabcba5 Add support for v1.15 2019-12-23 21:53:10 -05: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
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 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 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 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 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
Tristan Gosselin-Hane 316ea4d63d Implemented Player List Header And Footer Packet 2018-11-12 21:22:55 +01:00
Zachy24 103b53a97a Change case on GameMode 2018-08-15 22:29:18 +01:00
Zachy24 da103c6d3c Oops 2018-08-13 01:35:34 +01:00
Zachy24 4ba6a40df6 Add aliases for Enums in Packet Definitions 2018-08-13 00:41:21 +01:00
Zachy aeaf7b5bcb
Import new enums into Packet Definition 2018-08-12 23:12:45 +01:00
Zachy 0198476fa9
Fix packet id for protocol versions 47 and 69. 2018-08-12 22:56:16 +01:00
Zachy e840fab267
Update __init__.py 2018-08-12 11:04:40 +01:00
Zachy 1a114c1b95
Implement clientbound.play.ServerDifficultyPacket 2018-08-12 10:47:50 +01:00
Zachy d20344cac1
Implement clientbound.play.RespawnPacket 2018-08-12 10:39:11 +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
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 709b80b539 Add serialisation and tests for Explosion, {Multi,}BlockChange, and CombatEvent packets. 2018-05-27 13:28:01 +01:00
joo f492adfeff Add support for Minecraft snapshots 17w43a-18w02a (protocol 341-353).
Add support declaration for Minecraft version 1.8.9 (protocol 47).
2018-01-13 01:12:28 +00:00
joo e9f095de42 Add ClientSettingsPacket and PluginMessagePacket.
Improve Packet string representation.
2017-08-24 05:49:32 +01:00
TheSnoozer 61b07f52f2 better packet names to match new packet structure 2017-08-09 16:33:41 +01:00
TheSnoozer 346b3081ec fix broken tests 2017-08-09 16:33:41 +01:00