aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/tests/simulation/despawn_entities_when_changing_dimension.rs
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2025-12-22 21:43:54 -1400
committermat <git@matdoes.dev>2025-12-22 21:43:54 -1400
commit82e3d46ca319badcbc584cf902aeebcbd30948b9 (patch)
tree4afb8c6135caacbdf9f1f04d451cb2bae1c488b6 /azalea-client/tests/simulation/despawn_entities_when_changing_dimension.rs
parent0429a81d706da7c45600d357f9f9a14cef6113b4 (diff)
downloadazalea-drasl-82e3d46ca319badcbc584cf902aeebcbd30948b9.tar.xz
run azalea-client integration tests as one binary
per https://corrode.dev/blog/tips-for-faster-rust-compile-times/\#combine-all-integration-tests-into-a-single-binary <3
Diffstat (limited to 'azalea-client/tests/simulation/despawn_entities_when_changing_dimension.rs')
-rw-r--r--azalea-client/tests/simulation/despawn_entities_when_changing_dimension.rs81
1 files changed, 81 insertions, 0 deletions
diff --git a/azalea-client/tests/simulation/despawn_entities_when_changing_dimension.rs b/azalea-client/tests/simulation/despawn_entities_when_changing_dimension.rs
new file mode 100644
index 00000000..8619bb2d
--- /dev/null
+++ b/azalea-client/tests/simulation/despawn_entities_when_changing_dimension.rs
@@ -0,0 +1,81 @@
+use azalea_client::test_utils::prelude::*;
+use azalea_core::position::ChunkPos;
+use azalea_entity::metadata::Cow;
+use azalea_protocol::packets::{
+ ConnectionProtocol,
+ config::{ClientboundFinishConfiguration, ClientboundRegistryData},
+};
+use azalea_registry::{
+ DataRegistry, builtin::EntityKind, data::DimensionKind, identifier::Identifier,
+};
+use bevy_ecs::query::With;
+use simdnbt::owned::{NbtCompound, NbtTag};
+
+#[test]
+fn test_despawn_entities_when_changing_dimension() {
+ let _lock = init();
+
+ let mut simulation = Simulation::new(ConnectionProtocol::Configuration);
+ simulation.receive_packet(ClientboundRegistryData {
+ registry_id: Identifier::new("minecraft:dimension_type"),
+ entries: vec![
+ (
+ Identifier::new("minecraft:overworld"),
+ Some(NbtCompound::from_values(vec![
+ ("height".into(), NbtTag::Int(384)),
+ ("min_y".into(), NbtTag::Int(-64)),
+ ])),
+ ),
+ (
+ Identifier::new("minecraft:nether"),
+ Some(NbtCompound::from_values(vec![
+ ("height".into(), NbtTag::Int(256)),
+ ("min_y".into(), NbtTag::Int(0)),
+ ])),
+ ),
+ ]
+ .into_iter()
+ .collect(),
+ });
+ simulation.tick();
+ simulation.receive_packet(ClientboundFinishConfiguration);
+ simulation.tick();
+
+ //
+ // OVERWORLD
+ //
+
+ simulation.receive_packet(make_basic_login_packet(
+ DimensionKind::new_raw(0), // overworld
+ Identifier::new("azalea:a"),
+ ));
+ simulation.tick();
+
+ simulation.receive_packet(make_basic_empty_chunk(ChunkPos::new(0, 0), (384 + 64) / 16));
+ simulation.tick();
+ // spawn a cow
+ simulation.receive_packet(make_basic_add_entity(EntityKind::Cow, 123, (0.5, 64., 0.5)));
+ simulation.tick();
+ // make sure it's spawned
+ let mut cow_query = simulation.app.world_mut().query_filtered::<(), With<Cow>>();
+ let cow_iter = cow_query.iter(simulation.app.world());
+ assert_eq!(cow_iter.count(), 1, "cow should be spawned");
+
+ //
+ // NETHER
+ //
+
+ simulation.receive_packet(make_basic_respawn_packet(
+ DimensionKind::new_raw(1), // nether
+ Identifier::new("azalea:b"),
+ ));
+ simulation.tick();
+
+ // cow should be completely deleted from the ecs
+ let cow_iter = cow_query.iter(simulation.app.world());
+ assert_eq!(
+ cow_iter.count(),
+ 0,
+ "cow should be despawned after switching dimensions"
+ );
+}