{"id":26337123,"url":"https://github.com/truewinter/pluginmanager","last_synced_at":"2025-09-13T19:04:49.676Z","repository":{"id":213748537,"uuid":"734837860","full_name":"TrueWinter/PluginManager","owner":"TrueWinter","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-15T16:33:21.000Z","size":32,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-15T20:18:53.386Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TrueWinter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-22T19:08:30.000Z","updated_at":"2024-07-15T16:33:25.000Z","dependencies_parsed_at":"2024-02-04T17:03:24.258Z","dependency_job_id":"c55b6c2a-181e-4bf5-bd29-77321b7b1b97","html_url":"https://github.com/TrueWinter/PluginManager","commit_stats":null,"previous_names":["truewinter/pluginmanager"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrueWinter%2FPluginManager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrueWinter%2FPluginManager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrueWinter%2FPluginManager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrueWinter%2FPluginManager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TrueWinter","download_url":"https://codeload.github.com/TrueWinter/PluginManager/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243814895,"owners_count":20352038,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-16T02:17:46.009Z","updated_at":"2025-03-16T02:17:47.113Z","avatar_url":"https://github.com/TrueWinter.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PluginManager\n\nPluginManager is a library that can be easily integrated with your software to allow your users to create plugins.\n\n## Usage\n\n```xml\n\u003cproject\u003e    \n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003edev.truewinter\u003c/groupId\u003e\n            \u003cartifactId\u003ePluginManager\u003c/artifactId\u003e\n            \u003c!-- Check the releases page for the latest version --\u003e\n            \u003cversion\u003e0.0.0\u003c/version\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n\u003c/project\u003e\n```\n\nThe default plugin manager requires a `plugin.yml` to be included in the plugin containing the following:\n\n```yaml\n# A unique name for this plugin, must be alphanumeric\nname: PluginName\n# The plugin's main class\nmain_class: org.example.plugin.Plugin\n```\n\nAn example for using the plugin manager for software called CoolSoftware, loading a plugin called CoolPlugin, is included below:\n\n```java\n// In CoolSoftware\npublic interface CoolSoftwareAPI {\n    // CoolSoftware's API methods\n    void exampleApiMethod();\n}\n\npublic class PluginLoader {\n    public PluginLoader() {\n        PluginManager\u003cCoolSoftwareAPI\u003e pluginManager = new PluginManager\u003c\u003e(c -\u003e {\n            // Handle PluginManagerLog messages\n        });\n        \n        // This variable should contain a list of plugins, including CoolPlugin\n        List\u003cFile\u003e pluginJars = new ArrayList\u003c\u003e();\n        pluginManager.loadPlugins(pluginJars);\n        \n        SomeEvent event = pluginManager.fireEvent(new SomeEvent());\n        if (!event.isCancelled()) {\n            // Do something if the event has not been cancelled\n        }\n    }\n}\n\npublic abstract class CoolSoftwarePlugin extends Plugin\u003cCoolSoftwareAPI\u003e {\n    // Implement methods\n}\n\n// Events can extend Event if you don't want to allow cancellation\npublic class SomeEvent extends CancellableEvent {\n    public String exampleEventMethod() {\n        return \"SomeEvent example\";\n    }\n}\n```\n\n```java\n// In CoolPlugin\npublic class EventListener implements Listener {\n    @EventHandler\n    public onEvent(SomeEvent e) {\n        e.exampleEventMethod();\n        e.setCancelled(true);\n    }\n}\n\n// If a plugin wants to use the getPluginByName(String) method,\n// it must implement UsesAnotherPlugin and only call the method\n// after the onAllPluginsLoaded() method.\npublic class CoolPlugin extends CoolSoftwarePlugin {\n    // It is only safe to interact with the API once the onLoad()\n    // method has been called.\n    @Override\n    protected void onLoad() {\n        getLogger().info(\"Plugin loaded\");\n        getApi().exampleApiMethod();\n        registerListeners(this, new EventListener());\n    }\n    \n    @Override\n    protected void onUnload() {\n        getLogger().info(\"Plugin unloaded\");\n    }\n}\n```\n\nCoolPlugin's `pom.xml` should look similar to the following:\n\n```xml\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.example\u003c/groupId\u003e\n        \u003cartifactId\u003eCoolSoftware\u003c/artifactId\u003e\n        \u003cversion\u003e{version}\u003c/version\u003e\n        \u003cscope\u003eprovided\u003c/scope\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n## Docs\n\n[Javadoc available on Jitpack](https://javadoc.jitpack.io/dev/TrueWinter/PluginManager/latest/javadoc/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftruewinter%2Fpluginmanager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftruewinter%2Fpluginmanager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftruewinter%2Fpluginmanager/lists"}