@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
	public void onBorderCollision(PlayerMoveEvent event) {
		
		Player player = event.getPlayer();
		User user = EdgeCoreAPI.userAPI().getUser(player.getName());
		
		Location location = player.getLocation().clone();
		Location spawnLoc = player.getWorld().getHighestBlockAt(player.getWorld().getSpawnLocation()).getLocation();
		
		// Check if user exists and it's level > Architect
		if (user != null) {
			if (!Level.canUse(user, Level.ARCHITECT)) {
				
				// Get radius and distance to radius
				int radius = WorldManager.getInstance().getWorldBorder();
				double distance = location.distanceSquared(spawnLoc);
								
				if (distance >= Math.pow(radius, 2)) {
										
					// Check if the player's in a vehicle
					Entity vehicle = player.getVehicle();
					
					// Let the player leave the vehicle
					if (vehicle != null) {
						player.leaveVehicle();
						
						/*
						 * If the vehicle is an instance of LivingEntity (like horse or pig), teleport it to the from-location
						 * If not, remove the entity
						 */
						if (!(vehicle instanceof LivingEntity)) {
							
							vehicle.remove();
							
						} else {
							
							event.setTo(event.getFrom());							
							player.sendMessage(EdgeCoreAPI.languageAPI().getColoredMessage(user.getLanguage(), "radiusreached"));
						}
					}
					
					// Finally, after all checks, teleport the player to the location it's coming from and let him know why
					Vector playerVec = player.getLocation().toVector().clone();
					Vector spawnVec = spawnLoc.toVector().clone();
					
					Vector directionToSpawn = playerVec.clone().subtract(spawnVec).normalize();
					Vector nextPos = playerVec.add(directionToSpawn.clone().multiply(3));
					
					event.setTo(new Location(event.getFrom().getWorld(), nextPos.getBlockX(), nextPos.getBlockY(), nextPos.getBlockZ()));
					
					player.sendMessage(EdgeCoreAPI.languageAPI().getColoredMessage(user.getLanguage(), "radiusreached"));
				}
			}
		}
	}