mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-06-22 16:34:10 +00:00

I've no motivation for modding right now, but always got time for build system busywork! CC:T (and CC before that) has always published its API docs. However, they're not always the most helpful — they're useful if you know what you're looking for, but aren't a good getting-started guide. Part of the issue here is there's no examples, and everything is described pretty abstractly. I have occasionally tried to improve this (e.g. the peripheral docs in bdffabc08e2eb9895f966c949acc8334a2bf4475), but it's a long road. This commit adds a new example mod, which registers peripherals, an API and a turtle upgrade. While the mod itself isn't exported as part of the docs, we reference blocks of it using Java's new {@snippet} tag. - Switch the Forge project to use NeoForge's new Legacy MDG plugin. We don't *need* to do this, but it means the build logic for Forge and NeoForge is more closely aligned. - Add a new SnippetTaglet, which is a partial backport of Java 18+'s {@snippet}. - Add an example mod. This is a working multi-loader mod, complete with datagen (albeit with no good multi-loader abstractions). - Move our existing <pre>{@code ...}</pre> blocks into the example mod, replacing them with {@snippet}s. - Add a new overview page to the docs, providing some getting-started information. We had this already in the dan200.computercraft.api package docs, but it's not especially visible there.
135 lines
4.3 KiB
Plaintext
135 lines
4.3 KiB
Plaintext
// SPDX-FileCopyrightText: 2022 The CC: Tweaked Developers
|
|
//
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
import cc.tweaked.gradle.*
|
|
|
|
plugins {
|
|
id("cc-tweaked.vanilla")
|
|
id("cc-tweaked.illuaminate")
|
|
id("cc-tweaked.mod")
|
|
id("cc-tweaked.publishing")
|
|
}
|
|
|
|
minecraft {
|
|
accessWideners(
|
|
"src/main/resources/computercraft.accesswidener",
|
|
"src/main/resources/computercraft-common.accesswidener",
|
|
)
|
|
}
|
|
|
|
configurations {
|
|
register("cctJavadoc")
|
|
}
|
|
|
|
repositories {
|
|
maven("https://maven.minecraftforge.net/") {
|
|
content {
|
|
includeModule("org.spongepowered", "mixin")
|
|
}
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
// Pull in our other projects. See comments in MinecraftConfigurations on this nastiness.
|
|
api(project(":core"))
|
|
api(commonClasses(project(":common-api")))
|
|
clientApi(clientClasses(project(":common-api")))
|
|
|
|
compileOnly(libs.bundles.externalMods.common)
|
|
compileOnly(variantOf(libs.create.forge) { classifier("slim") }) { isTransitive = false }
|
|
clientCompileOnly(variantOf(libs.emi) { classifier("api") })
|
|
|
|
annotationProcessorEverywhere(libs.autoService)
|
|
testFixturesAnnotationProcessor(libs.autoService)
|
|
|
|
testImplementation(testFixtures(project(":core")))
|
|
testImplementation(libs.bundles.test)
|
|
testRuntimeOnly(libs.bundles.testRuntime)
|
|
|
|
testImplementation(libs.jmh)
|
|
testAnnotationProcessor(libs.jmh.processor)
|
|
|
|
testModCompileOnly(libs.mixin)
|
|
testModImplementation(testFixtures(project(":core")))
|
|
testModImplementation(testFixtures(project(":common")))
|
|
testModImplementation(libs.bundles.kotlin)
|
|
|
|
testFixturesImplementation(testFixtures(project(":core")))
|
|
|
|
"cctJavadoc"(libs.cctJavadoc)
|
|
}
|
|
|
|
illuaminate {
|
|
version.set(libs.versions.illuaminate)
|
|
}
|
|
|
|
val luaJavadoc by tasks.registering(Javadoc::class) {
|
|
description = "Generates documentation for Java-side Lua functions."
|
|
group = JavaBasePlugin.DOCUMENTATION_GROUP
|
|
|
|
val sourceSets = listOf(sourceSets.main.get(), project(":core").sourceSets.main.get())
|
|
for (sourceSet in sourceSets) {
|
|
source(sourceSet.java)
|
|
classpath += sourceSet.compileClasspath
|
|
}
|
|
|
|
destinationDir = layout.buildDirectory.dir("docs/luaJavadoc").get().asFile
|
|
|
|
val options = options as StandardJavadocDocletOptions
|
|
options.docletpath = configurations["cctJavadoc"].files.toList()
|
|
options.doclet = "cc.tweaked.javadoc.LuaDoclet"
|
|
options.addStringOption("project-root", rootProject.file(".").absolutePath)
|
|
options.noTimestamp(false)
|
|
|
|
javadocTool.set(
|
|
javaToolchains.javadocToolFor {
|
|
languageVersion.set(CCTweakedPlugin.JAVA_VERSION)
|
|
},
|
|
)
|
|
}
|
|
|
|
val lintLua by tasks.registering(IlluaminateExec::class) {
|
|
group = JavaBasePlugin.VERIFICATION_GROUP
|
|
description = "Lint Lua (and Lua docs) with illuaminate"
|
|
|
|
// Config files
|
|
inputs.file(rootProject.file("illuaminate.sexp")).withPropertyName("illuaminate.sexp")
|
|
// Sources
|
|
inputs.files(rootProject.fileTree("doc")).withPropertyName("docs")
|
|
inputs.files(project(":core").fileTree("src/main/resources/data/computercraft/lua")).withPropertyName("lua rom")
|
|
inputs.files(luaJavadoc)
|
|
|
|
args = listOf("lint")
|
|
workingDir = rootProject.projectDir
|
|
|
|
doFirst { if (System.getenv("GITHUB_ACTIONS") != null) println("::add-matcher::.github/matchers/illuaminate.json") }
|
|
doLast { if (System.getenv("GITHUB_ACTIONS") != null) println("::remove-matcher owner=illuaminate::") }
|
|
}
|
|
|
|
fun MergeTrees.configureForDatagen(source: SourceSet, outputFolder: String) {
|
|
output = layout.projectDirectory.dir(outputFolder)
|
|
|
|
for (loader in listOf("forge", "fabric")) {
|
|
mustRunAfter(":$loader:$name")
|
|
source {
|
|
input {
|
|
from(project(":$loader").layout.buildDirectory.dir(source.getTaskName("generateResources", null)))
|
|
exclude(".cache")
|
|
}
|
|
|
|
output = project(":$loader").layout.projectDirectory.dir(outputFolder)
|
|
}
|
|
}
|
|
}
|
|
|
|
val runData by tasks.registering(MergeTrees::class) {
|
|
configureForDatagen(sourceSets.main.get(), "src/generated/resources")
|
|
}
|
|
|
|
val runExampleData by tasks.registering(MergeTrees::class) {
|
|
configureForDatagen(sourceSets.examples.get(), "src/examples/generatedResources")
|
|
}
|
|
|
|
tasks.withType(GenerateModuleMetadata::class).configureEach { isEnabled = false }
|