feat(minecraft): Make every subproject its own mod

This commit is contained in:
2025-11-08 00:44:52 +01:00
parent 47ad406560
commit d2dada2b77
34 changed files with 186 additions and 65 deletions

View File

@@ -34,7 +34,7 @@ abstract class MinecraftModComponentPlugin : Plugin<Project> {
attribute(MinecraftModded.MINECRAFT_MODDED_ATTRIBUTE, objectFactory.named(MinecraftModded.MODDED)) attribute(MinecraftModded.MINECRAFT_MODDED_ATTRIBUTE, objectFactory.named(MinecraftModded.MODDED))
attribute(Category.CATEGORY_ATTRIBUTE, objectFactory.named(Category.LIBRARY)) attribute(Category.CATEGORY_ATTRIBUTE, objectFactory.named(Category.LIBRARY))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objectFactory.named(LibraryElements.JAR)) attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objectFactory.named(LibraryElements.JAR))
attribute(Bundling.BUNDLING_ATTRIBUTE, objectFactory.named(Bundling.SHADOWED)) attribute(Bundling.BUNDLING_ATTRIBUTE, objectFactory.named(Bundling.EMBEDDED))
attribute(Usage.USAGE_ATTRIBUTE, objectFactory.named(Usage.JAVA_RUNTIME)) attribute(Usage.USAGE_ATTRIBUTE, objectFactory.named(Usage.JAVA_RUNTIME))
project.afterEvaluate { project.afterEvaluate {
@@ -48,8 +48,8 @@ abstract class MinecraftModComponentPlugin : Plugin<Project> {
attribute(MinecraftModded.MINECRAFT_MODDED_ATTRIBUTE, objectFactory.named(MinecraftModded.MODDED)) attribute(MinecraftModded.MINECRAFT_MODDED_ATTRIBUTE, objectFactory.named(MinecraftModded.MODDED))
attribute(Category.CATEGORY_ATTRIBUTE, objectFactory.named(Category.LIBRARY)) attribute(Category.CATEGORY_ATTRIBUTE, objectFactory.named(Category.LIBRARY))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objectFactory.named(LibraryElements.JAR)) attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objectFactory.named(LibraryElements.JAR))
attribute(Bundling.BUNDLING_ATTRIBUTE, objectFactory.named(Bundling.SHADOWED)) attribute(Bundling.BUNDLING_ATTRIBUTE, objectFactory.named(Bundling.EXTERNAL))
attribute(Usage.USAGE_ATTRIBUTE, objectFactory.named(Usage.JAVA_API)) attribute(Usage.USAGE_ATTRIBUTE, objectFactory.named(Usage.JAVA_RUNTIME))
project.afterEvaluate { project.afterEvaluate {
attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, targetJvmVersion.get().toInt()) attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, targetJvmVersion.get().toInt())

View File

@@ -2,6 +2,7 @@ plugins {
id("com.gradleup.shadow") id("com.gradleup.shadow")
java java
`java-library` `java-library`
id("de.siphalor.tweed5.shadow.explicit")
id("de.siphalor.tweed5.minecraft.mod.component") id("de.siphalor.tweed5.minecraft.mod.component")
} }
@@ -10,16 +11,25 @@ java {
targetCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8
} }
val minecraftJijElements = configurations.resolvable("minecraftJijElements")
tasks.shadowJar { tasks.shadowJar {
relocate("org.apache.commons", "de.siphalor.tweed5.shadowed.org.apache.commons") relocate("org.apache.commons", "de.siphalor.tweed5.shadowed.org.apache.commons")
} }
fun formatJarsForJson(jars: FileCollection): String {
return jars.files.joinToString(",") { "{\"file\":\"META-INF/jars/${it.name}\"}"}
}
tasks.register<Sync>("processMinecraftModResources") { tasks.register<Sync>("processMinecraftModResources") {
inputs.property("id", project.name) inputs.property("id", project.name)
inputs.property("version", project.version) inputs.property("version", project.version)
inputs.property("name", properties["module.name"]) inputs.property("name", properties["module.name"])
inputs.property("description", properties["module.description"]) inputs.property("description", properties["module.description"])
inputs.property("repoUrl", properties["git.url"]) inputs.property("repoUrl", properties["git.url"])
inputs.files(minecraftJijElements)
val jars = objects.fileCollection().apply { from(minecraftJijElements) }
from(project.layout.settingsDirectory.dir("../tweed5-minecraft/mod-template/resources")) { from(project.layout.settingsDirectory.dir("../tweed5-minecraft/mod-template/resources")) {
expand( expand(
@@ -29,6 +39,7 @@ tasks.register<Sync>("processMinecraftModResources") {
"name" to properties["module.name"], "name" to properties["module.name"],
"description" to properties["module.description"], "description" to properties["module.description"],
"repoUrl" to properties["git.url"], "repoUrl" to properties["git.url"],
"jars" to formatJarsForJson(jars)
) )
) )
} }
@@ -44,6 +55,9 @@ tasks.register<Sync>("processMinecraftTestmodResources") {
inputs.property("name", properties["module.name"]) inputs.property("name", properties["module.name"])
inputs.property("description", properties["module.description"]) inputs.property("description", properties["module.description"])
inputs.property("repoUrl", properties["git.url"]) inputs.property("repoUrl", properties["git.url"])
inputs.files(minecraftJijElements)
val jars = objects.fileCollection().apply { from(minecraftJijElements) }
from(project.layout.settingsDirectory.dir("../tweed5-minecraft/mod-template/resources")) { from(project.layout.settingsDirectory.dir("../tweed5-minecraft/mod-template/resources")) {
expand( expand(
@@ -53,6 +67,7 @@ tasks.register<Sync>("processMinecraftTestmodResources") {
"name" to "${properties["module.name"]} (test mod)", "name" to "${properties["module.name"]} (test mod)",
"description" to properties["module.description"], "description" to properties["module.description"],
"repoUrl" to properties["git.url"], "repoUrl" to properties["git.url"],
"jars" to formatJarsForJson(jars)
) )
) )
} }

View File

@@ -4,6 +4,11 @@ plugins {
id("de.siphalor.tweed5.minecraft.mod.base") id("de.siphalor.tweed5.minecraft.mod.base")
} }
configurations.minecraftModApiElements {
extendsFrom(configurations.implementation.get())
exclude("commons-logging", "commons-logging")
}
val minecraftModJar = tasks.register<Jar>("minecraftModJar") { val minecraftModJar = tasks.register<Jar>("minecraftModJar") {
group = LifecycleBasePlugin.BUILD_GROUP group = LifecycleBasePlugin.BUILD_GROUP
@@ -25,13 +30,10 @@ val minecraftModSourcesJar = tasks.register<Jar>("minecraftModSourcesJar") {
dependsOn(tasks.named("sourcesJar")) dependsOn(tasks.named("sourcesJar"))
dependsOn(tasks.named("processMinecraftModResources")) dependsOn(tasks.named("processMinecraftModResources"))
from(tasks.named<Jar>("sourcesJar").get().archiveFile.map { val sourcesJar = objects.fileCollection().from(tasks.named<Jar>("sourcesJar").map { it.archiveFile })
if (it.asFile.exists()) { inputs.files(sourcesJar)
zipTree(it)
} else { from(sourcesJar.map { zipTree(it) })
files()
}
})
from(project.layout.buildDirectory.dir("minecraftModResources")) from(project.layout.buildDirectory.dir("minecraftModResources"))
archiveClassifier = "sources" archiveClassifier = "sources"

View File

@@ -0,0 +1,46 @@
import de.siphalor.tweed5.gradle.plugin.minecraft.mod.MinecraftModded
plugins {
java
id("de.siphalor.tweed5.publishing")
id("de.siphalor.tweed5.minecraft.mod.base")
}
val minecraftJij = configurations.dependencyScope("minecraftJij")
val minecraftJijElements = configurations.named("minecraftJijElements") {
attributes {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
attribute(MinecraftModded.MINECRAFT_MODDED_ATTRIBUTE, objects.named(MinecraftModded.MODDED))
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL))
attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 8)
}
extendsFrom(minecraftJij.get())
}
configurations.runtimeElements {
extendsFrom(minecraftJijElements.get())
}
configurations.apiElements {
extendsFrom(minecraftJijElements.get())
}
tasks.named<Jar>("jar") {
dependsOn(tasks.named("processMinecraftModResources"))
dependsOn(minecraftJijElements)
from(project.layout.buildDirectory.dir("minecraftModResources"))
from(minecraftJijElements) {
into("META-INF/jars")
}
}
publishing {
publications {
create<MavenPublication>("main") {
artifactId = project.name
version = project.version.toString()
from(components["java"])
}
}
}

View File

@@ -2,6 +2,7 @@ package de.siphalor.tweed5.minecraft.bundled.sources
import org.gradle.api.file.ArchiveOperations import org.gradle.api.file.ArchiveOperations
import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.bundling.Jar import org.gradle.api.tasks.bundling.Jar
@@ -17,5 +18,7 @@ abstract class BundledSourcesJar: Jar() {
@TaskAction @TaskAction
override fun copy() { override fun copy() {
from(sources.filter { it.name.startsWith("tweed5") }.map { archiveOperations.zipTree(it) }) from(sources.filter { it.name.startsWith("tweed5") }.map { archiveOperations.zipTree(it) })
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
super.copy()
} }
} }

View File

@@ -0,0 +1,32 @@
import de.siphalor.tweed5.minecraft.bundled.sources.BundledSourcesJar
plugins {
id("de.siphalor.tweed5.minecraft.mod.bundle")
}
configurations.minecraftJijElements {
isTransitive = false
}
val bundledSourcesConfiguration = configurations.resolvable("bundledSources") {
extendsFrom(configurations.minecraftJijElements.get())
isTransitive = false
attributes {
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType.SOURCES))
}
}
dependencies {
minecraftJij("de.siphalor.tweed5:tweed5-annotation-inheritance")
minecraftJij("de.siphalor.tweed5:tweed5-naming-format")
minecraftJij("de.siphalor.tweed5:tweed5-type-utils")
minecraftJij("de.siphalor.tweed5:tweed5-weaver-pojo")
minecraftJij("de.siphalor.tweed5:tweed5-weaver-pojo-attributes-extension")
minecraftJij("de.siphalor.tweed5:tweed5-weaver-pojo-presets-extension")
minecraftJij("de.siphalor.tweed5:tweed5-weaver-pojo-serde-extension")
minecraftJij("de.siphalor.tweed5:tweed5-weaver-pojo-validation-extension")
}
tasks.register<BundledSourcesJar>("sourcesJar") {
sources.from(bundledSourcesConfiguration)
archiveClassifier.set("sources")
}

View File

@@ -0,0 +1,3 @@
module.name = Tweed 5 Bundle
module.description = Bundle of pre-packaged Tweed modules \
that are usually required for your Minecraft mod config needs.

View File

@@ -1,7 +1,7 @@
import de.siphalor.tweed5.minecraft.bundled.sources.BundledSourcesJar import de.siphalor.tweed5.minecraft.bundled.sources.BundledSourcesJar
plugins { plugins {
id("de.siphalor.tweed5.minecraft.mod.dummy") id("de.siphalor.tweed5.minecraft.mod.bundle")
} }
val bundledSourcesConfiguration = configurations.resolvable("bundledSources") { val bundledSourcesConfiguration = configurations.resolvable("bundledSources") {
@@ -12,51 +12,12 @@ val bundledSourcesConfiguration = configurations.resolvable("bundledSources") {
} }
} }
configurations.implementation {
exclude(group = "commons-logging", module = "commons-logging")
}
val vendoredCommonsLogging = project.layout.settingsDirectory.file("vendor/commons-logging").asFile
dependencies { dependencies {
implementation("de.siphalor.tweed5:tweed5-core") minecraftJij("de.siphalor.tweed5:tweed5-core")
implementation("de.siphalor.tweed5:tweed5-attributes-extension") minecraftJij("de.siphalor.tweed5:tweed5-attributes-extension")
implementation("de.siphalor.tweed5:tweed5-default-extensions") minecraftJij("de.siphalor.tweed5:tweed5-default-extensions")
implementation("de.siphalor.tweed5:tweed5-serde-extension") minecraftJij("de.siphalor.tweed5:tweed5-serde-extension")
implementation("de.siphalor.tweed5:tweed5-weaver-pojo") minecraftJij(project(":tweed5-logging"))
implementation("de.siphalor.tweed5:tweed5-weaver-pojo-attributes-extension")
implementation("de.siphalor.tweed5:tweed5-weaver-pojo-presets-extension")
implementation("de.siphalor.tweed5:tweed5-weaver-pojo-serde-extension")
implementation("de.siphalor.tweed5:tweed5-weaver-pojo-validation-extension")
implementation(
objects.fileCollection().apply {
from(
vendoredCommonsLogging.resolve("target")
.listFiles { it.name.endsWith("SNAPSHOT.jar") }
)
builtBy("compileCommonsLogging")
}
)
}
tasks.register<Exec>("compileCommonsLogging") {
inputs.file(vendoredCommonsLogging.resolve("pom.xml"))
inputs.dir(vendoredCommonsLogging.resolve("src"))
outputs.dir(vendoredCommonsLogging.resolve("target"))
commandLine("mvn", "package", "-DskipTests")
workingDir(vendoredCommonsLogging)
}
tasks.shadowJar {
relocate("org.objectweb.asm", "de.siphalor.tweed5.shadowed.org.objectweb.asm")
relocate("META-INF", "META-INF/tweed5-vendored/commons-logging") {
include("META-INF/*.txt")
}
exclude("META-INF/maven/**")
// Remove some obsolete classes
exclude("org/apache/commons/logging/impl/WeakHashtable*")
} }
tasks.register<BundledSourcesJar>("sourcesJar") { tasks.register<BundledSourcesJar>("sourcesJar") {

View File

@@ -13,7 +13,9 @@ dependencies {
listOf("fabric-key-binding-api-v1", "fabric-resource-loader-v0").forEach { listOf("fabric-key-binding-api-v1", "fabric-resource-loader-v0").forEach {
modTestmodImplementation(fabricApi.module(it, mcLibs.versions.fabric.api.get())) modTestmodImplementation(fabricApi.module(it, mcLibs.versions.fabric.api.get()))
} }
testmodImplementation(project(":tweed5-bundle", configuration = "minecraftModElements")) testmodImplementation(project(":tweed5-logging", configuration = "minecraftModApiElements"))
testmodImplementation(project(":tweed5-bundle", configuration = "runtimeElements"))
testmodImplementation(project(":tweed5-bundle-pojo-weaving", configuration = "runtimeElements"))
testmodImplementation(project(":tweed5-fabric-helper", configuration = "namedElements")) testmodImplementation(project(":tweed5-fabric-helper", configuration = "namedElements"))
modTestmodImplementation(mcLibs.coat) modTestmodImplementation(mcLibs.coat)
modTestmodImplementation(mcLibs.amecs.api) modTestmodImplementation(mcLibs.amecs.api)

View File

@@ -19,7 +19,7 @@ dependencies {
listOf("fabric-networking-api-v1", "fabric-lifecycle-events-v1").forEach { listOf("fabric-networking-api-v1", "fabric-lifecycle-events-v1").forEach {
modTestmodImplementation(fabricApi.module(it, mcLibs.versions.fabric.api.get())) modTestmodImplementation(fabricApi.module(it, mcLibs.versions.fabric.api.get()))
} }
testmodImplementation(project(":tweed5-bundle", configuration = "minecraftModElements")) testmodImplementation(project(":tweed5-bundle"))
testmodImplementation("de.siphalor.tweed5:tweed5-comment-loader-extension") testmodImplementation("de.siphalor.tweed5:tweed5-comment-loader-extension")
testmodImplementation("de.siphalor.tweed5:tweed5-serde-hjson") testmodImplementation("de.siphalor.tweed5:tweed5-serde-hjson")
testmodImplementation("de.siphalor.tweed5:tweed5-serde-gson") testmodImplementation("de.siphalor.tweed5:tweed5-serde-gson")

View File

@@ -0,0 +1,32 @@
plugins {
id("de.siphalor.tweed5.minecraft.mod.dummy")
}
val vendoredCommonsLogging = project.layout.settingsDirectory.file("vendor/commons-logging").asFile
dependencies {
shadowOnly(objects.fileCollection().apply {
from(
vendoredCommonsLogging.resolve("target")
.listFiles { it.name.endsWith("SNAPSHOT.jar") }
)
builtBy("compileCommonsLogging")
})
}
tasks.register<Exec>("compileCommonsLogging") {
inputs.file(vendoredCommonsLogging.resolve("pom.xml"))
inputs.dir(vendoredCommonsLogging.resolve("src"))
outputs.dir(vendoredCommonsLogging.resolve("target"))
commandLine("mvn", "package", "-DskipTests")
workingDir(vendoredCommonsLogging)
}
tasks.shadowJar {
relocate("META-INF", "META-INF/tweed5-vendored/commons-logging") {
include("META-INF/*.txt")
}
exclude("META-INF/maven/**")
// Remove some obsolete classes
exclude("org/apache/commons/logging/impl/WeakHashtable*")
}

View File

@@ -0,0 +1,4 @@
module.name = Tweed 5 Logging
module.description = Fork and relocation of Apache Commons Logging.\n\
Contains a small fix to support older Log4j versions. \
Also removes some obsolete classes.

View File

@@ -33,5 +33,6 @@
"authors": [ "authors": [
"Siphalor" "Siphalor"
], ],
"version": "${version}" "version": "${version}",
"jars": [${jars}]
} }

View File

@@ -52,8 +52,10 @@ dependencyResolutionManagement {
includeBuild("../tweed5") includeBuild("../tweed5")
includeNormalModule("bundle") includeNormalModule("bundle")
includeNormalModule("bundle-pojo-weaving")
includeNormalModule("coat-bridge") includeNormalModule("coat-bridge")
includeNormalModule("fabric-helper") includeNormalModule("fabric-helper")
includeNormalModule("logging")
fun includeNormalModule(name: String) { fun includeNormalModule(name: String) {
includeAs("tweed5-$name", name) includeAs("tweed5-$name", name)

View File

@@ -1,9 +1,19 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
}
configurations.minecraftModApiElements {
exclude("org.ow2.asm", "asm")
} }
dependencies { dependencies {
implementation(project(":tweed5-utils")) implementation(project(":tweed5-utils"))
implementation(project(":tweed5-type-utils")) implementation(project(":tweed5-type-utils"))
implementation(libs.asm.core) implementation(libs.asm.core)
shadowOnly(libs.asm.core)
}
tasks.shadowJar {
relocate("org.objectweb.asm", "de.siphalor.tweed5.annotationinheritance.shadowed.org.objectweb.asm")
} }

View File

@@ -1,5 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }
dependencies { dependencies {

View File

@@ -1,7 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy") id("de.siphalor.tweed5.minecraft.mod.dummy")
id("de.siphalor.tweed5.shadow.explicit")
} }
dependencies { dependencies {

View File

@@ -1,3 +1,4 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }

View File

@@ -1,5 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }
dependencies { dependencies {

View File

@@ -1,5 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }
dependencies { dependencies {

View File

@@ -1,3 +1,4 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }

View File

@@ -1,3 +1,4 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }

View File

@@ -1,3 +1,4 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }

View File

@@ -1,5 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }
dependencies { dependencies {

View File

@@ -1,7 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy") id("de.siphalor.tweed5.minecraft.mod.dummy")
id("de.siphalor.tweed5.shadow.explicit")
} }
dependencies { dependencies {

View File

@@ -8,7 +8,3 @@ dependencies {
testImplementation(project(":serde-json-test-utils")) testImplementation(project(":serde-json-test-utils"))
} }
tasks.shadowJar {
configurations = setOf()
}

View File

@@ -1,7 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy") id("de.siphalor.tweed5.minecraft.mod.dummy")
id("de.siphalor.tweed5.shadow.explicit")
} }
dependencies { dependencies {

View File

@@ -1,3 +1,4 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }

View File

@@ -1,3 +1,4 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }

View File

@@ -1,5 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }
dependencies { dependencies {

View File

@@ -1,5 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }
dependencies { dependencies {

View File

@@ -1,5 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }
dependencies { dependencies {

View File

@@ -1,5 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }
dependencies { dependencies {

View File

@@ -1,5 +1,6 @@
plugins { plugins {
id("de.siphalor.tweed5.base-module") id("de.siphalor.tweed5.base-module")
id("de.siphalor.tweed5.minecraft.mod.dummy")
} }
dependencies { dependencies {