diff --git a/GeneralMods/ModdedUtilitiesNetworking/Class1.cs b/GeneralMods/ModdedUtilitiesNetworking/Class1.cs
index 16ceb69a..47705d35 100644
--- a/GeneralMods/ModdedUtilitiesNetworking/Class1.cs
+++ b/GeneralMods/ModdedUtilitiesNetworking/Class1.cs
@@ -71,10 +71,12 @@ namespace ModdedUtilitiesNetworking
private void ControlEvents_KeyPressed(object sender, StardewModdingAPI.Events.EventArgsKeyPressed e)
{
+ /*
if (e.KeyPressed==Microsoft.Xna.Framework.Input.Keys.K)
{
- multiplayer.sendModInfoReturnVoid(Framework.Features.Stardew.MessageFeatures.FSTRING_SendHUDMessageWithIcon, MessagesExtentions.HUDMessageIconIdentifier, new HUDMessage("My love is like fire",1),Framework.Enums.MessageTypes.messageTypes.SendToAll);
+ //multiplayer.sendMessage(Framework.Features.Stardew.MessageFeatures.FSTRING_SendHUDMessageWithIcon, MessagesExtentions.HUDMessageIconIdentifier, new HUDMessage("My love is like fire",1),Framework.Enums.MessageTypes.messageTypes.SendToSpecific,Game1.otherFarmers.ElementAt(0).Value);
}
+ */
}
///
diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/CustomMultiplayer.cs b/GeneralMods/ModdedUtilitiesNetworking/Framework/CustomMultiplayer.cs
index 9a0f1940..c1d482d9 100644
--- a/GeneralMods/ModdedUtilitiesNetworking/Framework/CustomMultiplayer.cs
+++ b/GeneralMods/ModdedUtilitiesNetworking/Framework/CustomMultiplayer.cs
@@ -34,7 +34,7 @@ namespace ModdedUtilitiesNetworking.Framework
/// Sends an outgoing message to appropriate players.
///
///
- public void sendMessage(OutgoingMessage message)
+ private void sendMessage(OutgoingMessage message)
{
if (Game1.server != null)
{
@@ -104,6 +104,27 @@ namespace ModdedUtilitiesNetworking.Framework
return message;
}
+ public OutgoingMessage sendOutGoingMessageReturnVoid(string functionName, string objectParametersType, object data, Farmer source, Enums.MessageTypes.messageTypes sendingInfo, Farmer recipient)
+ {
+ byte bite = new byte();
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendOneWay) bite = Enums.MessageTypes.SendOneWay;
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendToAll) bite = Enums.MessageTypes.SendToAll;
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendToSpecific) bite = Enums.MessageTypes.SendToSpecific;
+ OutgoingMessage message = new OutgoingMessage(bite, source, makeDataArray(functionName, objectParametersType, data,recipient));
+ return message;
+ }
+
+ public OutgoingMessage sendOutGoingMessageReturnVoid(string functionName, Type objectParametersType, object data, Farmer source, Enums.MessageTypes.messageTypes sendingInfo, Farmer recipient)
+ {
+ byte bite = new byte();
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendOneWay) bite = Enums.MessageTypes.SendOneWay;
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendToAll) bite = Enums.MessageTypes.SendToAll;
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendToSpecific) bite = Enums.MessageTypes.SendToSpecific;
+ OutgoingMessage message = new OutgoingMessage(bite, source, makeDataArray(functionName, objectParametersType.ToString(), data, recipient));
+ return message;
+ }
+
+
public object[] makeDataArray(string functionName, string objectParametersType, object data)
{
@@ -117,6 +138,30 @@ namespace ModdedUtilitiesNetworking.Framework
return obj;
}
+ public object[] makeDataArray(string functionName, string objectParametersType, object data, Farmer recipient)
+ {
+ DataInfo datainfo = new DataInfo(objectParametersType, data,recipient);
+ object[] obj = new object[3]
+ {
+ functionName,
+ typeof(DataInfo).ToString(),
+ datainfo,
+ };
+ return obj;
+ }
+
+ public object[] makeDataArray(string functionName, string objectParametersType, object data, long recipient)
+ {
+ DataInfo datainfo = new DataInfo(objectParametersType, data, recipient.ToString());
+ object[] obj = new object[3]
+ {
+ functionName,
+ typeof(DataInfo).ToString(),
+ datainfo,
+ };
+ return obj;
+ }
+
///
/// Creates all of the necessary parameters for the outgoing message to be sent to the server/client on what to do and how to handle the data sent.
/// This message written will attempt to access a function that doesn't return anything. Essentially null.
@@ -124,30 +169,65 @@ namespace ModdedUtilitiesNetworking.Framework
///
///
///
- public void sendModInfoReturnVoid(string uniqueID,Type classType,object data, Enums.MessageTypes.messageTypes sendingInfo)
+ public void sendMessage(string uniqueID, Type classType, object data, Enums.MessageTypes.messageTypes sendingInfo, Farmer recipient = null)
{
Farmer f = Game1.player;
- OutgoingMessage message =ModCore.multiplayer.sendOutGoingMessageReturnVoid(uniqueID, classType, data, f, sendingInfo);
+ if ((sendingInfo == Enums.MessageTypes.messageTypes.SendOneWay || sendingInfo == Enums.MessageTypes.messageTypes.SendToAll))
+ {
+ OutgoingMessage message = ModCore.multiplayer.sendOutGoingMessageReturnVoid(uniqueID, classType, data, f, sendingInfo);
+ ModCore.multiplayer.sendMessage(message);
+ return;
+ }
- ModCore.multiplayer.sendMessage(message);
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendToSpecific && recipient != null)
+ {
+ OutgoingMessage message = ModCore.multiplayer.sendOutGoingMessageReturnVoid(uniqueID, classType, data, f, sendingInfo, recipient);
+ ModCore.multiplayer.sendMessage(message);
+ return;
+ }
+
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendToSpecific && recipient == null)
+ {
+ ModCore.monitor.Log("ERROR: Attempted to send a target specific message to a NULL recipient");
+ return;
+ }
}
+
///
- /// Creates all of the necessary parameters for the outgoing message to be sent to the server/client on what to do and how to handle the data sent.
- /// This message written will attempt to access a function that doesn't return anything. Essentially null.
+ /// A way to send mod info across the net.
///
///
///
///
- public void sendModInfoReturnVoid(string uniqueID, string classType, object data, Enums.MessageTypes.messageTypes sendingInfo)
+ ///
+ ///
+ public void sendMessage(string uniqueID, string classType, object data, Enums.MessageTypes.messageTypes sendingInfo, Farmer recipient=null)
{
Farmer f = Game1.player;
- OutgoingMessage message = ModCore.multiplayer.sendOutGoingMessageReturnVoid(uniqueID, classType, data, f,sendingInfo);
+ if ((sendingInfo == Enums.MessageTypes.messageTypes.SendOneWay || sendingInfo == Enums.MessageTypes.messageTypes.SendToAll))
+ {
+ OutgoingMessage message = ModCore.multiplayer.sendOutGoingMessageReturnVoid(uniqueID, classType, data, f, sendingInfo);
+ ModCore.multiplayer.sendMessage(message);
+ return;
+ }
- ModCore.multiplayer.sendMessage(message);
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendToSpecific && recipient!=null)
+ {
+ OutgoingMessage message = ModCore.multiplayer.sendOutGoingMessageReturnVoid(uniqueID, classType, data, f, sendingInfo,recipient);
+ ModCore.multiplayer.sendMessage(message);
+ return;
+ }
+
+ if (sendingInfo == Enums.MessageTypes.messageTypes.SendToSpecific && recipient == null)
+ {
+ ModCore.monitor.Log("ERROR: Attempted to send a target specific message to a NULL recipient");
+ return;
+ }
}
+
}
}
diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/DataInfo.cs b/GeneralMods/ModdedUtilitiesNetworking/Framework/DataInfo.cs
index 69f61f0b..f1251301 100644
--- a/GeneralMods/ModdedUtilitiesNetworking/Framework/DataInfo.cs
+++ b/GeneralMods/ModdedUtilitiesNetworking/Framework/DataInfo.cs
@@ -1,4 +1,5 @@
-using System;
+using StardewValley;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -10,6 +11,7 @@ namespace ModdedUtilitiesNetworking.Framework
{
public string type;
public object data;
+ public string recipientID;
public DataInfo()
{
@@ -19,8 +21,21 @@ namespace ModdedUtilitiesNetworking.Framework
{
this.type = Type;
this.data = Data;
+ this.recipientID = "";
}
+ public DataInfo(string Type, object Data, Farmer farmer)
+ {
+ this.type = Type;
+ this.data = Data;
+ this.recipientID = farmer.UniqueMultiplayerID.ToString();
+ }
+ public DataInfo(string Type, object Data, string uniqueID)
+ {
+ this.type = Type;
+ this.data = Data;
+ this.recipientID = uniqueID;
+ }
}
}
diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/GenericExtentions.cs b/GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/GenericExtentions.cs
index 10f0a88d..b62ef3bb 100644
--- a/GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/GenericExtentions.cs
+++ b/GeneralMods/ModdedUtilitiesNetworking/Framework/Extentions/GenericExtentions.cs
@@ -96,8 +96,8 @@ namespace ModdedUtilitiesNetworking.Framework.Extentions
{
String key=reader.ReadString();
object data = ModCore.processTypesToRead(reader, key);
-
- DataInfo info = new DataInfo(key,data);
+ string ID = reader.ReadString();
+ DataInfo info = new DataInfo(key,data,ID);
return info;
}
@@ -115,6 +115,7 @@ namespace ModdedUtilitiesNetworking.Framework.Extentions
writer.WriteString(dataInfo.type);
ModCore.monitor.Log("WRITE DATA INFO FUNCTION3: " + dataInfo.type);
ModCore.processTypesToWrite(writer, dataInfo.type, dataInfo.data);
+ writer.WriteString(dataInfo.recipientID);
}
//Can do custom classes here for reading and writing.
diff --git a/GeneralMods/ModdedUtilitiesNetworking/Framework/Servers/CustomGameServer.cs b/GeneralMods/ModdedUtilitiesNetworking/Framework/Servers/CustomGameServer.cs
index a282ab0d..3a45bd05 100644
--- a/GeneralMods/ModdedUtilitiesNetworking/Framework/Servers/CustomGameServer.cs
+++ b/GeneralMods/ModdedUtilitiesNetworking/Framework/Servers/CustomGameServer.cs
@@ -393,6 +393,25 @@ namespace ModdedUtilitiesNetworking.Framework.Servers
object actualObject2 = ModCore.processTypesToRead(message.Reader, classType2);
ModCore.processVoidFunction(functionName2, actualObject2);
this.rebroadcastClientMessageToAllClients(message);
+ break;
+ case Enums.MessageTypes.SendToSpecific:
+ //Read in specific info.
+ object[] obj3 = message.Reader.ReadModdedInfoPacket();
+ string functionName3 = (string)obj3[0];
+ string classType3 = (string)obj3[1];
+ //Parse
+ object actualObject3 = ModCore.processTypesToRead(message.Reader, classType3);
+ DataInfo info = (DataInfo)actualObject3;
+
+ if (info.recipientID == Game1.player.UniqueMultiplayerID.ToString())
+ {
+ ModCore.processVoidFunction(functionName3, actualObject3);
+ }
+ else
+ {
+ this.sendMessageToSpecificClient(message, info);
+ }
+
break;
default:
ModCore.multiplayer.processIncomingMessage(message);
@@ -416,7 +435,24 @@ namespace ModdedUtilitiesNetworking.Framework.Servers
ModCore.monitor.Log("RESEND MESSAGE TO CLIENT!!!", StardewModdingAPI.LogLevel.Alert);
this.sendMessage(peerId, message1);
}
+ }
+ private void sendMessageToSpecificClient(IncomingMessage message, long farmerID)
+ {
+ byte messageType = Enums.MessageTypes.SendOneWay;
+ Farmer f = Game1.player;
+ object data = message.Data.Clone();
+ OutgoingMessage message1 = new OutgoingMessage(messageType, f, data);
+ this.sendMessage(farmerID, message1);
+ }
+
+ private void sendMessageToSpecificClient(IncomingMessage message, DataInfo info)
+ {
+ byte messageType = Enums.MessageTypes.SendOneWay;
+ Farmer f = Game1.player;
+ object data = message.Data.Clone();
+ OutgoingMessage message1 = new OutgoingMessage(messageType, f, data);
+ this.sendMessage(long.Parse(info.recipientID), message1);
}
private void rebroadcastClientMessage(IncomingMessage message)