ice_iix
46999f59bb
Add protocol version global mutable to merge Metadata18/19 into one
...
Cleans up https://github.com/iceiix/steven/pull/57 1.8.9 (47) multiprotocol support
which added too much code duplication, Metadata19 vs Metadata18, and
different packets for each, the only difference being how it was parsed.
Instead, switch back to using only one Metadata implementation, but with
parsing conditionalized on a new global mutable: SUPPORTED_PROTOCOL_VERSION.
Accessing global mutable state is unsafe but it is only set when
initializing the connection, and only read when deep enough in the code
where it is not feasible to pass otherwise. More elegant, worth it.
2018-12-11 18:18:25 -08:00
ice_iix
1cb671093d
1.8.9 (47) multiprotocol support ( #57 )
...
Protocol 47 (1.8.9-1.8) is the biggest multiprotocol (https://github.com/iceiix/steven/issues/18 ) change yet:
* New chunk format (load_chunk18)
* New metadata format (Metadata18)
* New packets and changes to 13 packets
References:
http://wiki.vg/index.php?title=Protocol&oldid=7368
https://wiki.vg/Protocol_version_numbers#Versions_after_the_Netty_rewrite
https://wiki.vg/Protocol_History#1.8
https://github.com/PrismarineJS/minecraft-data/blob/master/data/pc/1.8/protocol.json
1.8 chunk format: https://wiki.vg/index.php?title=Chunk_Format&oldid=6124
1.9 chunk format: https://wiki.vg/index.php?title=Chunk_Format&oldid=7411
1.8 vs 1.9: https://wiki.vg/index.php?title=Chunk_Format&diff=7411&oldid=6124
https://github.com/PrismarineJS/prismarine-chunk/blob/master/src/pc/1.8/section.js
https://github.com/PrismarineJS/prismarine-chunk/blob/master/src/pc/1.8/chunk.js
Details:
* Add 1.8.9 packet IDs from https://github.com/iceiix/steven/pull/37
* Add ChunkDataBulk, parse the ChunkMeta and save data in Vec<u8>
* Add EntityEquipment u16 variant, EntityStatus, ChunkData u16 variants
* SpawnPlayer with added held item
https://wiki.vg/Protocol_History#15w31a Removed Current Item short from Spawn Player (0x0C)
* SpawnObject no UUID and optional velocity
https://wiki.vg/index.php?title=Protocol&oldid=7368#Spawn_Object
https://wiki.vg/Protocol_History#15w31a
Added Entity UUID after entity ID to Spawn Object (0x0E)
Spawn Object always sends velocity, even if data is 0
* SpawnMob no UUID variant
https://wiki.vg/Protocol_History#15w31a
Added Entity UUID after entity ID to Spawn Mob (0x0F)
* Maps packet without tracking position boolean
https://wiki.vg/index.php?title=Protocol&oldid=7368#Map
https://wiki.vg/Protocol_History#15w34a
Added tracking position boolean to Map (0x34)
* Update Entity NBT was removed and Bossbar added (both 0x49) >1.8
https://wiki.vg/index.php?title=Protocol&oldid=7368#Update_Entity_NBT
https://wiki.vg/Protocol_History#15w31a
Removed Update Entity NBT Packet (0x49)
Added Boss Bar packet (0x4
* Use entity without hands
https://wiki.vg/index.php?title=Protocol&oldid=7368#Use_Entity
https://wiki.vg/Protocol_History#15w31a
Added VarInt enum for selected hand in Use Entity (0x02); only sent if type is interact or interact at
* Player block placement, held item stack and face byte variant
https://wiki.vg/index.php?title=Protocol&oldid=7368#Player_Block_Placement
https://wiki.vg/Protocol_History#15w31a
Face for Player Block Placement is now a VarInt enum instead of a byte
Replaced held item (slot) with VarInt enum selected hand in Player Block Placement
* Arm swing without hands, a packet with no fields, uses a ZST
https://wiki.vg/index.php?title=Protocol&oldid=7368#Animation_2
https://github.com/iceiix/steven/pull/57#issuecomment-444289008
https://doc.rust-lang.org/nomicon/exotic-sizes.html
* ClickWindow uses u8 mode, same as in 15w39c
* ClientSettings without hands
* SpectateTeleport is added before ResourcePackStatus
* Copy load_chunk to load_chunk19 and load_chunk18
* 1.8 chunk reading implementation, load_chunk18
* Support both metadata formats, Metadata18/Metadata19
* Remove fmt::Debug
* Implement formatting in MetadataBase and bounce through fmt::Debug
2018-12-09 12:03:55 -08:00
iceiix
3f5024d4ec
Add 15w39c (74) multiprotocol support ( #56 )
...
Closes https://github.com/iceiix/steven/pull/17
This is the biggest multi-protocol change yet, adding many new packet variants and implementing the most, necessitating a respectable amount of refactoring. The last of the "easy" protocols (already implemented, and cribbed from Steven commit history).
For https://github.com/iceiix/steven/issues/18 Enhance protocol support
* Add 15w39c packet IDs
* Add 15w39c packet changes
* Implement EntityMove i16 and i8 packet variants
* Implement EntityLookAndMove i16 and i8 packet variants
* Implement TeleportPlayer no confirm / with confirm packet variants
* Implement EntityTeleport f64 and i32 packet variants
* Implement SpawnPlayer f64 and i32 packet variants
2018-12-03 19:29:02 -08:00
ice_iix
b6de7103a7
Add 1.9 (107) multiprotocol support
...
Closes https://github.com/iceiix/steven/pull/16
Enhances https://github.com/iceiix/steven/issues/18
2018-12-03 16:06:20 -08:00
ice_iix
166079ab06
Add 1.9.2 (109) multiprotocol support
...
Closes https://github.com/iceiix/steven/pull/15
Enhances https://github.com/iceiix/steven/issues/18
2018-12-03 15:40:57 -08:00
ice_iix
7e54e68d72
Add 1.10.2 (210) multiprotocol support
...
Closes https://github.com/iceiix/steven/pull/14
Enhances https://github.com/iceiix/steven/issues/18
2018-12-03 15:04:39 -08:00
iceiix
d03f102bb8
Multiprotocol support: 1.12.2 and 1.11.2 ( #54 )
...
Adds support for connecting to both 1.12.2 and 1.11.2 (protocols 340 and 316) servers
https://github.com/iceiix/steven/issues/18 Enhance protocol support
Closes https://github.com/iceiix/steven/pull/48 1.11.2 protocol support (316)
* Restore create_ids!() macro in packet identifiers
* Add translate_packet_id() function to map external 1.12.2 packet ids to internal sequential ids
* Implement translate_internal_packet_id() from a new protocol_packet_ids! macro
* Move packet IDs to separate file, v1_12_2.rs
* Change supported protocols constant to an array
* Add v1_11_2 protocol packet IDs (from https://github.com/iceiix/steven/pull/48 )
* Add keep alive packet variants: _i64 (>=1.12.2) and _VarInt (<=1.11.2)
* Abstract protocol versions, can now connect to both 1.12.2 and 1.11.2
* Send protocol version in handshake packet
* Restore 1.11 (315) protocol support as in original (https://github.com/thinkofname/steven ) Steven
2018-12-03 14:22:47 -08:00
iceiix
be6e1f79f1
1.12.2 protocol support (340) ( #40 )
...
* Add new 1.12.2 packets and shift IDs
CraftRecipeResponse
AdvancementTab
SelectAdvancementTab
Advancements
CraftingRecipeRequest
UnlockRecipes
CraftingBookData
* Fix unlock recipes packet, add length-prefixed arrays
https://wiki.vg/index.php?title=Protocol&oldid=14204#Unlock_Recipes
* Update resources to 1.12.2
* Handle NBTTag metadata (value 13), parsed as nbt::NamedTag
https://wiki.vg/index.php?title=Entity_metadata&oldid=14048#Entity_Metadata_Format
https://github.com/iceiix/steven/pull/40#issuecomment-443454757
* Fix entity packet IDs, 0x25 now is Entity https://wiki.vg/index.php?title=Protocol&oldid=14204#Entity
* Add NBT long array (type 12) support
https://wiki.vg/NBT#Specification
* Entity metadata type is now a VarInt, not u8: https://wiki.vg/index.php?title=Entity_metadata&oldid=14048#Entity_Metadata_Format
* Keep alives changed to longs, no longer VarInts
https://wiki.vg/index.php?title=Protocol&oldid=14204#Keep_Alive_.28serverbound.29
* Parse CraftRecipeResponse (0x2b)
* Add structs for advancements data
* Implement Serializable trait for Advancement and AdvancementDisplay
* Implement advancement progress parsing; advancement packet works
* Particle packet adds fallingdust (46) with length 1
https://wiki.vg/index.php?title=Protocol&oldid=14204#Particle_2
2018-12-02 19:37:41 -08:00
iceiix
e8025a0978
1.11.2 (316) protocol update ( #38 )
...
Only a minor update, -1 now indicates no color, so changed u8 to i8:
https://wiki.vg/Protocol_History#16w50a
https://wiki.vg/index.php?title=Protocol&diff=8543&oldid=8405
https://wiki.vg/index.php?title=Protocol&oldid=8543
and updated version numbers. 1.11.2 uses the same 1.11 assets, which can
be found by looking up 1.11.2 in:
https://launchermeta.mojang.com/mc/game/version_manifest.json
https://launchermeta.mojang.com/v1/packages/6bd228727ed48bd7ac7bdc0088587dad0fb7c02b/1.11.2.json
1.11.2/1.11 is compatible except for the version number, which is now sent matching the server (#20 ), so no backwards-compatible branch for 1.11 (315) is needed.
https://github.com/iceiix/steven/issues/18 Enhance protocol support
2018-12-01 10:10:48 -08:00
ice_iix
77cd4ecf35
Use field init shorthand, instead of x:x, just x,
...
https://rust-lang-nursery.github.io/edition-guide/rust-2018/data-types/field-init-shorthand.html
find src -name '*.rs' -exec perl -pe 's/\b(\w+): \1,/$1,/g' -i {} \;
2018-11-04 13:43:30 -08:00
ice_iix
a40cd43a2e
Update to use crate:: for current crate, for Rust 2018 edition
...
From `cargo fix --edition`, see https://rust-lang-nursery.github.io/edition-guide/print.html#the-crate-keyword-refers-to-the-current-crate
2018-11-04 12:06:00 -08:00
ice_iix
db02f9e790
Update try!() to new ? syntax for Rust 2018 edition
...
Not automatically updated, see https://users.rust-lang.org/t/why-does-cargo-fix-replace-try-with-r-try-instead-of/21972/3
There are other tools to replace it, btu this is what I used:
find src -name '*.rs' -exec perl -MRegexp::Common -0777 -pe'$bp=$RE{balanced}{-parens=>"()"}; s/try\!($bp)/substr($1, 1, length($1) - 2) . "?"/ges' -i {} \;
2018-11-04 11:48:51 -08:00
Techcable
1e8c3582ed
Update to Minecraft 1.11 ( Fixes #63 )
2016-12-09 14:32:02 +00:00
Techcable
555b646696
Update to minecraft 1.10.2
2016-07-10 12:23:59 +01:00
Thinkofname
bfbd4fe05a
Clean up the protocol implementation to use generics instead of trait objects
2016-04-08 18:46:07 +01:00
Thinkofname
c2bd5e10c5
Fix the formatting of StatusResponse's example
2016-04-04 23:58:40 +01:00
Thinkofname
ddaf7781ed
Allow documentation on packets to be actually be considered documentation by rustdoc
2016-04-04 23:50:27 +01:00
Thinkofname
98ecd348c6
Replace usages of x,y,z for block positions with Position
2016-04-03 20:53:40 +01:00
Thinkofname
e2fa041607
Support Minecraft 1.9.2
2016-03-31 20:51:58 +01:00
Thinkofname
646381968b
Handle block updates from the server
2016-03-31 15:26:07 +01:00
Thinkofname
c70f9548c6
Follow some of clippy's suggestions
2016-03-26 14:24:26 +00:00
Thinkofname
ba29de40ae
Update to 1.9.0
2016-03-25 20:56:45 +00:00
Thinkofname
b418625a48
Work on login screen, added ui buttons and textboxes (plus tab fixes)
2016-03-20 20:17:21 +00:00
Thinkofname
57fcd3d957
Automatically allocate packet ids ( Fixes #13 )
2016-03-18 11:39:03 +00:00
Thinkofdeath
70b6738d87
Update copyright
2016-03-16 18:25:35 +00:00
Thinkofdeath
f1b940fdd1
Clean up
2016-03-16 18:01:33 +00:00
Thinkofdeath
3704b9eeb8
Reformat using rustfmt
2015-10-07 19:36:59 +01:00
Thinkofdeath
1ab2683a53
Base of ui system
2015-09-18 22:02:08 +01:00
Thinkofdeath
72e27968eb
Add license
2015-09-17 16:23:07 +01:00
Thinkofdeath
ab2336ffca
Complete protocol implementation
2015-09-12 20:31:26 +01:00
Thinkofdeath
e392dafd82
Tabs to spaces
2015-09-10 11:58:42 +01:00
Thinkofdeath
6f6d3c96ca
Main part of the protocol complete
2015-09-10 11:49:41 +01:00
Thinkofdeath
412bbba1ee
Initial commit
2015-09-07 21:11:00 +01:00