1
1
package building
2
2
3
+ import core.thing.item.ItemResource
4
+ import kotlinx.coroutines.runBlocking
3
5
import java.io.File
4
6
import java.net.URL
5
7
import java.net.URLClassLoader
@@ -17,20 +19,22 @@ Resolve load order conflicts
17
19
actual object ModManager {
18
20
actual fun applyMods () {
19
21
val manifestFile = File (" ./mods/manifest.txt" )
20
- val manifest = if (manifestFile.exists()){
22
+ val manifest = if (manifestFile.exists()) {
21
23
manifestFile.readLines()
22
24
} else listOf ()
23
25
println (" Found ${manifest.size} mods." )
24
26
25
- manifest.mapNotNull { fileName ->
26
- val jarFile = File (" ./mods/$fileName .jar" )
27
- if (jarFile.exists()) jarFile else null
28
- }.forEach { loadJar(it) }
29
-
27
+ runBlocking {
28
+ manifest.mapNotNull { fileName ->
29
+ val jarFile = File (" ./mods/$fileName .jar" )
30
+ if (jarFile.exists()) jarFile else null
31
+ }.forEach { loadJar(it) }
32
+ }
30
33
if (manifest.isNotEmpty()) println (" Loaded Mods" )
31
34
}
32
35
33
- private fun loadJar (jarFile : File ) {
36
+ @Suppress(" UNCHECKED_CAST" )
37
+ private suspend fun loadJar (jarFile : File ) {
34
38
val jar = JarFile (jarFile)
35
39
36
40
val e = jar.entries()
@@ -40,14 +44,18 @@ actual object ModManager {
40
44
while (e.hasMoreElements()) {
41
45
val je = e.nextElement() as JarEntry
42
46
43
- if (je.isDirectory || ! je.name.endsWith(" .class" )) {
44
- continue
45
- }
46
-
47
- // -6 because of .class
48
- val className = je.name.substring(0 , je.name.length - 6 ).replace(' /' , ' .' )
49
-
47
+ if (je.isDirectory || ! je.name.endsWith(" .class" )) continue
48
+ val className = je.name.substring(0 , je.name.length - " .class" .length).replace(' /' , ' .' )
50
49
val c: Class <* > = cl.loadClass(className)
50
+
51
+ when {
52
+ c.interfaces.contains(ItemResource ::class .java) -> process(c as Class <ItemResource >)
53
+ }
51
54
}
52
55
}
56
+ }
57
+
58
+ private suspend fun process (c : Class <ItemResource >) {
59
+ val items = c.getDeclaredConstructor().newInstance().values()
60
+ println (" Found ${items.size} items" )
53
61
}
0 commit comments