@@ -14,41 +14,43 @@ import org.bukkit.command.CommandSender
14
14
import org.bukkit.plugin.java.JavaPlugin
15
15
import org.reflections.Reflections
16
16
import org.reflections.util.ConfigurationBuilder
17
+ import java.util.logging.Level
17
18
import kotlin.reflect.KClass
18
19
import kotlin.reflect.KParameter
19
20
import kotlin.reflect.full.findAnnotations
20
21
import kotlin.reflect.full.functions
21
22
22
23
abstract class DIJavaPlugin : JavaPlugin () {
23
24
24
- private val stereotypes = arrayOf (MinecraftController ::class , Service ::class , Repository ::class )
25
+ private val stereotypes = listOf (MinecraftController ::class , Service ::class , Repository ::class )
25
26
26
- protected lateinit var stereotypesClasses: List <KClass <* >>
27
- private lateinit var controllerClasses: List <KClass <* >>
27
+ protected val stereotypesClasses: List <KClass <* >>
28
+ private val controllerClasses: List <KClass <* >>
28
29
29
- open val projectPackagePath: String
30
+ private val projectPackagePath: String
30
31
get() = this .javaClass.`package`.name
31
32
32
- abstract fun startDI ()
33
+ init {
34
+ stereotypesClasses = scanForMinecraftStereotypes()
35
+ controllerClasses = stereotypesClasses.filter { it.findAnnotations(MinecraftController ::class ).isNotEmpty() }
36
+ logger.log(Level .FINE , " Found ${stereotypesClasses.size} Minecraft Stereotypes in $projectPackagePath " )
37
+ startDependencyInjection()
38
+ }
39
+
40
+ abstract fun startDependencyInjection ()
33
41
abstract fun <T : Any > getExistingBinding (type : KClass <T >, qualifier : String? = null): T ?
34
42
abstract fun <T : Any > getInstance (type : KClass <T >, qualifier : String? = null): T ?
35
43
36
44
abstract fun getQualifier (annotation : List <Annotation >): String?
37
45
38
46
override fun onLoad () {
39
- logger.info(" Scanning for Minecraft controllers in $projectPackagePath " )
40
- stereotypesClasses = scanForMinecraftStereotypes()
41
- controllerClasses = stereotypesClasses.filter { it.findAnnotations(MinecraftController ::class ).isNotEmpty() }
42
- logger.info(" Found ${stereotypesClasses.size} Minecraft Stereotypes in $projectPackagePath " )
43
- startDI()
44
47
scanForMinecraftAnnotationsInClassesOnLoad()
45
-
46
48
ServerEventsHelper .triggerOnLoad(this )
47
49
}
48
50
49
51
final override fun onEnable () {
50
- ServerEventsHelper .triggerOnEnable(this )
51
52
scanForMinecraftAnnotationsInClassesOnEnable()
53
+ ServerEventsHelper .triggerOnEnable(this )
52
54
}
53
55
54
56
final override fun onDisable () {
@@ -78,43 +80,43 @@ abstract class DIJavaPlugin : JavaPlugin() {
78
80
? : error(" Could not find a value for parameter ${parameter.name} of type ${parameter.type} " )
79
81
}
80
82
81
- private fun scanForMinecraftAnnotationsInClassesOnEnable () {
83
+ private fun scanForMinecraftAnnotationsInClassesOnLoad () {
82
84
controllerClasses.forEach { clazz ->
83
85
clazz.functions.forEach { func ->
84
86
func.annotations.forEach { annotation ->
85
87
when (annotation) {
86
- is Command -> {
87
- CommandsHelper .registerCommand( this , annotation, func)
88
+ is OnEnable -> {
89
+ ServerEventsHelper .registerOnEnable( func)
88
90
}
89
91
90
- is TabComplete -> {
91
- CommandsHelper .registerTabComplete( this , annotation, func)
92
+ is OnDisable -> {
93
+ ServerEventsHelper .registerOnDisable( func)
92
94
}
93
95
94
- is Event -> {
95
- EventHelper .registerEvent( this , annotation, func)
96
+ is OnLoad -> {
97
+ ServerEventsHelper .registerOnLoad( func)
96
98
}
97
99
}
98
100
}
99
101
}
100
102
}
101
103
}
102
104
103
- private fun scanForMinecraftAnnotationsInClassesOnLoad () {
105
+ private fun scanForMinecraftAnnotationsInClassesOnEnable () {
104
106
controllerClasses.forEach { clazz ->
105
107
clazz.functions.forEach { func ->
106
108
func.annotations.forEach { annotation ->
107
109
when (annotation) {
108
- is OnEnable -> {
109
- ServerEventsHelper .registerOnEnable( func)
110
+ is Command -> {
111
+ CommandsHelper .registerCommand( this , annotation, func)
110
112
}
111
113
112
- is OnDisable -> {
113
- ServerEventsHelper .registerOnDisable( func)
114
+ is TabComplete -> {
115
+ CommandsHelper .registerTabComplete( this , annotation, func)
114
116
}
115
117
116
- is OnLoad -> {
117
- ServerEventsHelper .registerOnLoad( func)
118
+ is Event -> {
119
+ EventHelper .registerEvent( this , annotation, func)
118
120
}
119
121
}
120
122
}
0 commit comments