summaryrefslogtreecommitdiff
path: root/src/SMAPI
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-01-17 14:57:41 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-01-17 14:57:41 -0500
commit516b2fc010ba9a794297ae74b4c5de321ffd0a70 (patch)
tree1fc708e36f7268407b8ced1e3ce8f58eb4fa3e33 /src/SMAPI
parentb58d432a22bc39c3135779664293c7beff7b3bd4 (diff)
downloadSMAPI-516b2fc010ba9a794297ae74b4c5de321ffd0a70.tar.gz
SMAPI-516b2fc010ba9a794297ae74b4c5de321ffd0a70.tar.bz2
SMAPI-516b2fc010ba9a794297ae74b4c5de321ffd0a70.zip
don't send multiplayer broadcasts to players without SMAPI
Diffstat (limited to 'src/SMAPI')
-rw-r--r--src/SMAPI/Framework/SMultiplayer.cs34
1 files changed, 12 insertions, 22 deletions
diff --git a/src/SMAPI/Framework/SMultiplayer.cs b/src/SMAPI/Framework/SMultiplayer.cs
index b2257286..8e18cc09 100644
--- a/src/SMAPI/Framework/SMultiplayer.cs
+++ b/src/SMAPI/Framework/SMultiplayer.cs
@@ -392,34 +392,24 @@ namespace StardewModdingAPI.Framework
if (string.IsNullOrWhiteSpace(fromModID))
throw new ArgumentNullException(nameof(fromModID));
- // get target players
- long curPlayerId = Game1.player.UniqueMultiplayerID;
- bool sendToSelf = false;
- List<MultiplayerPeer> sendToPeers = new List<MultiplayerPeer>();
- if (toPlayerIDs == null)
- {
- sendToSelf = true;
- sendToPeers.AddRange(this.Peers.Values);
- }
- else
+ // get valid peers
+ var sendToPeers = this.Peers.Values.Where(p => p.HasSmapi).ToList();
+ bool sendToSelf = true;
+
+ // filter by player ID
+ if (toPlayerIDs != null)
{
- foreach (long id in toPlayerIDs.Distinct())
- {
- if (id == curPlayerId)
- sendToSelf = true;
- else if (this.Peers.TryGetValue(id, out MultiplayerPeer peer) && peer.HasSmapi)
- sendToPeers.Add(peer);
- }
+ var ids = new HashSet<long>(toPlayerIDs);
+ sendToPeers.RemoveAll(peer => !ids.Contains(peer.PlayerID));
+ sendToSelf = ids.Contains(Game1.player.UniqueMultiplayerID);
}
// filter by mod ID
if (toModIDs != null)
{
- HashSet<string> sendToMods = new HashSet<string>(toModIDs, StringComparer.OrdinalIgnoreCase);
- if (sendToSelf && toModIDs.All(id => this.ModRegistry.Get(id) == null))
- sendToSelf = false;
-
- sendToPeers.RemoveAll(peer => peer.Mods.All(mod => !sendToMods.Contains(mod.ID)));
+ var ids = new HashSet<string>(toModIDs, StringComparer.OrdinalIgnoreCase);
+ sendToPeers.RemoveAll(peer => peer.Mods.All(mod => !ids.Contains(mod.ID)));
+ sendToSelf = sendToSelf && toModIDs.Any(id => this.ModRegistry.Get(id) != null);
}
// validate recipients