I've fixed this (and again, there's probably a much better way), by changing the following in ShareWithPlayer:
foreach (var blueprint in playerBlueprints.ToList())
{
if (BlueprintBlocked(blueprint))
{
playerBlueprints.Remove(blueprint);
}
}to foreach (var blueprint in playerBlueprints.ToList())
{
if (BlueprintBlocked(blueprint))
{
playerBlueprints.Remove(blueprint);
player.ChatMessage(GetLangValue("Prefix", playerID) + GetLangValue("BlueprintBlocked", playerID, blueprint.displayName.translated));
}
}