diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index 8f0f84e3..abc4d8d6 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -1227,7 +1227,9 @@ namespace TShockAPI
{PacketTypes.ContinueConnecting2, HandleConnecting},
{PacketTypes.ProjectileDestroy, HandleProjectileKill},
{PacketTypes.SpawnBossorInvasion, HandleSpawnBoss},
- {PacketTypes.Teleport, HandleTeleport}
+ {PacketTypes.Teleport, HandleTeleport},
+ {PacketTypes.PaintTile, HandlePaintTile},
+ {PacketTypes.PaintWall, HandlePaintWall}
};
}
@@ -2004,6 +2006,83 @@ namespace TShockAPI
return false;
}
+ ///
+ /// For use with a PaintTile event
+ ///
+ public class PaintTileEventArgs : HandledEventArgs
+ {
+ ///
+ /// X Location
+ ///
+ public Int32 X { get; set; }
+ ///
+ /// Y Location
+ ///
+ public Int32 Y { get; set; }
+ ///
+ /// Type
+ ///
+ public byte type { get; set; }
+ }
+ ///
+ /// NPCStrike - Called when an NPC is attacked
+ ///
+ public static HandlerList PaintTile;
+
+ private static bool OnPaintTile(Int32 x, Int32 y, byte t)
+ {
+ if (PaintTile == null)
+ return false;
+
+ var args = new PaintTileEventArgs
+ {
+ X = x,
+ Y = y,
+ type = t
+ };
+ PaintTile.Invoke(null, args);
+ return args.Handled;
+ }
+
+
+ ///
+ /// For use with a PaintWall event
+ ///
+ public class PaintWallEventArgs : HandledEventArgs
+ {
+ ///
+ /// X Location
+ ///
+ public Int32 X { get; set; }
+ ///
+ /// Y Location
+ ///
+ public Int32 Y { get; set; }
+ ///
+ /// Type
+ ///
+ public byte type { get; set; }
+ }
+ ///
+ /// Called When a wall is painted
+ ///
+ public static HandlerList PaintWall;
+
+ private static bool OnPaintWall(Int32 x, Int32 y, byte t)
+ {
+ if (PaintWall == null)
+ return false;
+
+ var args = new PaintWallEventArgs
+ {
+ X = x,
+ Y = y,
+ type = t
+ };
+ PaintWall.Invoke(null, args);
+ return args.Handled;
+ }
+
private static bool HandleTogglePvp(GetDataHandlerArgs args)
{
byte id = args.Data.ReadInt8();
@@ -3061,6 +3140,41 @@ namespace TShockAPI
return false;
}
+ private static bool HandlePaintTile(GetDataHandlerArgs args)
+ {
+ var x = args.Data.ReadInt32();
+ var y = args.Data.ReadInt32();
+ var t = args.Data.ReadInt8();
+
+ if (OnPaintTile(x, y, t))
+ return true;
+
+ if (!args.Player.Group.HasPermission(Permissions.canpaint))
+ {
+ args.Player.SendTileSquare(x, y);
+ return true;
+ }
+
+ return false;
+ }
+
+ private static bool HandlePaintWall(GetDataHandlerArgs args)
+ {
+ var x = args.Data.ReadInt32();
+ var y = args.Data.ReadInt32();
+ var t = args.Data.ReadInt8();
+
+ if (OnPaintTile(x, y, t))
+ return true;
+
+ if (!args.Player.Group.HasPermission(Permissions.canpaint))
+ {
+ args.Player.SendTileSquare(x, y);
+ return true;
+ }
+
+ return false;
+ }
private static bool HandleTeleport(GetDataHandlerArgs args)
{
var flag = args.Data.ReadInt8();
diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs
index f4906747..58190ee2 100644
--- a/TShockAPI/Permissions.cs
+++ b/TShockAPI/Permissions.cs
@@ -247,6 +247,9 @@ namespace TShockAPI
[Description("User can modify the world.")]
public static readonly string canbuild = "tshock.world.modify";
+
+ [Description("User can paint tiles.")]
+ public static readonly string canpaint = "tshock.world.paint";
// Non-grouped