diff --git a/CHANGELOG.md b/CHANGELOG.md
index 121cb25a..9860f9d5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
This is the rolling changelog for TShock for Terraria. Use past tense when adding new entries; sign your name off when you add or change something. This should primarily be things like user changes, not necessarily codebase changes unless it's really relevant or large.
## Upcoming Changes
-* Your change goes here!
+* Add Emoji event to GetDataHandler. This packet is received when a player tries to display an emote.
## TShock 4.4.0 (Pre-release 10)
* Fix all rope coils. (@Olink)
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index b5c9bbb0..c9e9608e 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -151,6 +151,7 @@ namespace TShockAPI
{ PacketTypes.CrystalInvasionStart, HandleOldOnesArmy },
{ PacketTypes.PlayerHurtV2, HandlePlayerDamageV2 },
{ PacketTypes.PlayerDeathV2, HandlePlayerKillMeV2 },
+ { PacketTypes.Emoji, HandleEmoji },
{ PacketTypes.FishOutNPC, HandleFishOutNPC },
{ PacketTypes.FoodPlatterTryPlacing, HandleFoodPlatterTryPlacing },
{ PacketTypes.SyncRevengeMarker, HandleSyncRevengeMarker }
@@ -1866,6 +1867,40 @@ namespace TShockAPI
return args.Handled;
}
+ ///
+ /// For use in an Emoji event.
+ ///
+ public class EmojiEventArgs : GetDataHandledEventArgs
+ {
+ ///
+ /// The player index in the packet, who sends the emoji.
+ ///
+ public byte PlayerIndex { get; set; }
+ ///
+ /// The ID of the emoji, that is being received.
+ ///
+ public byte EmojiID { get; set; }
+ }
+ ///
+ /// Called when a player sends an emoji.
+ ///
+ public static HandlerList Emoji = new HandlerList();
+ private static bool OnEmoji(TSPlayer player, MemoryStream data, byte playerIndex, byte emojiID)
+ {
+ if (Emoji == null)
+ return false;
+
+ var args = new EmojiEventArgs
+ {
+ Player = player,
+ Data = data,
+ PlayerIndex = playerIndex,
+ EmojiID = emojiID
+ };
+ Emoji.Invoke(null, args);
+ return args.Handled;
+ }
+
///
/// For use in a FishOutNPC event.
///
@@ -3671,6 +3706,17 @@ namespace TShockAPI
return false;
}
+ private static bool HandleEmoji(GetDataHandlerArgs args)
+ {
+ byte playerIndex = args.Data.ReadInt8();
+ byte emojiID = args.Data.ReadInt8();
+
+ if (OnEmoji(args.Player, args.Data, playerIndex, emojiID))
+ return true;
+
+ return false;
+ }
+
private static bool HandleFishOutNPC(GetDataHandlerArgs args)
{
ushort tileX = args.Data.ReadUInt16();