repo for my hex addons :3
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

crossover of a century

subtle foreshadowing? /hj

+342 -6
+1 -1
build.gradle.kts
··· 27 27 id("maven-publish") 28 28 id("idea") 29 29 id("de.undercouch.download") version "5.6.0" 30 - id("org.eu.net.pool.mc-plugin") version "0.1.1" 30 + id("org.eu.net.pool.mc-plugin") 31 31 } 32 32 33 33 allprojects {
+38
plugin/build.gradle.kts
··· 1 + import org.jetbrains.kotlin.gradle.tasks.KotlinCompile 2 + 3 + /* 4 + * This file was generated by the Gradle 'init' task. 5 + * 6 + * This generated file contains a sample Gradle plugin project to get you started. 7 + * For more details on writing Custom Plugins, please refer to https://docs.gradle.org/8.14/userguide/custom_plugins.html in the Gradle documentation. 8 + * This project uses @Incubating APIs which are subject to change. 9 + */ 10 + 11 + plugins { 12 + `java-gradle-plugin` 13 + `kotlin-dsl` 14 + kotlin("jvm") version "2.0.21" 15 + id("com.gradle.plugin-publish") version "1.2.1" 16 + } 17 + 18 + repositories { 19 + mavenCentral() 20 + gradlePluginPortal() 21 + } 22 + 23 + dependencies { 24 + implementation("com.google.code.gson:gson:2.13.1") 25 + } 26 + 27 + tasks.withType<KotlinCompile> { 28 + compilerOptions.freeCompilerArgs.add("-Xcontext-receivers") 29 + } 30 + 31 + group = "org.eu.net.pool" 32 + version = "0.1.1" 33 + gradlePlugin { 34 + val plugin by plugins.creating { 35 + id = "org.eu.net.pool.mc-plugin" 36 + implementationClass = "org.eu.net.pool.mc_plugin.Plugin" 37 + } 38 + }
plugin/settings.gradle.kts

This is a binary file and will not be displayed.

+111
plugin/src/main/kotlin/org/eu/net/pool/mc_plugin/FabricModBuilder.kt
··· 1 + package org.eu.net.pool.mc_plugin 2 + 3 + import com.google.gson.JsonArray 4 + import com.google.gson.JsonObject 5 + import org.gradle.api.Project 6 + import org.gradle.api.tasks.AbstractCopyTask 7 + import java.util.function.Consumer 8 + import java.util.function.Supplier 9 + 10 + class FabricMod(val id: String, val version: String): Consumer<JsonDsl.Object> { 11 + var name = id 12 + var description = "" 13 + var license = "GPL-3.0" 14 + var icon = "assets.mica/icon.png" 15 + var environment: Environment? = null 16 + @PublishedApi internal val authors = JsonDsl.Array() 17 + @PublishedApi internal val contributors = JsonDsl.Array() 18 + @PublishedApi internal val entrypoints = JsonDsl.Object() 19 + @PublishedApi internal val mixins = JsonDsl.Array() 20 + @PublishedApi internal val contact = JsonDsl.Object() 21 + @PublishedApi internal val custom = JsonDsl.Object() 22 + @PublishedApi internal val depends = JsonDsl.Object() 23 + @PublishedApi internal val recommends = JsonDsl.Object() 24 + @PublishedApi internal val suggests = JsonDsl.Object() 25 + @PublishedApi internal val conflicts = JsonDsl.Object() 26 + @PublishedApi internal val breaks = JsonDsl.Object() 27 + fun entrypoint(key: String, path: String) { 28 + entrypoints.array(key) { 29 + put(path) 30 + } 31 + } 32 + fun entrypoint(path: String) = entrypoint("main", path) 33 + fun entrypoint(path: String, environment: Environment) = entrypoint(environment.id, path) 34 + fun mixins(path: String) { 35 + mixins.put(path) 36 + } 37 + fun mixins(path: String, environment: Environment) { 38 + mixins.map { 39 + put("config", path) 40 + put("environment", environment.id) 41 + } 42 + } 43 + inline fun contact(action: JsonDsl.Object.() -> Unit) = contact.run(action) 44 + inline fun contact(name: String, url: String) = contact { put(name, url) } 45 + inline fun custom(action: JsonDsl.Object.() -> Unit) = custom.run(action) 46 + fun author(name: String) { 47 + authors.put(name) 48 + } 49 + inline fun author(name: String, contact: JsonDsl.Object.() -> Unit) { 50 + authors.map { 51 + put("name", name) 52 + map("contact") { 53 + contact() 54 + } 55 + } 56 + } 57 + fun contributor(name: String) { 58 + contributors.put(name) 59 + } 60 + inline fun contributor(name: String, role: String? = "", contact: JsonDsl.Object.() -> Unit = {}) { 61 + contributors.map { 62 + put("name", name) 63 + if (role != null) put("role", role) 64 + map("contact") { 65 + contact() 66 + } 67 + } 68 + } 69 + fun depends(mod: String, version: String = "*") { 70 + depends.put(mod, version) 71 + } 72 + fun recommends(mod: String, version: String = "*") { 73 + recommends.put(mod, version) 74 + } 75 + fun suggests(mod: String, version: String = "*") { 76 + suggests.put(mod, version) 77 + } 78 + fun conflicts(mod: String, version: String = "*") { 79 + conflicts.put(mod, version) 80 + } 81 + fun breaks(mod: String, version: String = "*") { 82 + breaks.put(mod, version) 83 + } 84 + 85 + fun JsonDsl.Object.merge() { 86 + put("schemaVersion", 1) 87 + put("id", id) 88 + put("version", version) 89 + put("name", name) 90 + put("description", description) 91 + environment?.let { put("environment", it.id) } 92 + put("authors", authors) 93 + put("contributors", contributors) 94 + put("entrypoints", entrypoints) 95 + put("mixins", mixins) 96 + put("custom", custom) 97 + put("depends", depends) 98 + put("recommends", recommends) 99 + put("suggests", suggests) 100 + put("conflicts", conflicts) 101 + put("breaks", breaks) 102 + } 103 + 104 + override fun accept(t: JsonDsl.Object) = t.merge() 105 + override fun toString(): String = JsonDsl.Object().run { merge(); toString() } 106 + } 107 + 108 + enum class Environment(val id: String) { 109 + Server("server"), 110 + Client("client"), 111 + }
+76
plugin/src/main/kotlin/org/eu/net/pool/mc_plugin/JsonDsl.kt
··· 1 + package org.eu.net.pool.mc_plugin 2 + 3 + import com.google.gson.Gson 4 + import com.google.gson.JsonArray 5 + import com.google.gson.JsonElement 6 + import com.google.gson.JsonObject 7 + 8 + internal val gson = Gson() 9 + 10 + @DslMarker 11 + annotation class JsonDsl { 12 + sealed interface Element { 13 + val element: JsonElement 14 + } 15 + @JsonDsl 16 + class Object(override val element: JsonObject = JsonObject()): Element { 17 + internal fun check(key: String) { 18 + if (element.has(key)) 19 + throw IllegalArgumentException("Duplicate key $key") 20 + } 21 + fun put(key: String, value: String) { 22 + check(key) 23 + element.addProperty(key, value) 24 + } 25 + fun put(key: String, value: Number) { 26 + check(key) 27 + element.addProperty(key, value) 28 + } 29 + fun put(key: String, value: Boolean) { 30 + check(key) 31 + element.addProperty(key, value) 32 + } 33 + fun put(key: String, value: JsonElement) { 34 + check(key) 35 + element.add(key, value) 36 + } 37 + fun put(key: String, value: Element) { 38 + check(key) 39 + element.add(key, value.element) 40 + } 41 + inline fun array(key: String, action: Array.() -> Unit) { 42 + element.add(key, (element.get(key)?.asJsonArray ?: JsonArray()).also { Array(it).action() }) 43 + } 44 + inline fun map(key: String, action: Object.() -> Unit) { 45 + element.add(key, (element.get(key)?.asJsonObject ?: JsonObject()).also { Object(it).action() }) 46 + } 47 + 48 + override fun toString(): String = gson.toJson(element) 49 + } 50 + @JsonDsl 51 + class Array(override val element: JsonArray = JsonArray()): Element { 52 + fun put(value: String) { 53 + element.add(value) 54 + } 55 + fun put(value: Number) { 56 + element.add(value) 57 + } 58 + fun put(value: Boolean) { 59 + element.add(value) 60 + } 61 + fun put(value: JsonElement) { 62 + element.add(value) 63 + } 64 + fun put(value: Element) { 65 + element.add(value.element) 66 + } 67 + inline fun array(action: Array.() -> Unit) { 68 + element.add(JsonArray().also { Array(it).action() }) 69 + } 70 + inline fun map(action: Object.() -> Unit) { 71 + element.add(JsonObject().also { Object(it).action() }) 72 + } 73 + 74 + override fun toString(): String = gson.toJson(element) 75 + } 76 + }
+110
plugin/src/main/kotlin/org/eu/net/pool/mc_plugin/Plugin.kt
··· 1 + /* 2 + * This source file was generated by the Gradle 'init' task 3 + */ 4 + package org.eu.net.pool.mc_plugin 5 + 6 + import org.gradle.api.DefaultTask 7 + import org.gradle.api.Project 8 + import org.gradle.api.Plugin 9 + import org.gradle.api.Task 10 + import org.gradle.api.file.Directory 11 + import org.gradle.api.file.RegularFile 12 + import org.gradle.api.provider.ListProperty 13 + import org.gradle.api.provider.MapProperty 14 + import org.gradle.api.provider.Property 15 + import org.gradle.api.provider.Provider 16 + import org.gradle.api.tasks.AbstractCopyTask 17 + import org.gradle.api.tasks.Exec 18 + import org.gradle.api.tasks.Input 19 + import org.gradle.api.tasks.InputFiles 20 + import org.gradle.api.tasks.OutputFile 21 + import org.gradle.api.tasks.SourceSet 22 + import org.gradle.api.tasks.TaskAction 23 + import org.gradle.kotlin.dsl.get 24 + import org.gradle.language.jvm.tasks.ProcessResources 25 + import java.io.File 26 + 27 + typealias PT = context(Project) SourceSet.(String, Pair<String, Task>.(Provider<Directory>) -> Unit) -> Unit 28 + 29 + val m4path = System.getenv("PATH").split(':').onEach { println(it) }.first { File("$it/m4").exists() } + "/m4" 30 + 31 + class Plugin: Plugin<Project> { 32 + override fun apply(project: Project) { 33 + val minecraft_version: String by project.properties 34 + val serialVersion = minecraft_version.let { 35 + val (maj, min, pat) = it.toString().split('.') + ".0" 36 + min.toInt() * 100 + pat.toInt() 37 + } 38 + project.buildDir = project.file("build$serialVersion") 39 + project.extensions.add("minecraft_version", minecraft_version) 40 + project.extensions.add("serialVersion", serialVersion) 41 + project.extensions.add("preprocessor", PreprocessorExtension(project, minecraft_version, serialVersion)) 42 + } 43 + } 44 + 45 + class PreprocessorExtension(val project: Project, val minecraft_version: String, val serialVersion: Int) { 46 + val freezeMacrosTask = project.tasks.register<FrozenFile>("freezeMacros", FrozenFile::class.java) { 47 + macroFiles.add(project.layout.projectDirectory.file("macros.m4")) 48 + frozenFile.set(project.layout.buildDirectory.file("macros.m4f")) 49 + globals.put("minecraft_version", serialVersion.toString()) 50 + }.get() 51 + inline fun <reified T: Task> SourceSet.processTask(lang: String) { 52 + val inDir = project.layout.projectDirectory.dir("src/$name/$lang") 53 + val outDir = project.layout.buildDirectory.dir(getTaskName("generated", lang)) 54 + val frozen = project.layout.buildDirectory.file("macros.m4f") 55 + val task = project.tasks.register(getTaskName("process", lang)) { 56 + inputs.dir(inDir).optional() 57 + inputs.file(frozen) 58 + dependsOn(project.tasks.named("freezeMacros")) 59 + outputs.dir(outDir) 60 + onlyIf { project.file(inDir).exists() } 61 + doLast { 62 + project.fileTree(inDir).files.forEach { 63 + project.file("${outDir.get()}/${it.relativeTo(inDir.asFile)}").parentFile.mkdirs() 64 + project.exec { 65 + commandLine(m4path, "-R", frozen.get().asFile.path, it.path) 66 + standardOutput = project.file("${outDir.get()}/${it.relativeTo(inDir.asFile)}").outputStream() 67 + } 68 + } 69 + } 70 + }.get() 71 + project.tasks.named<T>(getCompileTaskName(lang), T::class.java) { 72 + inputs.property("minecraft_version", project.extensions["serialVersion"]) 73 + dependsOn(task) 74 + doFirst { 75 + try { 76 + T::class.java.getMethod("setSource", Object::class.java).invoke(this@named, outDir) 77 + } catch (e: NoSuchMethodException) { 78 + T::class.java.getMethod("setSource", Array<Object>::class.java).invoke(this@named, arrayOf(outDir)) 79 + } 80 + } 81 + } 82 + } 83 + 84 + fun AbstractCopyTask.fabricMod(id: String, version: String, action: FabricMod.() -> Unit) { 85 + val mod = FabricMod(id, version) 86 + mod.action() 87 + from(project.resources.text.fromString(mod.toString())) { rename { "fabric.mod.json" } } 88 + } 89 + } 90 + 91 + abstract class FrozenFile: DefaultTask() { 92 + @get:InputFiles val macroFiles: ListProperty<RegularFile> = project.objects.listProperty(RegularFile::class.java) 93 + @get:OutputFile val frozenFile: Property<RegularFile> = project.objects.fileProperty() 94 + @get:Input val globals: MapProperty<String, String> = project.objects.mapProperty(String::class.java, String::class.java) 95 + init { 96 + inputs.files(macroFiles) 97 + inputs.property("globals", globals) 98 + outputs.file(frozenFile) 99 + } 100 + @TaskAction 101 + fun run() { 102 + project.exec { 103 + val args = mutableListOf(m4path, "-F", frozenFile.get().asFile.path) 104 + globals.get().forEach { k, v -> args.add("-D$k=$v") } 105 + macroFiles.get().forEach { args.add(it.asFile.path) } 106 + commandLine = args 107 + } 108 + } 109 + } 110 +
+1 -1
project/hexic/build.gradle.kts
··· 16 16 kotlin("jvm") version "2.2.0" 17 17 id("maven-publish") 18 18 id("de.undercouch.download") version "5.6.0" 19 - id("org.eu.net.pool.mc-plugin") version "0.1.1" 19 + id("org.eu.net.pool.mc-plugin") 20 20 } 21 21 22 22 val p: P by ext
+1 -1
project/hexxychests/build.gradle.kts
··· 4 4 kotlin("jvm") version "2.2.0" 5 5 id("maven-publish") 6 6 id("de.undercouch.download") version "5.6.0" 7 - id("org.eu.net.pool.mc-plugin") version "0.1.1" 7 + id("org.eu.net.pool.mc-plugin") 8 8 } 9 9 10 10 dependencies {
+1 -1
project/hexxytounge/build.gradle.kts
··· 4 4 kotlin("jvm") version "2.2.0" 5 5 id("maven-publish") 6 6 id("de.undercouch.download") version "5.6.0" 7 - id("org.eu.net.pool.mc-plugin") version "0.1.1" 7 + id("org.eu.net.pool.mc-plugin") 8 8 } 9 9 10 10 dependencies {
+1 -1
project/iotaworks/build.gradle.kts
··· 4 4 kotlin("jvm") version "2.2.0" 5 5 id("maven-publish") 6 6 id("de.undercouch.download") version "5.6.0" 7 - id("org.eu.net.pool.mc-plugin") version "0.1.1" 7 + id("org.eu.net.pool.mc-plugin") 8 8 } 9 9 10 10 dependencies {
+1
settings.gradle.kts
··· 19 19 } 20 20 21 21 include("util") 22 + includeBuild("plugin") 22 23 for (mod in listOf("hexic", "iotaworks", "hexxytounge", "hexxychests")) { 23 24 include(mod) 24 25 project(":$mod").projectDir = file("project/$mod")
+1 -1
util/build.gradle.kts
··· 4 4 kotlin("jvm") version "2.2.0" 5 5 id("maven-publish") 6 6 id("de.undercouch.download") version "5.6.0" 7 - id("org.eu.net.pool.mc-plugin") version "0.1.1" 7 + id("org.eu.net.pool.mc-plugin") 8 8 } 9 9 10 10 dependencies {