Refactor EntityMetadataUpdateProcessor to simplify metadata update logic and remove container-related checks
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user