valence/crates/valence_protocol/Cargo.toml

45 lines
1.1 KiB
TOML
Raw Normal View History

[package]
name = "valence_protocol"
version = "0.1.0"
edition = "2021"
build = "build/main.rs"
[dependencies]
aes = { version = "0.7.5", optional = true }
anyhow = "1.0.66"
bitfield-struct = "0.3.1"
byteorder = "1.4.3"
bytes = "1.2.1"
cfb8 = { version = "0.7.1", optional = true }
flate2 = { version = "1.0.24", optional = true }
glam = { version = "0.23.0", optional = true }
serde = { version = "1.0.147", features = ["derive"] }
serde_json = "1.0.87"
thiserror = "1.0.37"
tracing = "0.1.37"
uuid = { version = "1.2.1", features = ["serde"] }
ECS Rewrite (#184) This PR redesigns Valence's architecture around the Bevy Entity Component System framework (`bevy_ecs` and `bevy_app`). Along the way, a large number of changes and improvements have been made. - Valence is now a Bevy plugin. This allows Valence to integrate with the wider Bevy ecosystem. - The `Config` trait has been replaced with the plugin struct which is much easier to configure. Async callbacks are grouped into their own trait. - `World` has been renamed to `Instance` to avoid confusion with `bevy_ecs::world::World`. - Entities, clients, player list, and inventories are all just ECS components/resources. There is no need for us to have our own generational arena/slotmap/etc for each one. - Client events use Bevy's event system. Users can read events with the `EventReader` system parameter. This also means that events are dispatched at an earlier stage of the program where access to the full server is available. There is a special "event loop" stage which is used primarily to avoid the loss of ordering information between events. - Chunks have been completely overhauled to be simpler and faster. The distinction between loaded and unloaded chunks has been mostly eliminated. The per-section bitset that tracked changes has been removed, which should further reduce memory usage. More operations on chunks are available such as removal and cloning. - The full client's game profile is accessible rather than just the textures. - Replaced `vek` with `glam` for parity with Bevy. - Basic inventory support has been added. - Various small changes to `valence_protocol`. - New Examples - The terrain and anvil examples are now fully asynchronous and will not block the main tick loop while chunks are loading. # TODOs - [x] Implement and dispatch client events. - ~~[ ] Finish implementing the new entity/chunk update algorithm.~~ New approach ended up being slower. And also broken. - [x] [Update rust-mc-bot to 1.19.3](https://github.com/Eoghanmc22/rust-mc-bot/pull/3). - [x] Use rust-mc-bot to test for and fix any performance regressions. Revert to old entity/chunk update algorithm if the new one turns out to be slower for some reason. - [x] Make inventories an ECS component. - [x] Make player lists an ECS ~~component~~ resource. - [x] Expose all properties of the client's game profile. - [x] Update the examples. - [x] Update `valence_anvil`. - ~~[ ] Update `valence_spatial_index` to use `glam` instead of `vek`.~~ Maybe later - [x] Make entity events use a bitset. - [x] Update docs. Closes #69 Closes #179 Closes #53 --------- Co-authored-by: Carson McManus <dyc3@users.noreply.github.com> Co-authored-by: AviiNL <me@avii.nl> Co-authored-by: Danik Vitek <x3665107@gmail.com> Co-authored-by: Snowiiii <71594357+Snowiiii@users.noreply.github.com>
2023-02-12 04:51:53 +11:00
valence_protocol_macros = { version = "0.1.0", path = "../valence_protocol_macros" }
valence_nbt = { version = "0.5.0", path = "../valence_nbt" }
[[bench]]
name = "benches"
harness = false
[dev-dependencies]
rand = "0.8.5"
criterion = "0.4.0"
valence_protocol = { version = "0.1.0", path = ".", features = ["compression"] }
[build-dependencies]
anyhow = "1.0.65"
heck = "0.4.0"
proc-macro2 = "1.0.43"
quote = "1.0.21"
serde = { version = "1.0.145", features = ["derive"] }
serde_json = "1.0.85"
[features]
encryption = ["dep:aes", "dep:cfb8"]
compression = ["dep:flate2"]
glam = ["dep:glam"]