@@ -103,40 +103,50 @@ class ModelLinkCollector(private val packPath: Path) : ModelLinkHolder {
103103 return result
104104 }
105105
106- private fun collectModern (basePaths : List <Path >, path : Path ): List <ModelLink > {
106+ private fun collectModern (basePaths : List <Path > = listOf( Paths .get("assets")) ): List <ModelLink > {
107107 val result = mutableListOf<ModelLink >()
108- val items = path.resolve(" items" )
109- if (! items.exists()) return result
110- items.listDirectoryEntries(" *.json" ).forEach itemForEach@{ definition ->
111- if (! definition.exists()) return @itemForEach
112- try {
113- val parsed = readModel<ModernResourcePackLink >(definition)
114- parsed?.collect()?.let {
115- result.addAll(it.filter { m ->
116- basePaths.any { basePath ->
117- packPath.resolve(basePath).resolve(toModelPath(m.key)).exists() && m.key.namespace() == path.last().toString()
118- }
119- })
120- }
121- } catch (e: Exception ) {
122- e.printStackTrace()
123- }
108+ basePaths.map { packPath.resolve(it) }.forEach { baseDir ->
109+ if (! baseDir.exists()) return @forEach
110+ result.addAll(collectModernRecursively(basePaths, baseDir))
124111 }
125112 return result
126113 }
127114
128- private fun collectModern (basePaths : List <Path > = listOf( Paths .get("assets")) ): List <ModelLink > {
115+ private fun collectModernRecursively (basePaths : List <Path >, currentDir : Path ): List <ModelLink > {
129116 val result = mutableListOf<ModelLink >()
130- basePaths.map { packPath.resolve(it) }.forEach {
131- if (! it.exists()) return @forEach
132- it.listDirectoryEntries().filter { it.isDirectory() }.forEach { namespace ->
133- result.addAll(collectModern(basePaths, namespace))
117+
118+ val itemsDir = currentDir.resolve(" items" )
119+ if (itemsDir.exists()) {
120+ itemsDir.listDirectoryEntries(" *.json" ).forEach itemForEach@{ definition ->
121+ if (! definition.exists()) return @itemForEach
122+ try {
123+ val parsed = readModel<ModernResourcePackLink >(definition)
124+ parsed?.collect()?.let {
125+ result.addAll(it.filter { m ->
126+ basePaths.any { basePath ->
127+ packPath.resolve(basePath).resolve(toModelPath(m.key)).exists() &&
128+ m.key.namespace() == currentDir.last().toString()
129+ }
130+ })
131+ }
132+ } catch (e: Exception ) {
133+ e.printStackTrace()
134+ }
134135 }
135136 }
137+
138+ // Recurse into subdirectories
139+ currentDir.listDirectoryEntries()
140+ .filter { it.isDirectory() }
141+ .forEach { subDir ->
142+ result.addAll(collectModernRecursively(basePaths, subDir))
143+ }
144+
136145 return result
137146 }
138147
139148
149+
140150 private fun MutableList<ModelLink>.combine (other : List <ModelLink >, check : (first: ModelLink , second: ModelLink ) -> Boolean ): List <ModelLink > {
141151 other.forEach { element ->
142152 val found = this .find { check(element, it) }?.let { this .indexOf(it) }
0 commit comments