public static ClassLocator MaterialBase(string modname, string organization)
        {
            string key = GetKey(nameof(MaterialBase), modname, organization);

            if (cache.TryGetValue(key, out ClassLocator value))
            {
                return(value);
            }
            ClassLocator locator = new ClassLocator(ClassLocator.CombineImport(GetPackageName(modname, organization), SourceCodeFolders.Material, "MaterialBase"));

            CreateIfNotExist(locator.FullPath);
            return(cache.Set(key, locator, cacheExpirationTime));
        }
        public static InitClassLocator Materials(string modname, string organization)
        {
            string key = GetKey(nameof(Materials), modname, organization);

            if (cache.TryGetValue(key, out InitClassLocator value))
            {
                return(value);
            }
            InitClassLocator locator = new InitClassLocator(ClassLocator.CombineImport(GetPackageName(modname, organization), Prefix + "Materials"), "MATERIALS");

            CreateIfNotExist(locator.FullPath);
            return(cache.Set(key, locator, cacheExpirationTime));
        }
        public static ClassLocator Commands(string modname, string organization)
        {
            string key = GetKey(nameof(Commands), modname, organization);

            if (cache.TryGetValue(key, out ClassLocator value))
            {
                return(value);
            }
            ClassLocator locator = new ClassLocator(ClassLocator.CombineImport(GetPackageName(modname, organization), Prefix + "Commands"));

            CreateIfNotExist(locator.FullPath);
            return(cache.Set(key, locator, cacheExpirationTime));
        }
        public static ClassLocator CustomCommand(string modname, string organization, string className)
        {
            string key = GetKey(nameof(CustomCommand), modname, organization, className);

            if (cache.TryGetValue(key, out ClassLocator value))
            {
                return(value);
            }
            ClassLocator locator = new ClassLocator(ClassLocator.CombineImport(GetPackageName(modname, organization), SourceCodeFolders.Command, className));

            CreateIfNotExist(locator.FullPath);
            return(cache.Set(key, locator, cacheExpirationTime));
        }
 /// <summary> Returns package name in root com.organization.modname.root </summary>
 private static string GetPackageName(string modname, string organization) => ClassLocator.CombineImport("com", organization, modname, SourceCodeFolders.Root);