diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index d7f7be18..f8449d0f 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -1849,7 +1849,7 @@ namespace TShockAPI return true; } - Item selectedItem = args.TPlayer.inventory[args.TPlayer.selectedItem]; + Item selectedItem = args.Player.SelectedItem; if (type == 0 && !Main.tileCut[Main.tile[tileX, tileY].type] && !breakableTiles.Contains(Main.tile[tileX, tileY].type)) { // If the tile is an axe tile and they aren't selecting an axe, they're hacking. @@ -1879,7 +1879,6 @@ namespace TShockAPI args.Player.SendTileSquare(tileX, tileY, 1); return true; } - } else if (action == EditAction.PlaceTile || action == EditAction.PlaceWall) { @@ -3192,6 +3191,13 @@ namespace TShockAPI if (OnPaintTile(x, y, t)) return true; + // Not selecting paintbrush or paint scraper? Hacking. + if (args.Player.SelectedItem.type != 1071 && args.Player.SelectedItem.type != 1100) + { + args.Player.SendData(PacketTypes.PaintWall, "", x, y, 0); + return true; + } + if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000 || TShock.CheckTilePermission(args.Player, x, y, true) || TShock.CheckRangePermission(args.Player, x, y)) @@ -3199,7 +3205,11 @@ namespace TShockAPI args.Player.SendData(PacketTypes.PaintTile, "", x, y, 0); return true; } - args.Player.PaintThreshold++; + + if (!args.Player.Group.HasPermission(Permissions.ignorepaintdetection)) + { + args.Player.PaintThreshold++; + } return false; } @@ -3212,6 +3222,13 @@ namespace TShockAPI if (OnPaintTile(x, y, t)) return true; + // Not selecting paint roller or paint scraper? Hacking. + if (args.Player.SelectedItem.type != 1072 && args.Player.SelectedItem.type != 1100) + { + args.Player.SendData(PacketTypes.PaintWall, "", x, y, 0); + return true; + } + if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000 || TShock.CheckTilePermission(args.Player, x, y, true) || TShock.CheckRangePermission(args.Player, x, y)) @@ -3219,7 +3236,11 @@ namespace TShockAPI args.Player.SendData(PacketTypes.PaintWall, "", x, y, 0); return true; } - args.Player.PaintThreshold++; + + if (!args.Player.Group.HasPermission(Permissions.ignorepaintdetection)) + { + args.Player.PaintThreshold++; + } return false; } diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs index e6289131..6671e9e8 100644 --- a/TShockAPI/Permissions.cs +++ b/TShockAPI/Permissions.cs @@ -130,6 +130,9 @@ namespace TShockAPI [Description("Prevents you from being disabled by projectile abuse detection.")] public static readonly string ignoreprojectiledetection = "tshock.ignore.projectile"; + [Description("Prevents you from being disabled by paint abuse detection.")] + public static readonly string ignorepaintdetection = "tshock.ignore.paint"; + [Description("Prevents you from being reverted by no clip detection.")] public static readonly string ignorenoclipdetection = "tshock.ignore.noclip"; diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index b72fa0e6..8ef45cc7 100755 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -319,21 +319,31 @@ namespace TShockAPI } } + /// + /// Gets the player's selected item. + /// + public Item SelectedItem + { + get { return TPlayer.inventory[TPlayer.selectedItem]; } + } + public int State { get { return Netplay.serverSock[Index].state; } set { Netplay.serverSock[Index].state = value; } } + /// + /// Gets the player's UUID. + /// public string UUID { - get { - return RealPlayer - ? Netplay.serverSock[Index].clientUUID - : ""; - } + get { return RealPlayer ? Netplay.serverSock[Index].clientUUID : ""; } } + /// + /// Gets the player's IP. + /// public string IP { get