From 98ec7b09eec00e57632a92a0f9245dc755d386ae Mon Sep 17 00:00:00 2001 From: Roman / Linnea Gräf Date: Thu, 6 Oct 2022 23:51:17 +0200 Subject: Skyblock addons expect=0, and modlist config button (#337) * Skyblock addons expect=0 Synonyms for essential: crucial, main, fundamental, imperative, important, indispensable, vital, necessary, needed, vital, cardinal, principal, required, necessitous (oh wow that one sounds like incestous) * Make modlist config button work * Clean up buildscript * Add version to mock mod manifests as well Courtesy-off: MultiMC * Jitpack metadata --- build.gradle.kts | 85 ++++++++-------------- buildSrc/build.gradle.kts | 26 +++++++ buildSrc/src/main/kotlin/neubs/buildflags.kt | 56 ++++++++++++++ buildSrc/src/main/kotlin/neubs/publishing.kt | 62 ++++++++++++++++ buildSrc/src/main/kotlin/neubs/versioning.kt | 54 ++++++++++++++ jitpack.yml | 4 + .../notenoughupdates/NotEnoughUpdates.java | 4 +- .../core/config/MoulConfigGuiForgeInterop.java | 69 ++++++++++++++++++ src/main/resources/META-INF/mods.toml | 2 +- src/main/resources/fabric.mod.json | 2 +- 10 files changed, 307 insertions(+), 57 deletions(-) create mode 100644 buildSrc/build.gradle.kts create mode 100644 buildSrc/src/main/kotlin/neubs/buildflags.kt create mode 100644 buildSrc/src/main/kotlin/neubs/publishing.kt create mode 100644 buildSrc/src/main/kotlin/neubs/versioning.kt create mode 100644 jitpack.yml create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/core/config/MoulConfigGuiForgeInterop.java diff --git a/build.gradle.kts b/build.gradle.kts index 409a8d51..deb740f5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,12 +18,9 @@ */ -import net.fabricmc.loom.task.RemapJarTask -import java.io.ByteArrayOutputStream -import java.nio.file.FileSystems -import java.nio.file.Files -import java.nio.charset.StandardCharsets -import java.util.* +import neubs.NEUBuildFlags +import neubs.applyPublishingInformation +import neubs.setVersionFromEnvironment plugins { idea @@ -31,42 +28,18 @@ plugins { id("gg.essential.loom") version "0.10.0.+" id("dev.architectury.architectury-pack200") version "0.1.3" id("com.github.johnrengelman.shadow") version "7.1.2" + id("io.github.juuxel.loom-quiltflower") version "1.7.3" + `maven-publish` } +apply() + // Build metadata group = "io.github.moulberry" -val baseVersion = "2.1" - - -val buildExtra = mutableListOf() -val buildVersion = properties["BUILD_VERSION"] as? String -if (buildVersion != null) buildExtra.add(buildVersion) -if (properties["CI"] as? String == "true") buildExtra.add("ci") - -val stdout = ByteArrayOutputStream() -val execResult = exec { - commandLine("git", "describe", "--always", "--first-parent", "--abbrev=7") - standardOutput = stdout - isIgnoreExitValue = true -} -if (execResult.exitValue == 0) { - buildExtra.add(String(stdout.toByteArray()).trim()) -} - -val gitDiffStdout = ByteArrayOutputStream() -val gitDiffResult = exec { - commandLine("git", "status", "--porcelain") - standardOutput = gitDiffStdout - isIgnoreExitValue = true -} -if (gitDiffStdout.toByteArray().isNotEmpty()) { - buildExtra.add("dirty") -} - -version = baseVersion + (if (buildExtra.isEmpty()) "" else buildExtra.joinToString(prefix = "+", separator = ".")) +setVersionFromEnvironment("2.1") // Minecraft configuration: loom { @@ -106,6 +79,17 @@ val shadowImplementation by configurations.creating { configurations.implementation.get().extendsFrom(this) } +val shadowApi by configurations.creating { + configurations.implementation.get().extendsFrom(this) +} + +val devEnv by configurations.creating { + configurations.runtimeClasspath.get().extendsFrom(this) + isCanBeResolved = false + isCanBeConsumed = false + isVisible = false +} + dependencies { minecraft("com.mojang:minecraft:1.8.9") mappings("de.oceanlabs.mcp:mcp_stable:22-1.8.9") @@ -115,17 +99,18 @@ dependencies { isTransitive = false // Dependencies of mixin are already bundled by minecraft } annotationProcessor("org.spongepowered:mixin:0.8.4-SNAPSHOT") - shadowImplementation("info.bliki.wiki:bliki-core:3.1.0") + shadowApi("info.bliki.wiki:bliki-core:3.1.0") testImplementation("org.junit.jupiter:junit-jupiter:5.8.2") testAnnotationProcessor("org.spongepowered:mixin:0.8.4-SNAPSHOT") // modImplementation("io.github.notenoughupdates:MoulConfig:0.0.1") - modRuntimeOnly("me.djtheredstoner:DevAuth-forge-legacy:1.1.0") + devEnv("me.djtheredstoner:DevAuth-forge-legacy:1.1.0") } java { + withSourcesJar() toolchain.languageVersion.set(JavaLanguageVersion.of(8)) } @@ -162,7 +147,7 @@ val remapJar by tasks.named("remapJar") { tasks.shadowJar { archiveClassifier.set("dep-dev") - configurations = listOf(shadowImplementation) + configurations = listOf(shadowImplementation, shadowApi) exclude("**/module-info.class", "LICENSE.txt") dependencies { exclude { @@ -175,23 +160,9 @@ tasks.shadowJar { tasks.assemble.get().dependsOn(remapJar) -val generateBuildFlags by tasks.creating { - outputs.upToDateWhen { false } - val t = layout.buildDirectory.file("buildflags.properties") - outputs.file(t) - val props = project.properties.filter { (name, value) -> name.startsWith("neu.buildflags.") } - doLast { - val p = Properties() - p.putAll(props) - t.get().asFile.writer(StandardCharsets.UTF_8).use { - p.store(it, "Store build time configuration for NEU") - } - } -} - tasks.processResources { - from(generateBuildFlags) - filesMatching("mcmod.info") { + from(tasks["generateBuildFlags"]) + filesMatching(listOf("mcmod.info", "fabric.mod.json", "META-INF/mods.toml")) { expand( "version" to project.version, "mcversion" to "1.8.9" ) @@ -201,3 +172,9 @@ tasks.processResources { sourceSets.main { output.setResourcesDir(file("$buildDir/classes/java/main")) } + +applyPublishingInformation( + "deobf" to tasks.jar, + "all" to tasks.remapJar, + "sources" to tasks["sourcesJar"], +) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 00000000..5afecadc --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +plugins { + `kotlin-dsl` +} + +repositories { + mavenCentral() +} diff --git a/buildSrc/src/main/kotlin/neubs/buildflags.kt b/buildSrc/src/main/kotlin/neubs/buildflags.kt new file mode 100644 index 00000000..6b7ab489 --- /dev/null +++ b/buildSrc/src/main/kotlin/neubs/buildflags.kt @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package neubs + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.the +import java.nio.charset.StandardCharsets +import java.util.* + +const val NEU_BUILDFLAGS_PREFIX = "neu.buildflags." + +class NEUBuildFlags : Plugin { + override fun apply(target: Project) { + val props = + target.properties.filterKeys { it.startsWith(NEU_BUILDFLAGS_PREFIX) }.mapValues { it.value as String } + target.extensions.add("buildflags", Extension(props)) + target.tasks.create("generateBuildFlags") { + outputs.upToDateWhen { false } + val t = target.layout.buildDirectory.file("buildflags.properties") + outputs.file(t) + doLast { + val p = Properties() + p.putAll(props) + t.get().asFile.writer(StandardCharsets.UTF_8).use { + p.store(it, "Store build time configuration for NEU") + } + } + + } + } + + class Extension(val props: Map) { + fun bool(name: String) = props["$NEU_BUILDFLAGS_PREFIX$name"] == "true" + } +} + +val Project.buildFlags: NEUBuildFlags.Extension + get() = the() diff --git a/buildSrc/src/main/kotlin/neubs/publishing.kt b/buildSrc/src/main/kotlin/neubs/publishing.kt new file mode 100644 index 00000000..4f9979a1 --- /dev/null +++ b/buildSrc/src/main/kotlin/neubs/publishing.kt @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package neubs + +import org.gradle.api.Project +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.get + +fun Project.applyPublishingInformation( + vararg artifacts: Pair +) { + this.configure { + publications { + create("maven") { + for((name, source) in artifacts) { + artifact(source) { + classifier = name + } + } + pom { + name.set("NotEnoughUpdates") + description.set("A feature rich 1.8.9 Minecraft forge mod for Hypixel Skyblock") + licenses { + license { + name.set("GNU Lesser General Public License") + url.set("https://github.com/NotEnoughUpdates/NotEnoughUpdates/blob/master/COPYING.LESSER") + } + } + developers { + developer { + name.set("Moulberry") + } + developer { + name.set("The NotEnoughUpdates Contributors and Maintainers") + } + } + } + } + } + } + +} diff --git a/buildSrc/src/main/kotlin/neubs/versioning.kt b/buildSrc/src/main/kotlin/neubs/versioning.kt new file mode 100644 index 00000000..254e0012 --- /dev/null +++ b/buildSrc/src/main/kotlin/neubs/versioning.kt @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package neubs + +import org.gradle.api.Project +import java.io.ByteArrayOutputStream + +fun Project.setVersionFromEnvironment(baseVersion: String) { + val buildExtra = mutableListOf() + val buildVersion = properties["BUILD_VERSION"] as? String + if (buildVersion != null) buildExtra.add(buildVersion) + if (System.getenv("CI") == "true") buildExtra.add("ci") + + val stdout = ByteArrayOutputStream() + val execResult = exec { + commandLine("git", "describe", "--always", "--first-parent", "--abbrev=7") + standardOutput = stdout + isIgnoreExitValue = true + } + if (execResult.exitValue == 0) { + buildExtra.add(String(stdout.toByteArray()).trim()) + } + + val gitDiffStdout = ByteArrayOutputStream() + val gitDiffResult = exec { + commandLine("git", "status", "--porcelain") + standardOutput = gitDiffStdout + isIgnoreExitValue = true + } + if (gitDiffStdout.toByteArray().isNotEmpty()) { + buildExtra.add("dirty") + } + + version = baseVersion + (if (buildExtra.isEmpty()) "" else buildExtra.joinToString(prefix = "+", separator = ".")) + +} + diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 00000000..6166e3d7 --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,4 @@ +jdk: + - openjdk17 +env: + CI: true diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java index 7175c7e8..09c910e9 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java @@ -117,7 +117,9 @@ import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Set; -@Mod(modid = NotEnoughUpdates.MODID, version = NotEnoughUpdates.VERSION, clientSideOnly = true) +@Mod( + modid = NotEnoughUpdates.MODID, version = NotEnoughUpdates.VERSION, clientSideOnly = true, useMetadata = true, + guiFactory = "io.github.moulberry.notenoughupdates.core.config.MoulConfigGuiForgeInterop") public class NotEnoughUpdates { public static final String MODID = "notenoughupdates"; public static final String VERSION = "2.1.0-REL"; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/MoulConfigGuiForgeInterop.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/MoulConfigGuiForgeInterop.java new file mode 100644 index 00000000..40887e54 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/MoulConfigGuiForgeInterop.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package io.github.moulberry.notenoughupdates.core.config; + +import io.github.moulberry.notenoughupdates.core.GuiScreenElementWrapper; +import io.github.moulberry.notenoughupdates.options.NEUConfigEditor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.fml.client.IModGuiFactory; +import org.lwjgl.input.Keyboard; + +import java.io.IOException; +import java.util.Set; + +public class MoulConfigGuiForgeInterop implements IModGuiFactory { + @Override + public void initialize(Minecraft minecraft) {} + + @Override + public Class mainConfigGuiClass() { + return WrappedMoulConfig.class; + } + + @Override + public Set runtimeGuiCategories() { + return null; + } + + @Override + public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement runtimeOptionCategoryElement) { + return null; + } + + public static class WrappedMoulConfig extends GuiScreenElementWrapper { + + private final GuiScreen parent; + + public WrappedMoulConfig(GuiScreen parent) { + super(NEUConfigEditor.editor); + this.parent = parent; + } + + @Override + public void handleKeyboardInput() throws IOException { + if (Keyboard.getEventKeyState() && Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { + Minecraft.getMinecraft().displayGuiScreen(parent); + return; + } + super.handleKeyboardInput(); + } + } +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 281faf65..412917d1 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -5,7 +5,7 @@ license = "LGPL" [[mods]] modId="notenoughupdateserrordisplay" -version="99.99" +version="${version}" displayName="NotEnoughUpdates (1.8.9)" description=''' This mod description is only here to warn you about using the wrong version of Minecraft and Forge. diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 8dd63bf3..0123ad91 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,6 +1,6 @@ { "id": "notenoughupdates", - "version": "9999.0", + "version": "${version}", "schemaVersion": 1, "entrypoints": { "main": [ -- cgit