{"id":51463164,"url":"https://github.com/Minecrell/plugin-yml","last_synced_at":"2026-07-25T01:00:37.081Z","repository":{"id":38386221,"uuid":"104904731","full_name":"Minecrell/plugin-yml","owner":"Minecrell","description":"A Gradle plugin that generates plugin.yml for Bukkit/Paper/BungeeCord/Nukkit plugins based on the Gradle project","archived":true,"fork":false,"pushed_at":"2024-09-21T18:51:54.000Z","size":345,"stargazers_count":146,"open_issues_count":7,"forks_count":19,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-08-13T20:55:31.122Z","etag":null,"topics":["bukkit","bungee","bungeecord","gradle","gradle-plugin","kotlin-dsl","nukkit","paper","spigot"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/Minecrell.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2017-09-26T15:40:14.000Z","updated_at":"2025-08-13T04:44:30.000Z","dependencies_parsed_at":"2025-08-13T20:35:54.037Z","dependency_job_id":null,"html_url":"https://github.com/Minecrell/plugin-yml","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/Minecrell/plugin-yml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Minecrell%2Fplugin-yml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Minecrell%2Fplugin-yml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Minecrell%2Fplugin-yml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Minecrell%2Fplugin-yml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Minecrell","download_url":"https://codeload.github.com/Minecrell/plugin-yml/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Minecrell%2Fplugin-yml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35861394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-24T02:00:07.870Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["bukkit","bungee","bungeecord","gradle","gradle-plugin","kotlin-dsl","nukkit","paper","spigot"],"created_at":"2026-07-06T08:00:23.217Z","updated_at":"2026-07-25T01:00:37.074Z","avatar_url":"https://github.com/Minecrell.png","language":"Kotlin","funding_links":[],"categories":["Kotlin"],"sub_categories":[],"readme":"# plugin-yml\n\u003e [!IMPORTANT]\n\u003e **IMPORTANT NOTE:** This project is now maintained at https://github.com/eldoriarpg/plugin-yml.  \n\u003e This repository will no longer receive any updates and will be archived in the future.\n\n[plugin-yml] is a simple Gradle plugin that generates the `plugin.yml` plugin description file for Bukkit plugins,\n`paper-plugin.yml` for Paper plugins, `bungee.yml` for Bungee plugins or `nukkit.yml` for Nukkit plugins based on\nthe Gradle project. Various properties are set automatically (e.g. project name, version or description) and\nadditional properties can be added using a simple DSL.\n\n## Usage\n[plugin-yml] requires at least **Gradle 7.4**. Using the latest version of Gradle is recommended.\nIf you are using an older version of Gradle, try using an older version of plugin-yml as well.\nplugin-yml `0.5.2` still supports Gradle 5.0+.\n\n### Default values\n\n| Property | Value |\n| ------------- | ------------- |\n| Plugin name | Project name |\n| Plugin version | Project version |\n| Plugin description | Project description |\n| Plugin URL (Bukkit only) | `url` project property |\n| Plugin author | `author` project property |\n\n### Bukkit\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eGroovy\u003c/strong\u003e\u003c/summary\u003e\n\n```groovy\nplugins {\n    id 'net.minecrell.plugin-yml.bukkit' version '0.6.0'\n}\n\ndependencies {\n    // Downloaded from Maven Central when the plugin is loaded\n    library 'com.google.code.gson:gson:2.10.1' // All platform plugins\n    bukkitLibrary 'com.google.code.gson:gson:2.10.1' // Bukkit only\n}\n\nbukkit {\n    // Default values can be overridden if needed\n    // name = 'TestPlugin'\n    // version = '1.0'\n    // description = 'This is a test plugin'\n    // website = 'https://example.com'\n    // author = 'Notch'\n\n    // Plugin main class (required)\n    main = 'com.example.testplugin.TestPlugin'\n\n    // Mark plugin for supporting Folia\n    foliaSupported = true\n\n    // API version (should be set for 1.13+)\n    apiVersion = '1.13'\n\n    // Other possible properties from plugin.yml (optional)\n    load = 'STARTUP' // or 'POSTWORLD'\n    authors = ['Notch', 'Notch2']\n    contributors = ['Notch3', 'Notch4']\n    depend = ['WorldEdit']\n    softDepend = ['Essentials']\n    loadBefore = ['BrokenPlugin']\n    prefix = 'TEST'\n    defaultPermission = 'OP' // 'TRUE', 'FALSE', 'OP' or 'NOT_OP'\n    provides = ['TestPluginOldName', 'TestPlug']\n\n    commands {\n        test {\n            description = 'This is a test command!'\n            aliases = ['t']\n            permission = 'testplugin.test'\n            usage = 'Just run the command!'\n            // permissionMessage = 'You may not test this command!'\n        }\n        // ...\n    }\n\n    permissions {\n        'testplugin.*' {\n            children = ['testplugin.test'] // Defaults permissions to true\n            // You can also specify the values of the permissions\n            childrenMap = ['testplugin.test': false]\n        }\n        'testplugin.test' {\n            description = 'Allows you to run the test command'\n            setDefault('OP') // 'TRUE', 'FALSE', 'OP' or 'NOT_OP'\n        }\n    }\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ekotlin-dsl\u003c/strong\u003e\u003c/summary\u003e\n\n```kotlin\nplugins {\n    java // or `kotlin(\"jvm\") version \"...\"`\n    id(\"net.minecrell.plugin-yml.bukkit\") version \"0.6.0\"\n}\n\ndependencies {\n    // Downloaded from Maven Central when the plugin is loaded\n    // library(kotlin(\"stdlib\")) // When using kotlin\n    library(\"com.google.code.gson\", \"gson\", \"2.10.1\") // All platform plugins\n    bukkitLibrary(\"com.google.code.gson\", \"gson\", \"2.10.1\") // Bukkit only\n}\n\nbukkit {\n    // Default values can be overridden if needed\n    // name = \"TestPlugin\"\n    // version = \"1.0\"\n    // description = \"This is a test plugin\"\n    // website = \"https://example.com\"\n    // author = \"Notch\"\n\n    // Plugin main class (required)\n    main = \"com.example.testplugin.TestPlugin\"\n\n    // Mark plugin for supporting Folia\n    foliaSupported = true\n\n    // API version (should be set for 1.13+)\n    apiVersion = \"1.13\"\n\n    // Other possible properties from plugin.yml (optional)\n    load = BukkitPluginDescription.PluginLoadOrder.STARTUP // or POSTWORLD\n    authors = listOf(\"Notch\", \"Notch2\")\n    contributors = listOf(\"Notch3\", \"Notch4\")\n    depend = listOf(\"WorldEdit\")\n    softDepend = listOf(\"Essentials\")\n    loadBefore = listOf(\"BrokenPlugin\")\n    prefix = \"TEST\"\n    defaultPermission = BukkitPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP\n    provides = listOf(\"TestPluginOldName\", \"TestPlug\")\n\n    commands {\n        register(\"test\") {\n            description = \"This is a test command!\"\n            aliases = listOf(\"t\")\n            permission = \"testplugin.test\"\n            usage = \"Just run the command!\"\n            // permissionMessage = \"You may not test this command!\"\n        }\n        // ...\n    }\n\n    permissions {\n        register(\"testplugin.*\") {\n            children = listOf(\"testplugin.test\") // Defaults permissions to true\n            // You can also specify the values of the permissions\n            childrenMap = mapOf(\"testplugin.test\" to true)\n        }\n        register(\"testplugin.test\") {\n            description = \"Allows you to run the test command\"\n            default = BukkitPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP\n        }\n    }\n}\n```\n\u003c/details\u003e\n\n### Paper\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eGroovy\u003c/strong\u003e\u003c/summary\u003e\n\n```groovy\nplugins {\n    id 'java'\n    id 'net.minecrell.plugin-yml.paper' version '0.6.0'\n}\n\nrepositories {\n    mavenCentral()\n    maven { url \"https://papermc.io/repo/repository/maven-public/\" }\n}\n\n// NOTE: Paper does not support plugin libraries without additional setup!\n// Please see \"Plugin Libraries JSON\" in the README for instructions.\ndependencies {\n    // Downloaded from Maven Central when the plugin is loaded\n    library 'com.google.code.gson:gson:2.10.1' // All platform plugins\n    paperLibrary 'com.google.code.gson:gson:2.10.1' // Paper only\n\n    // Make use of classes included by `bootstrapDependencies` and `serverDependencies` sections below\n    //   compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.2.14'\n}\n\npaper {\n    // Default values can be overridden if needed\n    // name = 'TestPlugin'\n    // version = '1.0'\n    // description = 'This is a test plugin'\n    // website = 'https://example.com'\n    // author = 'Notch'\n\n    // Plugin main class (required)\n    main = 'com.example.testplugin.TestPlugin'\n\n    // Plugin bootstrapper/loader (optional)\n    bootstrapper = 'com.example.testplugin.bootstrap.TestPluginBootstrap'\n    loader = 'com.example.testplugin.loader.TestPluginLoader'\n    hasOpenClassloader = false\n\n    // Generate paper-libraries.json from `library` and `paperLibrary` in `dependencies`\n    generateLibrariesJson = true\n\n    // Mark plugin for supporting Folia\n    foliaSupported = true\n\n    // API version (needs to be 1.19 or higher)\n    apiVersion = '1.19'\n\n    // Other possible properties from paper-plugin.yml (optional)\n    load = 'STARTUP' // or 'POSTWORLD'\n    authors = ['Notch', 'Notch2']\n    contributors = ['Notch3', 'Notch4']\n    prefix = 'TEST'\n    provides = ['TestPluginOldName', 'TestPlug']\n\n    // Bootstrap dependencies - Very rarely needed\n    bootstrapDependencies {\n        // Required dependency during bootstrap\n        'WorldEdit' {}\n\n        // During bootstrap, load BeforePlugin's bootstrap code before ours\n        'BeforePlugin' {\n            load = 'BEFORE'\n            required = false\n            joinClasspath = false\n        }\n        // During bootstrap, load AfterPlugin's bootstrap code after ours\n        'AfterPlugin' {\n            load = 'AFTER'\n            required = false\n            joinClasspath = false\n        }\n    }\n\n    serverDependencies {\n        // During server run time, require LuckPerms, add it to the classpath, and load it before us\n        'LuckPerms' {\n            load = 'BEFORE'\n        }\n\n        // During server run time, require WorldEdit, add it to the classpath, and load it before us\n        'WorldEdit' {\n            load = 'BEFORE'\n        }\n\n        // Optional dependency, add it to classpath if it is available\n        'ProtocolLib' {\n            required = false\n        }\n\n        // During server run time, optionally depend on Essentials but do not add it to the classpath\n        'Essentials' {\n            required = false\n            joinClasspath = false\n        }\n    }\n\n    permissions {\n        'testplugin.*' {\n            children = ['testplugin.test'] // Defaults permissions to true\n            // You can also specify the values of the permissions\n            childrenMap = ['testplugin.test': false]\n        }\n        'testplugin.test' {\n            description = 'Allows you to run the test command'\n            setDefault('OP') // 'TRUE', 'FALSE', 'OP' or 'NOT_OP'\n        }\n    }\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ekotlin-dsl\u003c/strong\u003e\u003c/summary\u003e\n\n```kotlin\nimport net.minecrell.pluginyml.bukkit.BukkitPluginDescription\nimport net.minecrell.pluginyml.paper.PaperPluginDescription\n\nplugins {\n    java // or `kotlin(\"jvm\") version \"...\"`\n    id(\"net.minecrell.plugin-yml.paper\") version \"0.6.0\"\n}\n\nrepositories {\n    mavenCentral()\n    maven { url = uri(\"https://papermc.io/repo/repository/maven-public/\") }\n}\n\n// NOTE: Paper does not support plugin libraries without additional setup!\n// Please see \"Plugin Libraries JSON\" in the README for instructions.\ndependencies {\n    // Downloaded from Maven Central when the plugin is loaded\n    // library(kotlin(\"stdlib\")) // When using kotlin\n    library(\"com.google.code.gson\", \"gson\", \"2.10.1\") // All platform plugins\n    paperLibrary(\"com.google.code.gson\", \"gson\", \"2.10.1\") // Paper only\n\n    // Make use of classes included by `bootstrapDependencies` and `serverDependencies` sections below\n    //   compileOnly(\"com.sk89q.worldedit\", \"worldedit-bukkit\", \"7.2.14\")\n}\n\npaper {\n    // Default values can be overridden if needed\n    // name = \"TestPlugin\"\n    // version = \"1.0\"\n    // description = \"This is a test plugin\"\n    // website = \"https://example.com\"\n    // author = \"Notch\"\n\n    // Plugin main class (required)\n    main = \"com.example.testplugin.TestPlugin\"\n\n    // Plugin bootstrapper/loader (optional)\n    bootstrapper = \"com.example.testplugin.bootstrap.TestPluginBootstrap\"\n    loader = \"com.example.testplugin.loader.TestPluginLoader\"\n    hasOpenClassloader = false\n\n    // Generate paper-libraries.json from `library` and `paperLibrary` in `dependencies`\n    generateLibrariesJson = true\n\n    // Mark plugin for supporting Folia\n    foliaSupported = true\n\n    // API version (Needs to be 1.19 or higher)\n    apiVersion = \"1.19\"\n\n    // Other possible properties from plugin.yml (optional)\n    load = BukkitPluginDescription.PluginLoadOrder.STARTUP // or POSTWORLD\n    authors = listOf(\"Notch\", \"Notch2\")\n\n    prefix = \"TEST\"\n    defaultPermission = BukkitPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP\n    provides = listOf(\"TestPluginOldName\", \"TestPlug\")\n\n    bootstrapDependencies {\n        // Required dependency during bootstrap\n        register(\"WorldEdit\")\n\n        // During bootstrap, load BeforePlugin's bootstrap code before ours\n        register(\"BeforePlugin\") {\n            required = false\n            load = PaperPluginDescription.RelativeLoadOrder.BEFORE\n        }\n        // During bootstrap, load AfterPlugin's bootstrap code after ours\n        register(\"AfterPlugin\") {\n            required = false\n            load = PaperPluginDescription.RelativeLoadOrder.AFTER\n        }\n    }\n\n    serverDependencies {\n        // During server run time, require LuckPerms, add it to the classpath, and load it before us\n        register(\"LuckPerms\") {\n            load = PaperPluginDescription.RelativeLoadOrder.BEFORE\n        }\n\n        // During server run time, require WorldEdit, add it to the classpath, and load it before us\n        register(\"WorldEdit\") {\n            load = PaperPluginDescription.RelativeLoadOrder.BEFORE\n        }\n\n        // Optional dependency, add it to classpath if it is available\n        register(\"ProtocolLib\") {\n            required = false\n        }\n\n        // During server run time, optionally depend on Essentials but do not add it to the classpath\n        register(\"Essentials\") {\n            required = false\n            joinClasspath = false\n        }\n    }\n\n    permissions {\n        register(\"testplugin.*\") {\n            children = listOf(\"testplugin.test\") // Defaults permissions to true\n            // You can also specify the values of the permissions\n            childrenMap = mapOf(\"testplugin.test\" to true)\n        }\n        register(\"testplugin.test\") {\n            description = \"Allows you to run the test command\"\n            default = BukkitPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP\n        }\n    }\n}\n```\n\u003c/details\u003e\n\n### BungeeCord\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eGroovy\u003c/strong\u003e\u003c/summary\u003e\n\n```groovy\nplugins {\n    id 'net.minecrell.plugin-yml.bungee' version '0.6.0'\n}\n\ndependencies {\n    // Downloaded from Maven Central when the plugin is loaded\n    library 'com.google.code.gson:gson:2.10.1' // All platform plugins\n    bungeeLibrary 'com.google.code.gson:gson:2.10.1' // Bungee only\n}\n\nbungee {\n    // Default values can be overridden if needed\n    // name = 'TestPlugin'\n    // version = '1.0'\n    // description = 'This is a test plugin'\n\n    // Plugin main class (required)\n    main = 'com.example.testplugin.TestPlugin'\n\n    // Other possible properties from bungee.yml\n    author = 'Notch'\n    depends = ['Yamler']\n    softDepends = ['ServerListPlus']\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ekotlin-dsl\u003c/strong\u003e\u003c/summary\u003e\n\n```kotlin\nplugins {\n    java // or `kotlin(\"jvm\") version \"...\"`\n    id(\"net.minecrell.plugin-yml.bungee\") version \"0.6.0\"\n}\n\ndependencies {\n    // Downloaded from Maven Central when the plugin is loaded\n    // library(kotlin(\"stdlib\")) // When using kotlin\n    library(\"com.google.code.gson\", \"gson\", \"2.10.1\") // All platform plugins\n    bungeeLibrary(\"com.google.code.gson\", \"gson\", \"2.10.1\") // Bungee only\n}\n\nbungee {\n    // Default values can be overridden if needed\n    // name = \"TestPlugin\"\n    // version = \"1.0\"\n    // description = \"This is a test plugin\"\n\n    // Plugin main class (required)\n    main = \"com.example.testplugin.TestPlugin\"\n\n    // Other possible properties from bungee.yml\n    author = \"Notch\"\n    depends = setOf(\"Yamler\")\n    softDepends = setOf(\"ServerListPlus\")\n}\n```\n\u003c/details\u003e\n\n### Nukkit\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eGroovy\u003c/strong\u003e\u003c/summary\u003e\n\n```groovy\nplugins {\n    id 'net.minecrell.plugin-yml.nukkit' version '0.6.0'\n}\n\nnukkit {\n    // Default values can be overridden if needed\n    // name = 'TestPlugin'\n    // version = '1.0'\n    // description = 'This is a test plugin'\n    // website = 'https://example.com'\n    // author = 'Notch'\n\n    // Plugin main class and api (required)\n    main = 'com.example.testplugin.TestPlugin'\n    api = ['1.0.0']\n\n    // Other possible properties from nukkit.yml (optional)\n    load = 'STARTUP' // or 'POSTWORLD'\n    authors = ['Notch', 'Notch2']\n    depend = ['PlotSquared']\n    softDepend = ['LuckPerms']\n    loadBefore = ['BrokenPlugin']\n    prefix = 'TEST'\n\n    commands {\n        test {\n            description = 'This is a test command!'\n            aliases = ['t']\n            permission = 'testplugin.test'\n            usage = 'Just run the command!'\n        }\n        // ...\n    }\n\n    permissions {\n        'testplugin.*' {\n            description = 'Allows you to run all testplugin commands'\n            children {\n                'testplugin.test' {\n                    description = 'Allows you to run the test command'\n                    setDefault('OP') // 'TRUE', 'FALSE', 'OP' or 'NOT_OP'\n                }\n            }\n        }\n    }\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ekotlin-dsl\u003c/strong\u003e\u003c/summary\u003e\n\n```kotlin\nplugins {\n    java // or `kotlin(\"jvm\") version \"...\"`\n    id(\"net.minecrell.plugin-yml.nukkit\") version \"0.6.0\"\n}\n\nnukkit {\n    // Default values can be overridden if needed\n    // name = \"TestPlugin\"\n    // version = \"1.0\"\n    // description = \"This is a test plugin\"\n    // website = \"https://example.com\"\n    // author = \"Notch\"\n\n    // Plugin main class and api (required)\n    main = \"com.example.testplugin.TestPlugin\"\n    api = listOf(\"1.0.0\")\n\n    // Other possible properties from nukkit.yml (optional)\n    load = NukkitPluginDescription.PluginLoadOrder.STARTUP // or POSTWORLD\n    authors = listOf(\"Notch\", \"Notch2\")\n    depend = listOf(\"PlotSquared\")\n    softDepend = listOf(\"LuckPerms\")\n    loadBefore = listOf(\"BrokenPlugin\")\n    prefix = \"TEST\"\n\n    commands {\n        register(\"test\") {\n            description = \"This is a test command!\"\n            aliases = listOf(\"t\")\n            permission = \"testplugin.test\"\n            usage = \"Just run the command!\"\n        }\n        // ...\n    }\n\n    permissions {\n        register(\"testplugin.*\") {\n            description = \"Allows you to run all testplugin commands\"\n            children {\n                register(\"testplugin.test\") {\n                    description = \"Allows you to run the test command\"\n                    default = NukkitPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP\n                }\n            }\n        }\n    }\n}\n```\n\u003c/details\u003e\n\n## Plugin Libraries JSON\nPaper and Nukkit do not support specifying libraries directly in the plugin description file.\nplugin-yml still allows defining dependencies as `paperLibrary` and `nukkitLibrary` but these dependencies are not\nexported by default. Additional runtime plugin code is needed to set them up and load them. To simplify this, plugin-yml\ncan export them in a `paper-libraries.json` / `nukkit-libraries.json` file with the following structure:\n\n```json\n{\n    \"repositories\": {\"MavenRepo\": \"https://repo.maven.apache.org/maven2/\"},\n    \"dependencies\": [\"com.google.code.gson:gson:2.10.1\"]\n}\n```\n\nThis file is only generated after setting `generateLibrariesJson` to `true`, e.g.:\n\n```kotlin\npaper {\n    // generate paper-libraries.json\n    generateLibrariesJson = true\n}\n```\n\nThe JSON file is included in the plugin JAR and can be parsed at runtime to load the additional libraries.\n\n### Paper\nDefine a custom `PluginLoader` inside your plugin code, for example:\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eExample PluginLoader\u003c/strong\u003e\u003c/summary\u003e\n\n```kotlin\npaper {\n    loader = \"com.example.testplugin.PluginLibrariesLoader\"\n    generateLibrariesJson = true\n}\n```\n\n```java\nimport com.google.gson.Gson;\nimport io.papermc.paper.plugin.loader.PluginClasspathBuilder;\nimport io.papermc.paper.plugin.loader.PluginLoader;\nimport io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver;\nimport org.eclipse.aether.artifact.DefaultArtifact;\nimport org.eclipse.aether.graph.Dependency;\nimport org.eclipse.aether.repository.RemoteRepository;\nimport org.jetbrains.annotations.NotNull;\n\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.nio.charset.StandardCharsets;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.stream.Stream;\n\npublic class PluginLibrariesLoader implements PluginLoader {\n    @Override\n    public void classloader(@NotNull PluginClasspathBuilder classpathBuilder) {\n        MavenLibraryResolver resolver = new MavenLibraryResolver();\n        PluginLibraries pluginLibraries = load();\n        pluginLibraries.asDependencies().forEach(resolver::addDependency);\n        pluginLibraries.asRepositories().forEach(resolver::addRepository);\n        classpathBuilder.addLibrary(resolver);\n    }\n\n    public PluginLibraries load() {\n        try (var in = getClass().getResourceAsStream(\"/paper-libraries.json\")) {\n            return new Gson().fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), PluginLibraries.class);\n        } catch (IOException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    private record PluginLibraries(Map\u003cString, String\u003e repositories, List\u003cString\u003e dependencies) {\n        public Stream\u003cDependency\u003e asDependencies() {\n            return dependencies.stream()\n                    .map(d -\u003e new Dependency(new DefaultArtifact(d), null));\n        }\n\n        public Stream\u003cRemoteRepository\u003e asRepositories() {\n            return repositories.entrySet().stream()\n                    .map(e -\u003e new RemoteRepository.Builder(e.getKey(), \"default\", e.getValue()).build());\n        }\n    }\n}\n```\n\n\u003c/details\u003e\n\n### Nukkit\n(No example code available yet)\n\n### Bukkit/Bungee\n`generateLibrariesJson` is also supported on Bukkit/Bungee (to generate `bukkit-libraries.json`/`bungee-libraries.json`).\nHowever, since these two allow specifying libraries directly inside the `plugin.yml` the option is generally not needed\nthere.\n\n[plugin-yml]: https://github.com/Minecrell/plugin-yml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMinecrell%2Fplugin-yml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMinecrell%2Fplugin-yml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMinecrell%2Fplugin-yml/lists"}