Skip to content

Commit

Permalink
0.2.1 - Using fabric loader in plugin system
Browse files Browse the repository at this point in the history
  • Loading branch information
ya-ilya committed May 29, 2023
1 parent 80f5c38 commit 2c95089
Show file tree
Hide file tree
Showing 13 changed files with 40 additions and 125 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ kotlin.code.style=official
kotlinVersion=1.8.20

# progreso
progresoVersion=0.2
progresoVersion=0.2.1

# fabric
fabricVersion=0.82.0+1.19.4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package org.progreso.api.config
import com.google.gson.stream.JsonReader
import com.google.gson.stream.JsonWriter
import org.progreso.api.Api
import org.progreso.api.config.container.AbstractConfigHelperContainer
import org.progreso.api.config.container.ConfigHelperContainer
import java.io.File
import java.nio.file.Files
import java.nio.file.Path
Expand All @@ -24,7 +24,7 @@ abstract class AbstractConfigHelper<T : AbstractConfig>(
name: String,
path: String,
private val provider: AbstractConfigProvider<T>,
private val container: AbstractConfigHelperContainer,
private val container: ConfigHelperContainer,
private val defaultConfigName: String? = null
) {
val name = name.trim()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package org.progreso.api.config.container

import org.progreso.api.config.AbstractConfigHelper

interface AbstractConfigHelperContainer {
interface ConfigHelperContainer {
val helpers: MutableMap<AbstractConfigHelper<*>, String>

fun getHelperByName(name: String): AbstractConfigHelper<*> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import com.google.gson.stream.JsonWriter
import org.progreso.api.config.AbstractConfigHelper
import org.progreso.api.config.AbstractConfigProvider
import org.progreso.api.config.configs.ModuleConfig
import org.progreso.api.config.container.AbstractConfigHelperContainer
import org.progreso.api.config.container.ConfigHelperContainer
import org.progreso.api.config.providers.ModuleConfigProvider
import org.progreso.api.managers.ConfigManager
import org.progreso.api.managers.ModuleManager
Expand All @@ -16,7 +16,7 @@ class ModuleConfigHelper(
name: String = "module",
path: String = "modules",
provider: AbstractConfigProvider<ModuleConfig> = ModuleConfigProvider(ModuleManager),
container: AbstractConfigHelperContainer = ConfigManager,
container: ConfigHelperContainer = ConfigManager,
defaultConfigName: String? = ConfigManager.DEFAULT_CONFIG_NAME
) : AbstractConfigHelper<ModuleConfig>(name, path, provider, container, defaultConfigName) {
override fun read(name: String, reader: JsonReader): ModuleConfig {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package org.progreso.api.managers

import org.progreso.api.Api.GSON
import org.progreso.api.config.AbstractConfigHelper
import org.progreso.api.config.container.AbstractConfigHelperContainer
import org.progreso.api.config.container.ConfigHelperContainer
import org.progreso.api.config.helpers.FriendConfigHelper
import org.progreso.api.config.helpers.ModuleConfigHelper
import org.progreso.api.config.providers.ModuleConfigProvider
Expand All @@ -11,7 +11,7 @@ import java.nio.file.Path
import java.nio.file.Paths
import kotlin.io.path.*

object ConfigManager : AbstractConfigHelperContainer {
object ConfigManager : ConfigHelperContainer {
const val DEFAULT_CONFIG_NAME = "default"

override val helpers = mutableMapOf<AbstractConfigHelper<*>, String>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package org.progreso.api.managers
import org.progreso.api.command.AbstractCommand
import org.progreso.api.common.ObservableSet
import org.progreso.api.config.AbstractConfigHelper
import org.progreso.api.config.container.AbstractConfigHelperContainer
import org.progreso.api.config.container.ConfigHelperContainer
import org.progreso.api.module.AbstractModule
import org.progreso.api.plugin.AbstractPlugin
import org.progreso.api.plugin.container.PluginContainer
Expand All @@ -23,7 +23,7 @@ object PluginManager : PluginContainer {
}
}

val configContainer = object : AbstractConfigHelperContainer {
val configContainer = object : ConfigHelperContainer {
override val helpers = mutableMapOf<AbstractConfigHelper<*>, String>()

override fun getHelperByName(name: String): AbstractConfigHelper<*> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,43 +9,36 @@ import org.progreso.api.event.events.PluginEvent
import org.progreso.api.managers.PluginManager
import org.progreso.api.module.AbstractModule
import org.progreso.api.module.container.ModuleContainer
import kotlin.properties.Delegates

/**
* Abstract plugin class
*
* @param name Plugin Name
* @param version Plugin Version
* @param author Plugin Author
* @param description Plugin Description
* @param mixinConfigs Plugin Mixin Configs
*/
@Suppress("MemberVisibilityCanBePrivate")
abstract class AbstractPlugin(
val name: String,
val version: String,
val author: String,
val description: String? = null,
val mixinConfigs: Array<String> = arrayOf()
) : ModuleContainer, CommandContainer {
abstract class AbstractPlugin : ModuleContainer, CommandContainer {
override val modules = mutableSetOf<AbstractModule>()
override val commands = mutableSetOf<AbstractCommand>()

private val configHelper = ModuleConfigHelper(
name = "plugin",
path = "plugins",
provider = ModuleConfigProvider(this),
container = PluginManager.configContainer,
defaultConfigName = name
)

init {
PluginManager.configContainer.setHelperConfig(configHelper, name)
var name: String by Delegates.notNull()
var version: String by Delegates.notNull()
var author: String by Delegates.notNull()

private val configHelper by lazy {
ModuleConfigHelper(
name = "plugin",
path = "plugins",
provider = ModuleConfigProvider(this),
container = PluginManager.configContainer,
defaultConfigName = name
)
}

abstract fun load()
abstract fun unload()

fun loadPlugin() {
PluginManager.configContainer.setHelperConfig(configHelper, name)

load()

configHelper.load(name)
Expand Down

This file was deleted.

This file was deleted.

14 changes: 14 additions & 0 deletions progreso-client/src/main/kotlin/org/progreso/client/Client.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package org.progreso.client

import net.fabricmc.api.ModInitializer
import net.fabricmc.loader.api.FabricLoader
import net.minecraft.client.MinecraftClient
import org.progreso.api.Api
import org.progreso.api.command.AbstractCommand
import org.progreso.api.managers.CommandManager
import org.progreso.api.managers.ModuleManager
import org.progreso.api.managers.PluginManager
import org.progreso.api.module.AbstractModule
import org.progreso.api.plugin.AbstractPlugin
import org.progreso.client.accessors.ChatAccessor
import org.progreso.client.accessors.EventAccessor
import org.progreso.client.accessors.LoggerAccessor
Expand All @@ -29,6 +32,17 @@ class Client : ModInitializer {
}

override fun onInitialize() {
for (entrypoint in FabricLoader.getInstance().getEntrypointContainers("progreso", AbstractPlugin::class.java)) {
val metadata = entrypoint.provider.metadata
val plugin = entrypoint.entrypoint

plugin.name = metadata.name
plugin.version = metadata.version.friendlyString
plugin.author = metadata.authors.first().name

PluginManager.addPlugin(plugin)
}

LOGGER.info("Initializing client modules...")
for (clazz in Reflections("org.progreso.client.module.modules").getSubTypesOf(AbstractModule::class.java)) {
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,14 @@
package org.progreso.client.command.commands

import org.progreso.api.command.argument.arguments.PluginArgumentType
import org.progreso.api.command.argument.arguments.StringArgumentType.Companion.string
import org.progreso.api.command.dispatcher.CommandContext
import org.progreso.api.managers.PluginManager
import org.progreso.api.plugin.AbstractPlugin
import org.progreso.api.plugin.loader.PluginLoader
import org.progreso.client.command.Command
import org.progreso.client.gui.minecraft.ProgresoPluginsScreen

object PluginCommand : Command("plugin") {
init {
literal("load") {
argument("path", string()).executes { context ->
val path: String by context

try {
val plugin = PluginLoader.loadPlugin(path)
PluginManager.addPlugin(plugin)
plugin.loadPlugin()
info("Loaded ${plugin.name} plugin")
} catch (ex: Exception) {
error("Error loading plugin (see error in logs)")
ex.printStackTrace()
}
}
}

literal("unload") {
argument("plugin", PluginArgumentType.create()).executes { context ->
val plugin = context.plugin() ?: return@executes
Expand All @@ -46,10 +28,6 @@ object PluginCommand : Command("plugin") {
info("Name: ${plugin.name}")
info("Version: ${plugin.version}")
info("Author: ${plugin.author}")

if (plugin.description != null) {
info("Description: ${plugin.description}")
}
}
}

Expand Down

This file was deleted.

3 changes: 0 additions & 3 deletions progreso-client/src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@
"entrypoints": {
"main": [
"org.progreso.client.Client"
],
"preLaunch": [
"org.progreso.client.mixin.MixinLoader"
]
},
"mixins": [
Expand Down

0 comments on commit 2c95089

Please sign in to comment.