From 5ff9ed0bc9021ff76dd5a621a6b26b8d027deb95 Mon Sep 17 00:00:00 2001 From: Roman Makeev Date: Sat, 2 Dec 2023 20:31:14 +0300 Subject: [PATCH] add minecraft kmp plugin --- README.md | 19 +++++++++++++++ .../MinecraftMultiplatformScope.kt | 23 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/README.md b/README.md index 9b88918..52de9b6 100644 --- a/README.md +++ b/README.md @@ -343,6 +343,25 @@ Don't forget gradle modules could sync in different order. So in some cases you evaluationDependsOn(":modules:my-shared-module") ``` +Also can be configured with KotlinMultiplatform(Experimental) +```kotlin +kotlin { + jvm { + withJava() + } + minecraftMultiplatform { + bukkitTarget() + velocityTarget() + } + sourceSets { + val bukkitMain by getting { + ... + } + } +} + +``` + ## Gratitude Thanks for moko gradle plugins and arkivanov for inspiration diff --git a/build-logic/plugins/minecraft/src/main/kotlin/ru/astrainteractive/gradleplugin/multiplatform/MinecraftMultiplatformScope.kt b/build-logic/plugins/minecraft/src/main/kotlin/ru/astrainteractive/gradleplugin/multiplatform/MinecraftMultiplatformScope.kt index af47419..c6ac6b6 100644 --- a/build-logic/plugins/minecraft/src/main/kotlin/ru/astrainteractive/gradleplugin/multiplatform/MinecraftMultiplatformScope.kt +++ b/build-logic/plugins/minecraft/src/main/kotlin/ru/astrainteractive/gradleplugin/multiplatform/MinecraftMultiplatformScope.kt @@ -2,7 +2,9 @@ package ru.astrainteractive.gradleplugin.multiplatform import org.gradle.api.Project import org.gradle.api.artifacts.ProjectDependency +import org.gradle.api.attributes.Attribute import org.gradle.api.tasks.SourceSetOutput +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import ru.astrainteractive.gradleplugin.multiplatform.sourceset.JvmSourceSet open class MinecraftMultiplatformScope(private val project: Project) { @@ -92,4 +94,25 @@ open class MinecraftMultiplatformScope(private val project: Project) { */ val ProjectDependency.fabricMain: SourceSetOutput get() = this.sourceSet("fabricMain") + + @ExperimentalMultiplatform + fun KotlinMultiplatformExtension.bukkitTarget() { + createMinecraftTarget("bukkit") + } + + @ExperimentalMultiplatform + fun KotlinMultiplatformExtension.velocityTarget() { + createMinecraftTarget("velocity") + } + + @ExperimentalMultiplatform + fun KotlinMultiplatformExtension.createMinecraftTarget(target: String) { + val minecraftFrameworkAttribute = Attribute.of("MinecraftAttribute", String::class.java) + jvm(target) { + attributes.attribute(minecraftFrameworkAttribute, target) + } + val jvmMain = sourceSets.getByName("jvmMain") + val targetMain = sourceSets.getByName("${target}Main") + targetMain.dependsOn(jvmMain) + } }