diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 96f3c8ff..37379744 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -343,13 +343,14 @@ namespace TShockAPI return Tools.HandleGriefer(e.Msg.whoAmI, "Placing impossible to place blocks."); } } - if (type == 0 || type == 1) + if (type == 0 || type == 1 || type == 2 || type == 3) { if (ConfigurationManager.disableBuild) { if (!players[e.Msg.whoAmI].group.HasPermission("editspawn")) { Tools.SendMessage(e.Msg.whoAmI, "World protected from changes.", Color.Red); + RevertPlayerChanges(e.Msg.whoAmI, type, x, y); return true; } } @@ -361,6 +362,7 @@ namespace TShockAPI if (flag) { Tools.SendMessage(e.Msg.whoAmI, "Spawn protected from changes.", Color.Red); + RevertPlayerChanges(e.Msg.whoAmI, type, x, y); return true; } } @@ -376,6 +378,34 @@ namespace TShockAPI return false; } + private static void RevertPlayerChanges(int player, byte action, int x, int y) + { + int revertAction = 0; + float revertType = 0f; + switch (action) + { + case 0: + revertAction = 1; + revertType = Main.tile[x, y].type; + break; + case 1: + revertAction = 0; + revertType = 0f; + break; + case 2: + revertAction = 3; + revertType = Main.tile[x, y].wall; + break; + case 3: + revertAction = 2; + revertType = 0f; + break; + } + NetMessage.SendData(17, player, -1, "", revertAction, x, y, revertType); + for (int j = y - 2; j <= (y + 2); j++) + NetMessage.SendData(10, player, -1, "", 5, (float)(x - 2), (float)j, 0f); + } + bool HandleTogglePvp(MemoryStream data, GetDataEventArgs e) { int id = data.ReadByte();