DecoderException kicking clients when using `ItemEntityBundle`
dyc3 opened this issue · 0 comments
dyc3 commented
Valence Version
What You Did
See #536 and playground
Playground
use valence::client::despawn_disconnected_clients;
use valence::entity::item::{ItemEntityBundle, Stack};
use valence::log::LogPlugin;
use valence::network::ConnectionMode;
use valence::prelude::*;
#[allow(unused_imports)]
use crate::extras::*;
const SPAWN_Y: i32 = 64;
pub fn build_app(app: &mut App) {
app.insert_resource(NetworkSettings {
connection_mode: ConnectionMode::Offline,
..Default::default()
})
.add_plugins(DefaultPlugins.build().disable::<LogPlugin>())
.add_systems(Startup, setup)
.add_systems(EventLoopUpdate, toggle_gamemode_on_sneak)
.add_systems(Update, (init_clients, despawn_disconnected_clients))
.run();
}
fn setup(
mut commands: Commands,
server: Res<Server>,
biomes: Res<BiomeRegistry>,
dimensions: Res<DimensionTypeRegistry>,
) {
let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server);
for z in -5..5 {
for x in -5..5 {
layer.chunk.insert_chunk([x, z], UnloadedChunk::new());
}
}
for z in -25..25 {
for x in -25..25 {
layer
.chunk
.set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK);
}
}
let layer = commands.spawn(layer).id();
let mut stack = Stack::default();
stack.count = 1;
stack.item = ItemKind::Diamond;
let bundle = ItemEntityBundle {
item_stack: stack,
position: Position::new(DVec3::new(5.0, SPAWN_Y as f64 + 1., 5.0)),
layer: EntityLayerId(layer),
..Default::default()
};
commands.spawn(bundle);
}
fn init_clients(
mut clients: Query<
(
&mut EntityLayerId,
&mut VisibleChunkLayer,
&mut VisibleEntityLayers,
&mut Position,
&mut GameMode,
),
Added<Client>,
>,
layers: Query<Entity, (With<ChunkLayer>, With<EntityLayer>)>,
) {
for (
mut layer_id,
mut visible_chunk_layer,
mut visible_entity_layers,
mut pos,
mut game_mode,
) in &mut clients
{
let layer = layers.single();
layer_id.0 = layer;
visible_chunk_layer.0 = layer;
visible_entity_layers.0.insert(layer);
pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]);
*game_mode = GameMode::Creative;
}
}
What Went Wrong
Expected to spawn an item entity, instead the client gets disconnected.