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
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
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
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
For example, if a server connection times out and you are kicked, Steven
will now show disconnect.reason timeout, versus a non-descriptive
UNHANDLED message. This text is supposed to be looked up in a
translation table for localization, not yet supported, but showing the
translation identifier is more informative than nothing.
For example, if a server connection times out and you are kicked, Steven
will now show disconnect.reason timeout, versus a non-descriptive
UNHANDLED message. This text is supposed to be looked up in a
translation table for localization, not yet supported, but showing the
translation identifier is more informative than nothing.
The packet IDs were assigned by the `create_ids!` macro, in the order they are in
the source code. This reduces flexibility for adopting new protocols, since the
packets can be reordered arbitrarily. Part of https://github.com/iceiix/steven/issues/18
The packet IDs were assigned by the `create_ids!` macro, in the order they are in
the source code. This reduces flexibility for adopting new protocols, since the
packets can be reordered arbitrarily. Part of https://github.com/iceiix/steven/issues/18
The first step of https://github.com/iceiix/steven/issues/18 Enhance protocol support,
instead of hardcoding a fixed version, the client now matches whatever the server sent.
* Get the protocol version to send from the ping packet
* Save/load server protocol versions to disk, server_versions.json
* Fallback to default SUPPORTED_PROTOCOL if no ping response
* Add glutin dependency
* Create a glutin window
* Use the glutin window, basics work
* Store DPI factor on game object, update on Resized
* Use physical size for rendering only. Fixes UI scaled too small
Fixes https://github.com/iceiix/steven/pull/35#issuecomment-442683373
See also https://github.com/iceiix/steven/issues/22
* Begin adding mouse input events
* Listen for DeviceEvents
* Call hover_at on mouse motion
* Listen for CursorMoved window event, hovering works
Glutin has separate WindowEvent::CursorMoved and
DeviceEvent::MouseMotion events, for absolute cursor and relative mouse
motion, respectively, instead of SDL's Event::MouseMotion for both.
* Use tuple pattern matching instead of nested if for MouseInput
* Implement left clicking
* Use grab_cursor() to capture the cursor
* Hide the cursor when grabbing
* Implement MouseWheel event
* Listen for keyboard input, escape key release
* Keyboard input: console toggling, glutin calls backquote 'grave'
* Implement fullscreen in glutin, updates https://github.com/iceiix/steven/pull/31
* Update settings for glutin VirtualKeyCode
* Keyboard controls (note: must clear conf.cfg to use correct bindings)
* Move DeviceEvent match arm up higher for clarity
* Remove SDL
* Pass physical dimensions to renderer tick so blit_framebuffer can use full size but the ui is still sized logically.
* Listen for DeviceEvent::Text
* Implement text input using ReceivedCharacter window event, works
https://github.com/iceiix/steven/pull/35#issuecomment-443247267
* Request specific version of OpenGL, version 3.2
* Request OpenGL 3.2 but fallback to OpenGL ES 2.0 if available (not tested)
* Set core profile and depth 24-bits, stencil 0-bits
* Allow changing vsync, but require restarting (until https://github.com/tomaka/glutin/issues/693)
* Clarify specific Rust version requirement
* Import glutin::* in handle_window_event() to avoid overly repetitive code
* Linux in VM fix: manually calculate delta in MouseMotion
For the third issue on https://github.com/iceiix/steven/pull/35#issuecomment-443084458https://github.com/tomaka/glutin/issues/1084 MouseMotion event returns absolute instead of relative values, when running Linux in a VM
* Heuristic to detect absolute/relative MouseMotion from delta:(xrel, yrel); use a higher scaling factor
* Add clipboard pasting with clipboard crate instead of sdl2
https://github.com/iceiix/steven/pull/35#issuecomment-443307295
Part of fixing graphical rendering bugs: https://github.com/iceiix/steven/issues/25
Corrupted graphics on AMD video cards: https://github.com/Thinkofname/steven/issues/74
The previous workaround set NUM_SAMPLES to 2, but this added an extra texel fetch. Setting to 1 reproduces the 16px blue striped unexpected behavior. Setting to 0 samples avoids the extra fetch and the striping.
This is allowed per http://docs.gl/gl3/glTexImage2DMultisample:
> samples specifies the number of samples in the image and must be in the range zero to GL_MAX_SAMPLES - 1.
https://rust-lang-nursery.github.io/rust-clippy/v0.0.212/index.html#trivially_copy_pass_by_ref
i = 0
ll = map(lambda x: int(x.strip()), file("/tmp/lines").readlines())
ll2 = map(lambda x: int(x.strip()), file("/tmp/lines2").readlines())
for line in file("/Users/admin/games/rust/steven/blocks/src/lib.rs").readlines():
i += 1
line = line[:-1]
if i in ll:
line = line.replace("&self", "self")
if i in ll2:
line = line.replace("*self", "self")
print line
* Add handwritten RSA PKCS1 encryption using num-bigint and simple_asn1
* Add more logging to compare OpenSSL with/without side-by-side
* Log message and ciphertext in hex
* Print N and e as hexadecimal integers
* Fix bad encryption caused by zeros in PKCS1 padding
PS field in https://tools.ietf.org/html/rfc8017#section-7.2.1
Must be nonzero
* Use rand fill instead of rand_bytes
* Remove OpenSSL!
* Update CI scripts and docs to not install OpenSSL
* Remove copying OpenSSL DLLs (libeay and ssleay) in AppVeyor script
* Change rsa_public_encrypt_pkcs1 to return a Result<Vec<u8>, String>
* Add error checking, returning Err<String> on failure; RFC comments
* Add the required message representative range checking
* Use expect() instead of unwrap() on from_der
* Map the ASN.1 error to a String to return it from rsa_public_encrypt_pkcs1() instead of panicking
* Move RSA to a new crate, rsa_public_encrypt_pkcs1
https://github.com/iceiix/rsa_public_encrypt_pkcs1
* Update to rsa_public_encrypt_pkcs1 with simple_asn 0.1.0
https://github.com/iceiix/rsa_public_encrypt_pkcs1/issues/1
* Update to published version of rsa_public_encrypt_pkcs1, 0.1.0
* Remove unnecessarily added blank line
* Remove libssl-dev from .travis.yml
* Add handwritten RSA PKCS1 encryption using num-bigint and simple_asn1
* Add more logging to compare OpenSSL with/without side-by-side
* Log message and ciphertext in hex
* Print N and e as hexadecimal integers
* Fix bad encryption caused by zeros in PKCS1 padding
PS field in https://tools.ietf.org/html/rfc8017#section-7.2.1
Must be nonzero
* Use rand fill instead of rand_bytes
* Remove OpenSSL!
* Update CI scripts and docs to not install OpenSSL
* Remove copying OpenSSL DLLs (libeay and ssleay) in AppVeyor script
* Change rsa_public_encrypt_pkcs1 to return a Result<Vec<u8>, String>
* Add error checking, returning Err<String> on failure; RFC comments
* Add the required message representative range checking
* Use expect() instead of unwrap() on from_der
* Map the ASN.1 error to a String to return it from rsa_public_encrypt_pkcs1() instead of panicking
* Move RSA to a new crate, rsa_public_encrypt_pkcs1
https://github.com/iceiix/rsa_public_encrypt_pkcs1
* Update to rsa_public_encrypt_pkcs1 with simple_asn 0.1.0
https://github.com/iceiix/rsa_public_encrypt_pkcs1/issues/1
* Update to published version of rsa_public_encrypt_pkcs1, 0.1.0
* Remove unnecessarily added blank line
* Remove libssl-dev from .travis.yml
* Remove seemingly unneeded const on MetadataKey<T> new
* Change biome temperature/moisture to integer, x100 to remove floating-point so can use within stable 'const fn'
* Remove unstable const_fn feature, now using stable const fn: see https://www.reddit.com/r/rust/comments/9msqfn/const_fn_soon_on_stable_rust/
* Test on Rust beta (awaiting 1.31 release for stable)
* Update readme for beta Rust support
* Remove seemingly unneeded const on MetadataKey<T> new
* Change biome temperature/moisture to integer, x100 to remove floating-point so can use within stable 'const fn'
* Remove unstable const_fn feature, now using stable const fn: see https://www.reddit.com/r/rust/comments/9msqfn/const_fn_soon_on_stable_rust/
* Test on Rust beta (awaiting 1.31 release for stable)
* Update readme for beta Rust support
* Encrypt with both RustCrypto cfb8 and OpenSSL
* Switch to RustCrypto for decrypting
* Show encryption for both RustCrypto and OpenSSL, for comparison...
* Correct off-by-one error in encryption, cfb8 doesn't need extra byte
* Remove OpenSSL for symmetric crypto
* Update Cargo.lock
* Encrypt with both RustCrypto cfb8 and OpenSSL
* Switch to RustCrypto for decrypting
* Show encryption for both RustCrypto and OpenSSL, for comparison...
* Correct off-by-one error in encryption, cfb8 doesn't need extra byte
* Remove OpenSSL for symmetric crypto
* Update Cargo.lock
An old version of hyper was used before (0.8.0), in the process of updating to hyper 0.12.11, found this higher-level replacement/wrapper, reqwest 0.9.4 which is simpler to use than the latest hyper and serves the purpose of a simple HTTP client well
* Begin updating to hyper 0.12.11
https://github.com/iceiix/steven/issues/4#issuecomment-425759778
* Use type variables for hyper::Client
* Fix setting header syntax, Content-Type: application/json, 17->13
* Parse strings into URLs with url.parse::<hyper::Uri>().unwrap()
b20971cb4e/examples/client.rs (L25)
* Use hyper::Request::post() then client.request() since client.post() removed
* wait() on the ResponseFuture to get the Result
* try! to unwrap the Result
* status() is now a method
* Concatenate body chunks unwrap into bytes, then parse JSON from byte slice, instead of from_reader which didn't compile
* Replace send() with wait() on ResponseFuture
* Parse HeaderValue to u64
* Slices implement std::io::Read trait
* Read into_bytes() instead of read_to_end()
* Disable boxed logger for now to workaround 'expected function, found macro'
* Remove unnecessary mutability, warnings
* Hack to parse twice to avoid double move
* Use hyper-rustls pure Rust implementation for TLS for HTTPS in hyper
* Start converting to reqwest: add Protocol::Error and reqwest::Error conversion
* Use reqwest, replacing hyper, in protocol
* Convert resources to use reqwest instead of hyper
* Convert skin download to reqwest, instead of hyper
* Remove hyper
* Revert unnecessary variable name change req/body to reduce diff
* Revert unnecessary whitespace change to reduce diff, align indentation on .
* Fix authenticating to server, wrong method and join URL
* Update Cargo.lock
An old version of hyper was used before (0.8.0), in the process of updating to hyper 0.12.11, found this higher-level replacement/wrapper, reqwest 0.9.4 which is simpler to use than the latest hyper and serves the purpose of a simple HTTP client well
* Begin updating to hyper 0.12.11
https://github.com/iceiix/steven/issues/4#issuecomment-425759778
* Use type variables for hyper::Client
* Fix setting header syntax, Content-Type: application/json, 17->13
* Parse strings into URLs with url.parse::<hyper::Uri>().unwrap()
b20971cb4e/examples/client.rs (L25)
* Use hyper::Request::post() then client.request() since client.post() removed
* wait() on the ResponseFuture to get the Result
* try! to unwrap the Result
* status() is now a method
* Concatenate body chunks unwrap into bytes, then parse JSON from byte slice, instead of from_reader which didn't compile
* Replace send() with wait() on ResponseFuture
* Parse HeaderValue to u64
* Slices implement std::io::Read trait
* Read into_bytes() instead of read_to_end()
* Disable boxed logger for now to workaround 'expected function, found macro'
* Remove unnecessary mutability, warnings
* Hack to parse twice to avoid double move
* Use hyper-rustls pure Rust implementation for TLS for HTTPS in hyper
* Start converting to reqwest: add Protocol::Error and reqwest::Error conversion
* Use reqwest, replacing hyper, in protocol
* Convert resources to use reqwest instead of hyper
* Convert skin download to reqwest, instead of hyper
* Remove hyper
* Revert unnecessary variable name change req/body to reduce diff
* Revert unnecessary whitespace change to reduce diff, align indentation on .
* Fix authenticating to server, wrong method and join URL
* Update Cargo.lock
* Replace find() with get()
* Update for renamed as_string->as_str and as_boolean->as_bool
https://github.com/serde-rs/json/releases/tag/v0.8.0
Value::as_string() has been renamed to as_str() and Value::as_boolean() has been renamed to as_bool() to improve consistency
https://github.com/serde-rs/json/issues/126
* No serde_json::Value::I64/U64/F64 anymore, only Number
* Update from lookup() to pointer(), using JSON pointer syntax
https://github.com/iceiix/steven/pull/6#issuecomment-432472123
* Remove unused and removed ObjectBuilder import
* Use into_iter().collect() to convert BTreeMap to serde_json::Map
* Change parse_rules to accept serde_json::Map instead of BTreeMap
* Remove unused serde_json macro_use
* Update Cargo.lock
* Replace find() with get()
* Update for renamed as_string->as_str and as_boolean->as_bool
https://github.com/serde-rs/json/releases/tag/v0.8.0
Value::as_string() has been renamed to as_str() and Value::as_boolean() has been renamed to as_bool() to improve consistency
https://github.com/serde-rs/json/issues/126
* No serde_json::Value::I64/U64/F64 anymore, only Number
* Update from lookup() to pointer(), using JSON pointer syntax
https://github.com/iceiix/steven/pull/6#issuecomment-432472123
* Remove unused and removed ObjectBuilder import
* Use into_iter().collect() to convert BTreeMap to serde_json::Map
* Change parse_rules to accept serde_json::Map instead of BTreeMap
* Remove unused serde_json macro_use
* Update Cargo.lock
* Replace find() with get()
* Update for renamed as_string->as_str and as_boolean->as_bool
https://github.com/serde-rs/json/releases/tag/v0.8.0
Value::as_string() has been renamed to as_str() and Value::as_boolean() has been renamed to as_bool() to improve consistency
https://github.com/serde-rs/json/issues/126
* No serde_json::Value::I64/U64/F64 anymore, only Number
* Update from lookup() to pointer(), using JSON pointer syntax
https://github.com/iceiix/steven/pull/6#issuecomment-432472123
* Remove unused and removed ObjectBuilder import
* Use into_iter().collect() to convert BTreeMap to serde_json::Map
* Change parse_rules to accept serde_json::Map instead of BTreeMap
* Remove unused serde_json macro_use
* Update Cargo.lock