[{"data":1,"prerenderedAt":177},["ShallowReactive",2],{"docs-\u002Fbuild-logic\u002Foverview":3},{"id":4,"title":5,"body":6,"description":167,"extension":168,"meta":169,"navTitle":170,"navigation":171,"path":172,"rawbody":173,"seo":174,"stem":175,"__hash__":176},"docs\u002Fbuild-logic\u002Foverview.md","Build Tooling Overview",{"type":7,"value":8,"toc":161},"minimark",[9,13,25,28,89,94,101,111,129,133,136,158],[10,11,5],"h1",{"id":12},"build-tooling-overview",[14,15,16,20,21,24],"p",{},[17,18,19],"code",{},"build-logic"," is the Gradle convention toolkit that builds MagicUtils itself,\nand it is reusable: several mods already build on it. Instead of copying Gradle\nboilerplate between projects, you apply a small set of ",[17,22,23],{},"magicutils.*"," plugins and\ndescribe your project declaratively.",[14,26,27],{},"It gives you:",[29,30,31,46,60,69,79],"ul",{},[32,33,34,35,39,40,45],"li",{},"A ",[36,37,38],"strong",{},"multi-target matrix"," so one source tree builds against many Minecraft\nversions (and Java levels) without per-version branches. See\n",[41,42,44],"a",{"href":43},"\u002Fbuild-logic\u002Ftargets","Target Matrix",".",[32,47,48,51,52,55,56,45],{},[36,49,50],{},"Consumer plugins"," (",[17,53,54],{},"magicutils.consumer-*",") that wire MagicUtils into your\nBukkit\u002FFabric\u002FVelocity\u002FBungee\u002FNeoForge module with a few lines. See\n",[41,57,59],{"href":58},"\u002Fbuild-logic\u002Fconsumer","Using It In A Mod",[32,61,62,65,66,45],{},[36,63,64],{},"Publishing"," to the self-hosted Reposilite Maven repo and to Modrinth. See\n",[41,67,64],{"href":68},"\u002Fbuild-logic\u002Fpublish",[32,70,71,74,75,45],{},[36,72,73],{},"Dev servers and compatibility smoke"," tests gated on runtime diagnostics.\nSee ",[41,76,78],{"href":77},"\u002Fbuild-logic\u002Fdev-server","Dev Server & Smoke",[32,80,81,84,85,45],{},[36,82,83],{},"Aggregated, themed Javadoc"," for the whole API. See\n",[41,86,88],{"href":87},"\u002Fbuild-logic\u002Fjavadoc","Aggregated Javadoc",[90,91,93],"h2",{"id":92},"where-it-lives","Where It Lives",[14,95,96,97,100],{},"The build-logic plugins are published to the MagicUtils Reposilite repo, so a\nconsuming project resolves them by version like any other Gradle plugin. Declare\nthe repositories and plugin versions in ",[17,98,99],{},"pluginManagement",", then apply the matrix\nsettings plugin at the top level:",[102,103,109],"pre",{"className":104,"code":106,"language":107,"meta":108},[105],"language-kotlin","pluginManagement {\n    repositories {\n        gradlePluginPortal()\n        mavenLocal()\n        maven(\"https:\u002F\u002Fmaven.theroer.dev\u002Freleases\")\n        maven(\"https:\u002F\u002Fmaven.fabricmc.net\u002F\")\n        maven(\"https:\u002F\u002Fmaven.neoforged.net\u002Freleases\")\n    }\n    plugins {\n        val buildLogicVersion = providers.gradleProperty(\"magicutilsBuildLogicVersion\").get()\n        id(\"magicutils.matrix-settings\") version buildLogicVersion\n        id(\"magicutils.matrix-root\") version buildLogicVersion\n        id(\"magicutils.consumer-common\") version buildLogicVersion\n        id(\"magicutils.consumer-bukkit\") version buildLogicVersion\n        id(\"magicutils.consumer-fabric\") version buildLogicVersion\n        \u002F\u002F Loom version so consumer-fabric can resolve the Loom id it applies\n        \u002F\u002F for the active target. Consumers never reference Loom directly.\n        val loomVersion = providers.gradleProperty(\"fabricLoomVersion\").get()\n        id(\"fabric-loom\") version loomVersion\n        id(\"net.fabricmc.fabric-loom\") version loomVersion\n    }\n}\n\nplugins {\n    id(\"magicutils.matrix-settings\")\n}\n","kotlin","",[17,110,106],{"__ignoreMap":108},[14,112,113,116,117,120,121,124,125,128],{},[17,114,115],{},"mavenLocal()"," lets you develop against a locally published build-logic; on CI\nand other machines it resolves from ",[17,118,119],{},"maven.theroer.dev",". ",[17,122,123],{},"includeBuild(...)"," is\n",[36,126,127],{},"not"," used for build-logic here — that mechanism only appears inside the\nMagicUtils repo itself, or optionally in a consumer to substitute a local\ncheckout of the library (not the build tooling).",[90,130,132],{"id":131},"the-two-dsls","The Two DSLs",[14,134,135],{},"Two extensions drive everything:",[29,137,138,148],{},[32,139,140,143,144,147],{},[17,141,142],{},"magicMatrix { }"," in ",[17,145,146],{},"settings.gradle.kts"," declares the target matrix, the\ncommon vs platform module split, scenarios, and the publish\u002Fsmoke config.",[32,149,150,153,154,157],{},[17,151,152],{},"magicutilsConsumer { }"," in a module's ",[17,155,156],{},"build.gradle.kts"," declares how that\nmodule consumes MagicUtils (version, embedded vs shared, which modules, and an\noptional dev server).",[14,159,160],{},"The pages in this section cover each area in turn.",{"title":108,"searchDepth":162,"depth":162,"links":163},3,[164,166],{"id":92,"depth":165,"text":93},2,{"id":131,"depth":165,"text":132},"MagicUtils build-logic is a reusable Gradle convention toolkit: one multi-target matrix, consumer plugins for your mod, and publish\u002Fdev-server\u002Fsmoke\u002FJavadoc automation.","md",{},null,true,"\u002Fbuild-logic\u002Foverview","---\ntitle: Build Tooling Overview\ndescription: 'MagicUtils build-logic is a reusable Gradle convention toolkit: one multi-target matrix, consumer plugins for your mod, and publish\u002Fdev-server\u002Fsmoke\u002FJavadoc automation.'\n---\n\n# Build Tooling Overview\n\n`build-logic` is the Gradle convention toolkit that builds MagicUtils itself,\nand it is reusable: several mods already build on it. Instead of copying Gradle\nboilerplate between projects, you apply a small set of `magicutils.*` plugins and\ndescribe your project declaratively.\n\nIt gives you:\n\n- A **multi-target matrix** so one source tree builds against many Minecraft\n  versions (and Java levels) without per-version branches. See\n  [Target Matrix](\u002Fbuild-logic\u002Ftargets).\n- **Consumer plugins** (`magicutils.consumer-*`) that wire MagicUtils into your\n  Bukkit\u002FFabric\u002FVelocity\u002FBungee\u002FNeoForge module with a few lines. See\n  [Using It In A Mod](\u002Fbuild-logic\u002Fconsumer).\n- **Publishing** to the self-hosted Reposilite Maven repo and to Modrinth. See\n  [Publishing](\u002Fbuild-logic\u002Fpublish).\n- **Dev servers and compatibility smoke** tests gated on runtime diagnostics.\n  See [Dev Server & Smoke](\u002Fbuild-logic\u002Fdev-server).\n- **Aggregated, themed Javadoc** for the whole API. See\n  [Aggregated Javadoc](\u002Fbuild-logic\u002Fjavadoc).\n\n## Where It Lives\n\nThe build-logic plugins are published to the MagicUtils Reposilite repo, so a\nconsuming project resolves them by version like any other Gradle plugin. Declare\nthe repositories and plugin versions in `pluginManagement`, then apply the matrix\nsettings plugin at the top level:\n\n```kotlin\npluginManagement {\n    repositories {\n        gradlePluginPortal()\n        mavenLocal()\n        maven(\"https:\u002F\u002Fmaven.theroer.dev\u002Freleases\")\n        maven(\"https:\u002F\u002Fmaven.fabricmc.net\u002F\")\n        maven(\"https:\u002F\u002Fmaven.neoforged.net\u002Freleases\")\n    }\n    plugins {\n        val buildLogicVersion = providers.gradleProperty(\"magicutilsBuildLogicVersion\").get()\n        id(\"magicutils.matrix-settings\") version buildLogicVersion\n        id(\"magicutils.matrix-root\") version buildLogicVersion\n        id(\"magicutils.consumer-common\") version buildLogicVersion\n        id(\"magicutils.consumer-bukkit\") version buildLogicVersion\n        id(\"magicutils.consumer-fabric\") version buildLogicVersion\n        \u002F\u002F Loom version so consumer-fabric can resolve the Loom id it applies\n        \u002F\u002F for the active target. Consumers never reference Loom directly.\n        val loomVersion = providers.gradleProperty(\"fabricLoomVersion\").get()\n        id(\"fabric-loom\") version loomVersion\n        id(\"net.fabricmc.fabric-loom\") version loomVersion\n    }\n}\n\nplugins {\n    id(\"magicutils.matrix-settings\")\n}\n```\n\n`mavenLocal()` lets you develop against a locally published build-logic; on CI\nand other machines it resolves from `maven.theroer.dev`. `includeBuild(...)` is\n**not** used for build-logic here — that mechanism only appears inside the\nMagicUtils repo itself, or optionally in a consumer to substitute a local\ncheckout of the library (not the build tooling).\n\n## The Two DSLs\n\nTwo extensions drive everything:\n\n- `magicMatrix { }` in `settings.gradle.kts` declares the target matrix, the\n  common vs platform module split, scenarios, and the publish\u002Fsmoke config.\n- `magicutilsConsumer { }` in a module's `build.gradle.kts` declares how that\n  module consumes MagicUtils (version, embedded vs shared, which modules, and an\n  optional dev server).\n\nThe pages in this section cover each area in turn.\n",{"title":5,"description":167},"build-logic\u002Foverview","qkpf_L7hJuGD0qcFae1kaUandWCYx_HZPPrKPKYnjPc",1783944486571]