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; + } + } + } +}