diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9b591efc..e48fd0cc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -79,6 +79,7 @@ Putting this stuff down here so things don't conflict as often.
* Added `TSPlayer` to `GetDataHandlers.PlayerAnimation`. (@hakusaro)
* Added `GetDataHandlers.MassWireOperation` hook and related arguments. (@hakusaro)
* Added `GetDataHandlers.PlaceTileEntity` hook and related arguments. (@hakusaro)
+* Added `TSPlayer` to `GetDataHandlers.GemLockToggle`. (@hakusaro)
## TShock 4.3.25
* Fixed a critical exploit in the Terraria protocol that could cause massive unpreventable world corruption as well as a number of other problems. Thanks to @bartico6 for reporting. Fixed by the efforts of @QuiCM, @hakusaro, and tips in the right directioon from @bartico6.
diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs
index b8df3ddb..d29b94ae 100644
--- a/TShockAPI/Bouncer.cs
+++ b/TShockAPI/Bouncer.cs
@@ -41,6 +41,7 @@ namespace TShockAPI
{
// Setup hooks
+ GetDataHandlers.GemLockToggle.Register(OnGemLockToggle);
GetDataHandlers.PlaceTileEntity.Register(OnPlaceTileEntity);
GetDataHandlers.PlayerAnimation.Register(OnPlayerAnimation);
GetDataHandlers.NPCStrike.Register(OnNPCStrike);
@@ -61,6 +62,36 @@ namespace TShockAPI
GetDataHandlers.TileEdit.Register(OnTileEdit);
}
+ /// Handles the anti-cheat components of gem lock toggles.
+ /// The object that triggered the event.
+ /// The packet arguments that the event has.
+ internal void OnGemLockToggle(object sender, GetDataHandlers.GemLockToggleEventArgs args)
+ {
+ if (args.X < 0 || args.Y < 0 || args.X >= Main.maxTilesX || args.Y >= Main.maxTilesY)
+ {
+ args.Handled = true;
+ return;
+ }
+
+ if (!TShock.Utils.TilePlacementValid(args.X, args.Y) || (args.Player.Dead && TShock.Config.PreventDeadModification))
+ {
+ args.Handled = true;
+ return;
+ }
+
+ if (TShock.CheckIgnores(args.Player))
+ {
+ args.Handled = true;
+ return;
+ }
+
+ if (TShock.CheckTilePermission(args.Player, args.X, args.Y))
+ {
+ args.Handled = true;
+ return;
+ }
+ }
+
/// Fired when a PlaceTileEntity occurs for basic anti-cheat on perms and range.
/// The object that triggered the event.
/// The packet arguments that the event has.
diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index 6721d5a1..8e10eb98 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -3080,14 +3080,16 @@ namespace TShockAPI
///
public class GemLockToggleEventArgs : HandledEventArgs
{
+ /// The TSPlayer that triggered the event.
+ public TSPlayer Player { get; set; }
///
/// X Location
///
- public Int32 X { get; set; }
+ public short X { get; set; }
///
/// Y Location
///
- public Int32 Y { get; set; }
+ public short Y { get; set; }
///
/// On status
///
@@ -3099,7 +3101,7 @@ namespace TShockAPI
///
public static HandlerList GemLockToggle;
- private static bool OnGemLockToggle(Int32 x, Int32 y, bool on)
+ private static bool OnGemLockToggle(short x, short y, bool on)
{
if (GemLockToggle == null)
return false;
@@ -3116,15 +3118,10 @@ namespace TShockAPI
private static bool HandleGemLockToggle(GetDataHandlerArgs args)
{
- var x = (int)args.Data.ReadInt16();
- var y = (int)args.Data.ReadInt16();
+ var x = args.Data.ReadInt16();
+ var y = args.Data.ReadInt16();
var on = args.Data.ReadBoolean();
- if (x < 0 || y < 0 || x >= Main.maxTilesX || y >= Main.maxTilesY)
- {
- return true;
- }
-
if (OnGemLockToggle(x, y, on))
{
return true;
@@ -3135,21 +3132,6 @@ namespace TShockAPI
return false;
}
- if (!TShock.Utils.TilePlacementValid(x, y) || (args.Player.Dead && TShock.Config.PreventDeadModification))
- {
- return true;
- }
-
- if (TShock.CheckIgnores(args.Player))
- {
- return true;
- }
-
- if (TShock.CheckTilePermission(args.Player, x, y))
- {
- return true;
- }
-
return false;
}