diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 3276d86d..dcec0c18 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -1909,9 +1909,9 @@ namespace TShockAPI public class RequestTileEntityInteractionEventArgs : GetDataHandledEventArgs { /// - /// The ID of the TileEntity that the player is requesting interaction with. + /// The TileEntity object that the player is requesting interaction with. /// - public int TileEntityID { get; set; } + public TileEntity TileEntity { get; set; } /// /// The player index in the packet who requests interaction with the TileEntity. /// @@ -1921,7 +1921,7 @@ namespace TShockAPI /// Called when a player requests interaction with a TileEntity. /// public static HandlerList RequestTileEntityInteraction = new HandlerList(); - private static bool OnRequestTileEntityInteraction(TSPlayer player, MemoryStream data, int tileEntityID, byte playerIndex) + private static bool OnRequestTileEntityInteraction(TSPlayer player, MemoryStream data, TileEntity tileEntity, byte playerIndex) { if (RequestTileEntityInteraction == null) return false; @@ -1931,7 +1931,7 @@ namespace TShockAPI Player = player, Data = data, PlayerIndex = playerIndex, - TileEntityID = tileEntityID + TileEntity = tileEntity }; RequestTileEntityInteraction.Invoke(null, args); return args.Handled; @@ -3741,7 +3741,10 @@ namespace TShockAPI int tileEntityID = args.Data.ReadInt32(); byte playerIndex = args.Data.ReadInt8(); - if (OnRequestTileEntityInteraction(args.Player, args.Data, tileEntityID, playerIndex)) + if (!TileEntity.ByID.TryGetValue(tileEntityID, out TileEntity tileEntity)) + return false; + + if (OnRequestTileEntityInteraction(args.Player, args.Data, tileEntity, playerIndex)) return true; return false; diff --git a/TShockAPI/Handlers/RequestTileEntityInteractionHandler.cs b/TShockAPI/Handlers/RequestTileEntityInteractionHandler.cs index 386a31e6..cb4e80ea 100644 --- a/TShockAPI/Handlers/RequestTileEntityInteractionHandler.cs +++ b/TShockAPI/Handlers/RequestTileEntityInteractionHandler.cs @@ -17,31 +17,24 @@ namespace TShockAPI.Handlers { public void OnReceive(object sender, RequestTileEntityInteractionEventArgs args) { - if (args.TileEntityID != -1) + if (args.TileEntity is TEHatRack && !args.Player.HasBuildPermission(args.TileEntity.Position.X, args.TileEntity.Position.Y, false)) { - TileEntity tileEntity; - if (TileEntity.ByID.TryGetValue(args.TileEntityID, out tileEntity)) - { - if (tileEntity is TEHatRack && !args.Player.HasBuildPermission(tileEntity.Position.X, tileEntity.Position.Y, false)) - { - args.Player.SendErrorMessage("You do not have permission to modify a Hat Rack in a protected area!"); - args.Handled = true; - return; - } - else if (tileEntity is TEDisplayDoll && !args.Player.HasBuildPermission(tileEntity.Position.X, tileEntity.Position.Y, false)) - { - args.Player.SendErrorMessage("You do not have permission to modify a Mannequin in a protected area!"); - args.Handled = true; - return; - } - else if (!args.Player.HasBuildPermission(tileEntity.Position.X, tileEntity.Position.Y, false)) - { - args.Player.SendErrorMessage("You do not have permission to modify a TileEntity in a protected area!"); - TShock.Log.ConsoleDebug($"RequestTileEntityInteractionHandler: Rejected packet due to lack of building permissions! - From {args.Player.Name} | Position X:{tileEntity.Position.X} Y:{tileEntity.Position.Y}, TileEntity type: {tileEntity.type}, Tile type: {Main.tile[tileEntity.Position.X, tileEntity.Position.Y].type}"); - args.Handled = true; - return; - } - } + args.Player.SendErrorMessage("You do not have permission to modify a Hat Rack in a protected area!"); + args.Handled = true; + return; + } + else if (args.TileEntity is TEDisplayDoll && !args.Player.HasBuildPermission(args.TileEntity.Position.X, args.TileEntity.Position.Y, false)) + { + args.Player.SendErrorMessage("You do not have permission to modify a Mannequin in a protected area!"); + args.Handled = true; + return; + } + else if (!args.Player.HasBuildPermission(args.TileEntity.Position.X, args.TileEntity.Position.Y, false)) + { + args.Player.SendErrorMessage("You do not have permission to modify a TileEntity in a protected area!"); + TShock.Log.ConsoleDebug($"RequestTileEntityInteractionHandler: Rejected packet due to lack of building permissions! - From {args.Player.Name} | Position X:{args.TileEntity.Position.X} Y:{args.TileEntity.Position.Y}, TileEntity type: {args.TileEntity.type}, Tile type: {Main.tile[args.TileEntity.Position.X, args.TileEntity.Position.Y].type}"); + args.Handled = true; + return; } } }