@EventHandler
    public void onCustomEvent(PlayerInRegionEvent event) {
      RegionManager rm = plugin.getRegionManager();
      Player player = event.getPlayer();

      Location l = event.getLocation();
      ArrayList<String> effects = rm.getRegionType(rm.getRegion(l).getType()).getEffects();

      // Check if the region has the shoot arrow effect and return arrow velocity
      int explode = effect.regionHasEffect(effects, "landmine");
      if (explode == 0) return;

      // Check if the player owns or is a member of the region
      if (effect.isOwnerOfRegion(player, l) || effect.isMemberOfRegion(player, l)) {
        return;
      }

      // Check to see if the HeroStronghold has enough reagents
      if (!effect.hasReagents(l)) return;

      // Run upkeep but don't need to know if upkeep occured
      effect.forceUpkeep(event);

      // Check to see if exploding regions are enabled
      if (HeroStronghold.getConfigManager().getExplode()) {
        rm.destroyRegion(l);
      } else {
        rm.destroyRegion(l);
        l.getBlock().setTypeId(0);
        TNTPrimed tnt = l.getWorld().spawn(l, TNTPrimed.class);
        tnt.setFuseTicks(1);
      }

      // Set the event to destroy the region
      ArrayList<Location> tempArray = new ArrayList<Location>();
      tempArray.add(l);
      event.setRegionsToDestroy(tempArray);
    }
    @EventHandler
    public void onCustomEvent(PlayerInRegionEvent event) {
      if (!event
          .getLocation()
          .getBlock()
          .getRelative(BlockFace.UP)
          .equals(event.getPlayer().getLocation().getBlock())) {
        return;
      }
      Location l = event.getLocation();
      RegionManager rm = getPlugin().getRegionManager();
      Region r = rm.getRegion(l);
      RegionType rt = rm.getRegionType(r.getType());

      // Check if the region is a teleporter
      if (effect.regionHasEffect(rt.getEffects(), "teleport") == 0) {
        return;
      }

      Block block = l.getBlock().getRelative(BlockFace.UP);
      if (!(block.getState() instanceof Sign)) {
        return;
      }

      Sign sign = (Sign) block.getState();
      if (!sign.getLine(0).equalsIgnoreCase("[Teleport]")) {
        return;
      }
      Region currentRegion = null;
      try {
        currentRegion = rm.getRegionByID(Integer.parseInt(sign.getLine(1)));
      } catch (Exception e) {
        return;
      }
      if (currentRegion == null) {
        return;
      }

      if (r.getOwners().isEmpty() || currentRegion.getOwners().isEmpty()) {
        return;
      }
      // TODO add more error messages
      boolean ownerCheck = false;
      for (String s : r.getOwners()) {
        if (currentRegion.isOwner(s)) {
          ownerCheck = true;
          break;
        }
      }
      if (!ownerCheck) {
        return;
      }

      if (effect.regionHasEffect(rm.getRegionType(currentRegion.getType()).getEffects(), "teleport")
          == 0) {
        return;
      }

      Location targetLoc = currentRegion.getLocation();

      // Check to see if the HeroStronghold has enough reagents
      if (!effect.hasReagents(l)) {
        return;
      }

      // Run upkeep but don't need to know if upkeep occured
      effect.forceUpkeep(event);
      event
          .getPlayer()
          .teleport(
              targetLoc
                  .getBlock()
                  .getRelative(BlockFace.NORTH, 2)
                  .getRelative(BlockFace.UP)
                  .getLocation());
      event.getPlayer().sendMessage(ChatColor.GOLD + "[HeroStronghold] You have been teleported!");
    }