/*
   * Called when a sign is changed.
   */
  @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
  public void onSignChange(SignChangeEvent event) {
    Player player = event.getPlayer();
    WorldConfiguration wcfg = getWorldConfig(player);

    if (wcfg.signChestProtection) {
      if (event.getLine(0).equalsIgnoreCase("[Lock]")) {
        if (wcfg.isChestProtectedPlacement(event.getBlock(), player)) {
          player.sendMessage(ChatColor.DARK_RED + "You do not own the adjacent chest.");
          event.getBlock().breakNaturally();
          event.setCancelled(true);
          return;
        }

        if (event.getBlock().getTypeId() != BlockID.SIGN_POST) {
          player.sendMessage(
              ChatColor.RED + "The [Lock] sign must be a sign post, not a wall sign.");

          event.getBlock().breakNaturally();
          event.setCancelled(true);
          return;
        }

        if (!event.getLine(1).equalsIgnoreCase(player.getName())) {
          player.sendMessage(ChatColor.RED + "The first owner line must be your name.");

          event.getBlock().breakNaturally();
          event.setCancelled(true);
          return;
        }

        int below = event.getBlock().getRelative(0, -1, 0).getTypeId();

        if (below == BlockID.TNT
            || below == BlockID.SAND
            || below == BlockID.GRAVEL
            || below == BlockID.SIGN_POST) {
          player.sendMessage(
              ChatColor.RED + "That is not a safe block that you're putting this sign on.");

          event.getBlock().breakNaturally();
          event.setCancelled(true);
          return;
        }

        event.setLine(0, "[Lock]");
        player.sendMessage(ChatColor.YELLOW + "A chest or double chest above is now protected.");
      }
    } else if (!wcfg.disableSignChestProtectionCheck) {
      if (event.getLine(0).equalsIgnoreCase("[Lock]")) {
        player.sendMessage(ChatColor.RED + "WorldGuard's sign chest protection is disabled.");

        event.getBlock().breakNaturally();
        event.setCancelled(true);
        return;
      }
    }

    if (!plugin.getGlobalRegionManager().canBuild(player, event.getBlock())) {
      player.sendMessage(ChatColor.DARK_RED + "You don't have permission for this area.");
      event.setCancelled(true);
      return;
    }
  }