{"id":20726351,"url":"https://github.com/badasintended/explosion","last_synced_at":"2026-04-02T18:37:27.833Z","repository":{"id":197253105,"uuid":"697683788","full_name":"badasintended/explosion","owner":"badasintended","description":"gradle plugin to resolve jar-in-jar dependencies","archived":false,"fork":false,"pushed_at":"2024-09-26T10:32:38.000Z","size":121,"stargazers_count":5,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-23T18:52:51.508Z","etag":null,"topics":["fabricmc","gradle","kotlin","minecraft","minecraft-forge","neoforge"],"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/badasintended.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},"funding":{"github":"deirn","ko_fi":"deirn","custom":["paypal.me/deirn","trakteer.id/deirn/tip"]}},"created_at":"2023-09-28T09:02:24.000Z","updated_at":"2025-04-13T17:22:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"455fe640-5740-4327-a02b-d252603bca67","html_url":"https://github.com/badasintended/explosion","commit_stats":null,"previous_names":["badasintended/explosion"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/badasintended/explosion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badasintended%2Fexplosion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badasintended%2Fexplosion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badasintended%2Fexplosion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badasintended%2Fexplosion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/badasintended","download_url":"https://codeload.github.com/badasintended/explosion/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badasintended%2Fexplosion/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31313047,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["fabricmc","gradle","kotlin","minecraft","minecraft-forge","neoforge"],"created_at":"2024-11-17T04:24:35.208Z","updated_at":"2026-04-02T18:37:27.812Z","avatar_url":"https://github.com/badasintended.png","language":"Kotlin","funding_links":["https://github.com/sponsors/deirn","https://ko-fi.com/deirn","paypal.me/deirn","trakteer.id/deirn/tip"],"categories":[],"sub_categories":[],"readme":"# explosion!!!\n\nThere is a time when you need to depend on a mod that uses Jar-in-Jar\nand you need to access classes from those JiJ, but it is a private JiJ,\nand it doesn't get published to any Maven repository, so you scrap your\nentire mod idea into the abyss, never to be seen again.\n\nRight? Or maybe it's only me?\n\nWell, I made this Gradle plugin to solve exactly that. This plugin will\nresolve Jar-in-Jars, making it available to be depended upon.\n\n## Basic Usage\n```groovy\n// settings.gradle\npluginManagement {\n   repositories {\n      maven {\n         url \"https://maven2.bai.lol\"\n         content {\n            includeGroup \"lol.bai.explosion\"\n         }\n      }\n   }\n}\n```\n\n```groovy\n// build.gradle\nplugins {\n   id \"lol.bai.explosion\" version \"0.3.1\"\n}\n\nrepositories {\n   maven {\n      url \"https://maven2.bai.lol\"\n      content {\n         includeGroup \"lol.bai.explosion\"\n      }\n   }\n}\n\ndependencies {\n   modImplementation explosion.fabric(\"curse.maven:fabric-api-306612:5710210\")\n   implementation explosion.forge(\"curse.maven:create-328085:5689514\")\n   implementation explosion.neoforge(\"curse.maven:ender-io-64578:5720393\")\n}\n```\n\u003e [!WARNING]\n\u003e `fg.deobf` won't work with exploded dependency, you need to manually deobfuscate\n\u003e the jar.\n\u003e ```groovy\n\u003e // replace the mapping as needed\n\u003e def mapping = \"official_1.20.1\"\n\u003e def deobfuscator = new net.minecraftforge.gradle.userdev.util.Deobfuscator(project, file(\"build/explosion_deobf\"))\n\u003e def explode = explosion.forge.with(mapping) {\n\u003e     transformer {\n\u003e         return deobfuscator.deobfBinary(it.toFile(), mapping, it.fileName.toString()).toPath()\n\u003e     }\n\u003e }\n\u003e \n\u003e // then use the explode variable\n\u003e implementation explode(\"curse.maven:create-328085:5689514\")\n\u003e ```\n\n## Advanced Usage\n\n### Local File Dependency\nExplosion also provides way to explode local file and directory.\n```groovy\nexplosion.fabric {\n    maven \"curse.maven:fabric-api-306612:4764776\"\n    local project.file(\"path/to/mod.jar\")\n    loacl project.file(\"path/to/mods/directory\")\n}\n```\n\n### Excluding Certain Mod\nAll resolved mods will have `exploded` as its group and the mod id as its module.\nYou can therefore exclude it with such.\n```groovy\ndef exploded = explosion.fabric { /*...*/ }\n\nmodImplementation(exploded) {\n    exclude group: \"exploded\", module: \"modid\" \n}\n```\n\n### Debugging Modpacks\nExplosion can also be used to debug modpacks by depending on the modpack's mods folder. \n1. Install the modpack using your favorite launcher.\n2. Open its instance folder, and rename the `mods` folder with something else, e.g. `mods-blabla`.\n3. Set up a dev environment, you can use the [Template Generator](https://fabricmc.net/develop/template/).\n   Disable the split sources for higher chance to work.\n4. Depend on the folder.\n   ```groovy\n   modImplementation explosion.fabric {\n       local project.file(\"path/to/mods-blabla\")\n   }\n   ```\n5. Configure the run directory to the instance folder.\n6. Pray for it to be able to run.\n7. Fix mappings error, if any.\n8. Pray again.\n\n## How does this work?\nExplosion simply uses the existing loader infrastructure on each\nplatform to load and resolve the mod jars. It literally runs the\nloader as if it's the runtime and hack it to get the loaded jars.\nWell, as long as it works, amirite?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadasintended%2Fexplosion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbadasintended%2Fexplosion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadasintended%2Fexplosion/lists"}