@Override
  public void onPlayerTeleport(PlayerTeleportEvent event) {
    if (Permissions.TELEPORT.has(event.getPlayer())) return;
    if (event.getFrom().getWorld().equals(event.getTo().getWorld())
        && event.getFrom().distance(event.getTo()) < 5) return;

    ChunkyResident chunkyResident = new ChunkyResident(event.getPlayer());
    ChunkyTown myTown = chunkyResident.getTown();

    if (myTown == null) return;

    TownChunk fromChunk = new TownChunk(ChunkyManager.getChunkyChunk(event.getFrom()));
    TownChunk toChunk = new TownChunk(ChunkyManager.getChunkyChunk(event.getTo()));

    ChunkyTown fromTown = fromChunk.getTown();

    if (fromTown != null && fromTown.getEffectiveStance(myTown) != ChunkyTown.Stance.ALLY) {
      Strings.NO_TELEPORT.bad(chunkyResident);
      event.setCancelled(true);
      return;
    }

    ChunkyTown toTown = toChunk.getTown();

    if (toTown != null && toTown.getEffectiveStance(myTown) != ChunkyTown.Stance.ALLY) {
      Strings.NO_TELEPORT.bad(chunkyResident);
      event.setCancelled(true);
      return;
    }
  }