@Override
	public void runCheck(Event event, SGPlayer player) {
		
		if(player == null || event == null)return;
		if(sgPermissions.hasPermission(player, SGPermissibleNodes.BLOCK_REACH) || !sgConfig.isCheckEnabled(this))return;
		
		BlockBreakEvent blockBreakEvent = (BlockBreakEvent)event;
		Player sgPlayer = player.getPlayer();

		// getDistance(n) Methods used from SGMovementUtil. If we need it more than this consider moving Methods from SGMovementUtil to SGCheck.
		this.blockDistance = Math.abs(SGMovementUtil.getDistanceX(blockBreakEvent.getBlock().getLocation(), sgPlayer.getLocation(), false)
									 + SGMovementUtil.getDistanceY(blockBreakEvent.getBlock().getLocation(), sgPlayer.getLocation(), false)
									 + SGMovementUtil.getDistanceZ(blockBreakEvent.getBlock().getLocation(), sgPlayer.getLocation(), false));
		
		if(getReachDistance(sgPlayer) < this.blockDistance) {

			safeGuard.sgPlayerManager.getPlayer(sgPlayer.getName()).addVL(SGCheckTag.BLOCK_REACH, this.blockDistance - getReachDistance(sgPlayer));

			if (safeGuard.sgPlayerManager.getPlayer(sgPlayer.getName()).getVL(SGCheckTag.BLOCK_REACH) > sgConfig.getConfig().getDouble("checks.blockbreak.reach.buffer")) {
				
				publishCheck(getClass(), sgPlayer, SGCheckTag.BLOCK_REACH);
				blockBreakEvent.setCancelled(true);
				
			}
			
			return;
		}
		
		safeGuard.sgPlayerManager.getPlayer(sgPlayer.getName()).reduceVL(SGCheckTag.BLOCK_REACH);
	}