Refactor EntityMetadataUpdateProcessor to simplify metadata update logic and remove container-related checks

This commit is contained in:
2025-07-06 00:25:54 +02:00
parent 38f50c8819
commit 1b3da7bece

View File

@@ -38,34 +38,20 @@ public class EntityMetadataUpdateProcessor : AuthenticatedPacketProcessor<Entity
foreach (Player player in playerManager.GetConnectedPlayers()) foreach (Player player in playerManager.GetConnectedPlayers())
{ {
bool updateVisibleToPlayer = player.CanSee(entity); bool updateVisibleToPlayer = player.CanSee(entity);
// Always sync container/storage metadata to all visible players
bool isContainerMetadata = IsContainerRelatedMetadata(packet.NewValue);
if (player != sendingPlayer && (updateVisibleToPlayer || isContainerMetadata)) if (player != sendingPlayer && updateVisibleToPlayer)
{ {
player.SendPacket(packet); player.SendPacket(packet);
} }
} }
} }
private bool IsContainerRelatedMetadata(EntityMetadata metadata)
{
// Check if metadata is related to containers/storage
return metadata.GetType().Name.Contains("Container") ||
metadata.GetType().Name.Contains("Storage") ||
metadata.GetType().Name.Contains("Inventory");
}
private bool TryProcessMetadata(Player sendingPlayer, Entity entity, EntityMetadata metadata) private bool TryProcessMetadata(Player sendingPlayer, Entity entity, EntityMetadata metadata)
{ {
return metadata switch return metadata switch
{ {
PlayerMetadata playerMetadata => ProcessPlayerMetadata(sendingPlayer, entity, playerMetadata), PlayerMetadata playerMetadata => ProcessPlayerMetadata(sendingPlayer, entity, playerMetadata),
// Always allow container/storage metadata updates for proper sync
_ when IsContainerRelatedMetadata(metadata) => true,
// Allow metadata updates from any player by default // Allow metadata updates from any player by default
_ => true _ => true
}; };
@@ -87,4 +73,4 @@ public class EntityMetadataUpdateProcessor : AuthenticatedPacketProcessor<Entity
Log.WarnOnce($"Player {sendingPlayer.Name} tried updating metadata of another player's entity {entity.Id}"); Log.WarnOnce($"Player {sendingPlayer.Name} tried updating metadata of another player's entity {entity.Id}");
return false; return false;
} }
} }