Here are some things that should happen before Valence 0.2.0 is released. Not all of these are extracted into issues yet, but they could be with some added detail.
Things to do, roughly in this order:
[x] Reorganize system schedule.
[x] #291
[x] Divide McEntity into smaller components, closing #199.
[x] #269
[x] #296
[x] #308
[x] Reimplement client self-exclusion. Don't send packets for the client's own entity.
[x] Redesign player list. Make every entry an entity.
[x] Consider making valence crate a thin wrapper over valence_anvil, valence_command, valence_core, valence_network, etc. This would avoid circular dependency problems and improve compile performance.
[x] Consider moving network code to separate crate and plugin for more modularity.
[x] Move block entities and chunks into the ECS World. Consider caching chunk handles in view of the client to reduce hashmap lookups. Sort chunk updates nearest to furthest to reduce lag in the client.
[x] Rework valence_anvil. Events should be used to indicate loaded/unloaded/missing chunks. Chunk providers will listen for missing chunks. Make AnvilLevel a component for Instance.
[x] Think about making valence more data-driven. Make blocks and block types entities. This may fix the poor compile times of valence_block. Postponed at least until improvements to bevy_ecs are implemented. Possibly never going to happen.
[x] Proper validation for serverbound inventory packets. #292
[x] #349
[x] Consider adding #[derive(Reflect)] to things in valence_protocol and possibly elsewhere. Put it behind a feature flag.bevy_reflect only supports 'static types.
[x] Move every example into its own package.
[x] #424
[ ] #443
[ ] New particle API.
[ ] New sound API.
[x] #400
[ ] Add proper bounds checks to packets. Fix inconsistencies with the yarn mappings. Implement size limit while encoding and decoding binary NBT.
[ ] #359. Fix entity components having incorrect default values.
[ ] Entity velocity not working?
[ ] #366
[ ] valence_inventory v2.
[x] #404
[ ] #256
[ ] #4
[ ] Examples: Make some complete minigame examples demonstrating bevy states and a variety of valence features.
[x] Make website with (Hugo or Zola) and mdbook. (no javascript dev environments please). #382
[ ] Document everything.
[ ] Populate mdbook getting started guide on the website.
Some other things to look into, but are not strictly necessary for 0.2 (unordered):
[ ] Entity Passengers
[x] #411
[x] #319
[ ] Are non-vanilla dimensions bugged? Needs testing.
[x] Consider allowing for multiple player lists instead of a single global list.
[ ] Implement visibility system. Allow some entities to be visible only to certain clients. #342 and #362.
[ ] Serialization support for anvil worlds.
[ ] Serializing and deserializing entities in anvil worlds?
[ ] Reduce the frequency of sent entity movement updates using a configured component?
[x] Some entities disappearing in cow sphere example? Extract this into issue?
[ ] Pretty printing for SNBT in valence_nbt.
[ ] Set up nix dev env. Is #9 sufficient?
[ ] Use fixed-point angle units instead of floats?
[x] #42
[x] #282
[ ] #210
[x] #104
[ ] #332
[ ] Implement most of the block placement rules, closing #115, #503 and making the building example mostly complete. Consider if valence should have first-class support for placement.
[ ] Figure out how to improve the performance of the terrain example.
[ ] stresser is missing some basic functionality.
[ ] Fill in miscellaneous missing abstractions for the protocol.
Roadmap
Here are some things that should happen before Valence 0.2.0 is released. Not all of these are extracted into issues yet, but they could be with some added detail.
Things to do, roughly in this order:
McEntity
into smaller components, closing #199.valence
crate a thin wrapper overvalence_anvil
,valence_command
,valence_core
,valence_network
, etc. This would avoid circular dependency problems and improve compile performance.Move block entities and chunks into the ECSConsider caching chunk handles in view of the client to reduce hashmap lookups. Sort chunk updates nearest to furthest to reduce lag in the client.World
.valence_anvil
. Events should be used to indicate loaded/unloaded/missing chunks. Chunk providers will listen for missing chunks. MakeAnvilLevel
a component forInstance
.Think about making valence more data-driven. Make blocks and block types entities. This may fix the poor compile times ofPostponed at least until improvements tovalence_block
.bevy_ecs
are implemented. Possibly never going to happen.Consider adding#[derive(Reflect)]
to things invalence_protocol
and possibly elsewhere. Put it behind a feature flag.bevy_reflect
only supports'static
types.Move every example into its own package.valence_inventory
v2.Some other things to look into, but are not strictly necessary for 0.2 (unordered):
Consider allowing for multiple player lists instead of a single global list.valence_nbt
.Consider if valence should have first-class support for placement.stresser
is missing some basic functionality.