11package dev.slne.surf.surfapi.velocity.server.component
22
33import com.google.auto.service.AutoService
4+ import com.velocitypowered.api.plugin.PluginContainer
45import dev.slne.surf.surfapi.core.server.component.ComponentService
56import dev.slne.surf.surfapi.velocity.server.velocityMain
67import net.kyori.adventure.text.logger.slf4j.ComponentLogger
78import java.nio.file.Path
9+ import kotlin.contracts.ExperimentalContracts
10+ import kotlin.contracts.contract
811import kotlin.io.path.Path
9- import kotlin.jvm.optionals.getOrNull
1012
1113@AutoService(ComponentService ::class )
1214class VelocityComponentService : ComponentService () {
@@ -15,26 +17,30 @@ class VelocityComponentService : ComponentService() {
1517 }
1618
1719 override fun getClassloader (owner : Any ): ClassLoader {
18- return getInstanceFromOwner(owner).javaClass.classLoader
20+ ensureOwnerIsPluginContainer(owner)
21+ return owner.javaClass.classLoader
1922 }
2023
2124 override fun isPluginLoaded (pluginId : String ): Boolean {
2225 return velocityMain.server.pluginManager.isLoaded(pluginId)
2326 }
2427
2528 override fun getLogger (owner : Any ): ComponentLogger {
26- return ComponentLogger .logger(getPluginContainerFromOwner(owner).description.id)
29+ ensureOwnerIsPluginContainer(owner)
30+ return ComponentLogger .logger(owner.description.id)
2731 }
2832
2933 override fun getDataPath (owner : Any ): Path {
30- return PLUGIN_PATH .resolve(getPluginContainerFromOwner(owner).description.id)
34+ ensureOwnerIsPluginContainer(owner)
35+ return PLUGIN_PATH .resolve(owner.description.id)
3136 }
3237
33- private fun getPluginContainerFromOwner (owner : Any ) =
34- velocityMain.server.pluginManager.ensurePluginContainer(owner)
38+ @OptIn(ExperimentalContracts ::class )
39+ private fun ensureOwnerIsPluginContainer (owner : Any ): PluginContainer {
40+ contract {
41+ returns() implies (owner is PluginContainer )
42+ }
3543
36- private fun getInstanceFromOwner (owner : Any ): Any {
37- return getPluginContainerFromOwner(owner).instance.getOrNull()
38- ? : error(" Failed to get instance from owner: $owner " )
44+ return owner as ? PluginContainer ? : error(" Owner must be a PluginContainer" )
3945 }
4046}
0 commit comments