diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs
index 909a84d68..72607368c 100644
--- a/TShockAPI/Bouncer.cs
+++ b/TShockAPI/Bouncer.cs
@@ -41,6 +41,7 @@ internal sealed class Bouncer
internal Handlers.EmojiHandler EmojiHandler { get; private set; }
internal Handlers.IllegalPerSe.EmojiPlayerMismatch EmojiPlayerMismatch { get; private set; }
internal Handlers.DisplayDollItemSyncHandler DisplayDollItemSyncHandler { get; private set; }
+ internal Handlers.DisplayDollPoseSyncHandler DisplayDollPoseSyncHandler { get; private set; }
internal Handlers.RequestTileEntityInteractionHandler RequestTileEntityInteractionHandler { get; private set; }
internal Handlers.LandGolfBallInCupHandler LandGolfBallInCupHandler { get; private set; }
internal Handlers.SyncTilePickingHandler SyncTilePickingHandler { get; private set; }
@@ -99,6 +100,9 @@ internal Bouncer()
DisplayDollItemSyncHandler = new Handlers.DisplayDollItemSyncHandler();
GetDataHandlers.DisplayDollItemSync += DisplayDollItemSyncHandler.OnReceive;
+ DisplayDollPoseSyncHandler = new Handlers.DisplayDollPoseSyncHandler();
+ GetDataHandlers.DisplayDollPoseSync += DisplayDollPoseSyncHandler.OnReceive;
+
RequestTileEntityInteractionHandler = new Handlers.RequestTileEntityInteractionHandler();
GetDataHandlers.RequestTileEntityInteraction += RequestTileEntityInteractionHandler.OnReceive;
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index c09cf65fe..fbfa86a16 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -2168,10 +2168,15 @@ public enum DisplayDollInventoryID
///
Dyes = 1,
+ ///
+ /// The ID of the pose. Not actually an item inventory.
+ ///
+ Pose = 2,
+
///
/// The ID of the inventory holding the miscellaneous items (mounts, pets, etc.).
///
- Misc = 2,
+ Misc = 3
}
///
/// For use in a TileEntityDisplayDollItemSync event.
diff --git a/TShockAPI/Handlers/DisplayDollPoseSyncHandler.cs b/TShockAPI/Handlers/DisplayDollPoseSyncHandler.cs
new file mode 100644
index 000000000..012b8c8d1
--- /dev/null
+++ b/TShockAPI/Handlers/DisplayDollPoseSyncHandler.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using static TShockAPI.GetDataHandlers;
+
+namespace TShockAPI.Handlers
+{
+ ///
+ /// Handles the TileEntityDisplayDollPoseSync packets and checks for permissions.
+ ///
+ public class DisplayDollPoseSyncHandler : IPacketHandler
+ {
+ public void OnReceive(object sender, DisplayDollPoseSyncEventArgs args)
+ {
+ if (!args.Player.HasBuildPermission(args.DisplayDollEntity.Position.X, args.DisplayDollEntity.Position.Y, false))
+ {
+ args.Player.SendErrorMessage(GetString("You do not have permission to modify a Mannequin in a protected area!"));
+ // Note - itemIndex is unused, so it remains 0 here.
+ args.Player.SendData(PacketTypes.TileEntityDisplayDollItemSync, "", 255, args.TileEntityID, 0, (int)DisplayDollInventoryID.Pose);
+ args.Handled = true;
+ return;
+ }
+ }
+ }
+}