aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src/plugins/packet
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2025-05-02 01:20:25 +0000
committermat <git@matdoes.dev>2025-05-02 01:20:25 +0000
commit881055e58711838893416bfc555e0643c5cfa515 (patch)
tree20eca9e01a7422e0a8fb35651307f0420c931339 /azalea-client/src/plugins/packet
parent11a74f215e28d7c3971c9894351567edb68ef0f8 (diff)
downloadazalea-drasl-881055e58711838893416bfc555e0643c5cfa515.tar.xz
fix InstanceName desync
Diffstat (limited to 'azalea-client/src/plugins/packet')
-rw-r--r--azalea-client/src/plugins/packet/config/mod.rs2
-rw-r--r--azalea-client/src/plugins/packet/game/mod.rs25
2 files changed, 18 insertions, 9 deletions
diff --git a/azalea-client/src/plugins/packet/config/mod.rs b/azalea-client/src/plugins/packet/config/mod.rs
index 554135d2..861289b7 100644
--- a/azalea-client/src/plugins/packet/config/mod.rs
+++ b/azalea-client/src/plugins/packet/config/mod.rs
@@ -64,7 +64,7 @@ pub struct ConfigPacketHandler<'a> {
}
impl ConfigPacketHandler<'_> {
pub fn registry_data(&mut self, p: &ClientboundRegistryData) {
- as_system::<Query<&mut InstanceHolder>>(self.ecs, |mut query| {
+ as_system::<Query<&InstanceHolder>>(self.ecs, |mut query| {
let instance_holder = query.get_mut(self.player).unwrap();
let mut instance = instance_holder.instance.write();
diff --git a/azalea-client/src/plugins/packet/game/mod.rs b/azalea-client/src/plugins/packet/game/mod.rs
index 869a795c..71766f8b 100644
--- a/azalea-client/src/plugins/packet/game/mod.rs
+++ b/azalea-client/src/plugins/packet/game/mod.rs
@@ -227,7 +227,7 @@ impl GamePacketHandler<'_> {
let new_instance_name = p.common.dimension.clone();
if let Some(mut instance_name) = instance_name {
- *instance_name = instance_name.clone();
+ **instance_name = new_instance_name.clone();
} else {
commands
.entity(self.player)
@@ -243,7 +243,7 @@ impl GamePacketHandler<'_> {
// add this world to the instance_container (or don't if it's already
// there)
- let weak_instance = instance_container.insert(
+ let weak_instance = instance_container.get_or_insert(
new_instance_name.clone(),
dimension_data.height,
dimension_data.min_y,
@@ -591,7 +591,7 @@ impl GamePacketHandler<'_> {
pub fn set_chunk_cache_center(&mut self, p: &ClientboundSetChunkCacheCenter) {
debug!("Got chunk cache center packet {p:?}");
- as_system::<Query<&mut InstanceHolder>>(self.ecs, |mut query| {
+ as_system::<Query<&InstanceHolder>>(self.ecs, |mut query| {
let instance_holder = query.get_mut(self.player).unwrap();
let mut partial_world = instance_holder.partial_instance.write();
@@ -1122,7 +1122,7 @@ impl GamePacketHandler<'_> {
pub fn block_update(&mut self, p: &ClientboundBlockUpdate) {
debug!("Got block update packet {p:?}");
- as_system::<Query<&mut InstanceHolder>>(self.ecs, |mut query| {
+ as_system::<Query<&InstanceHolder>>(self.ecs, |mut query| {
let local_player = query.get_mut(self.player).unwrap();
let world = local_player.instance.write();
@@ -1138,7 +1138,7 @@ impl GamePacketHandler<'_> {
pub fn section_blocks_update(&mut self, p: &ClientboundSectionBlocksUpdate) {
debug!("Got section blocks update packet {p:?}");
- as_system::<Query<&mut InstanceHolder>>(self.ecs, |mut query| {
+ as_system::<Query<&InstanceHolder>>(self.ecs, |mut query| {
let local_player = query.get_mut(self.player).unwrap();
let world = local_player.instance.write();
for state in &p.states {
@@ -1311,7 +1311,7 @@ impl GamePacketHandler<'_> {
pub fn forget_level_chunk(&mut self, p: &ClientboundForgetLevelChunk) {
debug!("Got forget level chunk packet {p:?}");
- as_system::<Query<&mut InstanceHolder>>(self.ecs, |mut query| {
+ as_system::<Query<&InstanceHolder>>(self.ecs, |mut query| {
let local_player = query.get_mut(self.player).unwrap();
let mut partial_instance = local_player.partial_instance.write();
@@ -1410,6 +1410,7 @@ impl GamePacketHandler<'_> {
&mut InstanceHolder,
&GameProfileComponent,
&ClientInformation,
+ Option<&mut InstanceName>,
),
With<LocalEntity>,
>,
@@ -1419,11 +1420,19 @@ impl GamePacketHandler<'_> {
)>(
self.ecs,
|(mut commands, mut query, mut events, mut instance_container, mut loaded_by_query)| {
- let (mut instance_holder, game_profile, client_information) =
+ let (mut instance_holder, game_profile, client_information, instance_name) =
query.get_mut(self.player).unwrap();
let new_instance_name = p.common.dimension.clone();
+ if let Some(mut instance_name) = instance_name {
+ **instance_name = new_instance_name.clone();
+ } else {
+ commands
+ .entity(self.player)
+ .insert(InstanceName(new_instance_name.clone()));
+ }
+
let Some((_dimension_type, dimension_data)) = p
.common
.dimension_type(&instance_holder.instance.read().registries)
@@ -1433,7 +1442,7 @@ impl GamePacketHandler<'_> {
// add this world to the instance_container (or don't if it's already
// there)
- let weak_instance = instance_container.insert(
+ let weak_instance = instance_container.get_or_insert(
new_instance_name.clone(),
dimension_data.height,
dimension_data.min_y,