private bool OnSignHit(int X, int Y, string text, int who)
        {
            if (!text.ToLower().StartsWith(Config.DefineSignCommands.ToLower()))
            {
                return(false);
            }
            TSPlayer tPly = TShock.Players[who];
            scPlayer sPly = scPlayers[who];
            scSign   sign = new scSign(text, new Point(X, Y));

            bool CanBreak = scUtils.CanBreak(tPly, sign);

            if (sPly.DestroyMode && CanBreak)
            {
                return(false);
            }

            if (Config.ShowDestroyMessage && CanBreak && sPly.AlertDestroyCooldown == 0)
            {
                tPly.SendInfoMessage("To destroy this sign, Type \"/destsign\".");
                sPly.AlertDestroyCooldown = 10;
            }

            sign.ExecuteCommands(sPly);

            return(true);
        }
    public void SignCommands_ExecuteSignCommand(TSPlayer player, DPoint signLocation, string text) {
      scPlayer scPlayer = SignCommands.SignCommands.scPlayers[player.Index];
      if (scPlayer == null)
        throw new InvalidOperationException("Sign Commands does not recognize the given player.");

      try {
        scSign scSign = new scSign(text, new Point(signLocation.X, signLocation.Y));
        scSign.ExecuteCommands(scPlayer);
      } catch (Exception ex) {
        throw new CooperatingPluginException(null, ex);
      }
    }
        private bool OnSignKill(int X, int Y, string text, int who)
        {
            if (!text.ToLower().StartsWith(Config.DefineSignCommands.ToLower()))
            {
                return(false);
            }

            var    sPly = scPlayers[who];
            scSign sign = new scSign(text, new Point(X, Y));

            if (sPly.DestroyMode && scUtils.CanBreak(sPly.TSPlayer, sign))
            {
                sPly.DestroyMode = false;
                string        id             = new Point(X, Y).ToString();
                List <string> OfflinePlayers = new List <string>(OfflineCooldowns.Keys);
                foreach (var p in OfflinePlayers)
                {
                    if (OfflineCooldowns[p].ContainsKey(id))
                    {
                        OfflineCooldowns[p].Remove(id);
                    }
                }

                foreach (var Ply in scPlayers)
                {
                    if (Ply == null || !Ply.Cooldowns.ContainsKey(id))
                    {
                        continue;
                    }
                    Ply.Cooldowns.Remove(id);
                }
                return(false);
            }
            sign.ExecuteCommands(sPly);
            return(true);
        }
        private bool OnSignKill(int X, int Y, string text, int who)
        {
            if (!text.ToLower().StartsWith(getConfig.DefineSignCommands.ToLower())) return false;

            var sPly = scPlayers[who];
            scSign sign = new scSign(text, new Point(X, Y));

            if (sPly.DestroyMode && scUtils.CanBreak(sPly.TSPlayer, sign))
            {
                sPly.DestroyMode = false;
                string id = new Point(X, Y).ToString();
                List<string> OfflinePlayers = new List<string>(OfflineCooldowns.Keys);
                foreach (var p in OfflinePlayers)
                {
                    if (OfflineCooldowns[p].ContainsKey(id))
                        OfflineCooldowns[p].Remove(id);
                }

                foreach (var Ply in scPlayers)
                {
                    if (Ply == null || !Ply.Cooldowns.ContainsKey(id)) continue;
                    Ply.Cooldowns.Remove(id);
                }
                return false;
            }
            sign.ExecuteCommands(sPly);
            return true;
        }
        private bool OnSignHit(int X, int Y, string text, int who)
        {
            if (!text.ToLower().StartsWith(getConfig.DefineSignCommands.ToLower())) return false;
            TSPlayer tPly = TShock.Players[who];
            scPlayer sPly = scPlayers[who];
            scSign sign = new scSign(text, new Point(X, Y));

            bool CanBreak = scUtils.CanBreak(tPly, sign);
            if (sPly.DestroyMode && CanBreak) return false;

            if (getConfig.ShowDestroyMessage && CanBreak && sPly.AlertDestroyCooldown == 0)
            {
                tPly.SendMessage("To destroy this sign, Type \"/destsign\"", Color.Orange);
                sPly.AlertDestroyCooldown = 10;
            }

            sign.ExecuteCommands(sPly);

            return true;
        }