aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-10-30 16:35:19 +0100
committerLinnea Gräf <nea@nea.moe>2024-10-30 16:35:19 +0100
commitc9c25b61560e6fb4e1ba2dfb1d5cc61b0ec9ddab (patch)
treefa13364bf64a70e93969992069e12865fb24ca09 /src/main/kotlin
parentc38dcee2c5f483ef5990ae9204355e1bc3c2bf74 (diff)
downloadFirmament-c9c25b61560e6fb4e1ba2dfb1d5cc61b0ec9ddab.tar.gz
Firmament-c9c25b61560e6fb4e1ba2dfb1d5cc61b0ec9ddab.tar.bz2
Firmament-c9c25b61560e6fb4e1ba2dfb1d5cc61b0ec9ddab.zip
Add warning for missing REI
Diffstat (limited to 'src/main/kotlin')
-rw-r--r--src/main/kotlin/features/inventory/REIDependencyWarner.kt83
-rw-r--r--src/main/kotlin/repo/RepoManager.kt2
-rw-r--r--src/main/kotlin/util/render/DrawContextExt.kt1
-rw-r--r--src/main/kotlin/util/textutil.kt26
4 files changed, 110 insertions, 2 deletions
diff --git a/src/main/kotlin/features/inventory/REIDependencyWarner.kt b/src/main/kotlin/features/inventory/REIDependencyWarner.kt
new file mode 100644
index 0000000..1e9b1b8
--- /dev/null
+++ b/src/main/kotlin/features/inventory/REIDependencyWarner.kt
@@ -0,0 +1,83 @@
+package moe.nea.firmament.features.inventory
+
+import net.fabricmc.loader.api.FabricLoader
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import kotlin.time.Duration.Companion.seconds
+import net.minecraft.SharedConstants
+import net.minecraft.text.ClickEvent
+import net.minecraft.text.Text
+import moe.nea.firmament.Firmament
+import moe.nea.firmament.annotations.Subscribe
+import moe.nea.firmament.commands.thenExecute
+import moe.nea.firmament.events.CommandEvent
+import moe.nea.firmament.events.SkyblockServerUpdateEvent
+import moe.nea.firmament.repo.RepoManager
+import moe.nea.firmament.util.MC
+import moe.nea.firmament.util.SBData
+import moe.nea.firmament.util.aqua
+import moe.nea.firmament.util.bold
+import moe.nea.firmament.util.clickCommand
+import moe.nea.firmament.util.grey
+import moe.nea.firmament.util.lime
+import moe.nea.firmament.util.red
+import moe.nea.firmament.util.white
+import moe.nea.firmament.util.yellow
+
+object REIDependencyWarner {
+ val reiModId = "roughlyenoughitems"
+ val hasREI = FabricLoader.getInstance().isModLoaded(reiModId)
+ var sentWarning = false
+
+ fun modrinthLink(slug: String) =
+ "https://modrinth.com/mod/$slug/versions?g=${SharedConstants.getGameVersion().name}&l=fabric"
+
+ fun downloadButton(modName: String, modId: String, slug: String): Text {
+ val alreadyDownloaded = FabricLoader.getInstance().isModLoaded(modId)
+ return Text.literal(" - ")
+ .white()
+ .append(Text.literal("[").aqua())
+ .append(Text.translatable("firmament.download", modName)
+ .styled { it.withClickEvent(ClickEvent(ClickEvent.Action.OPEN_URL, modrinthLink(slug))) }
+ .yellow()
+ .also {
+ if (alreadyDownloaded)
+ it.append(Text.translatable("firmament.download.already", modName)
+ .lime())
+ })
+ .append(Text.literal("]").aqua())
+ }
+
+ @Subscribe
+ fun checkREIDependency(event: SkyblockServerUpdateEvent) {
+ if (!SBData.isOnSkyblock) return
+ if (hasREI) return
+ if (sentWarning) return
+ sentWarning = true
+ Firmament.coroutineScope.launch {
+ delay(2.seconds)
+ // TODO: should we offer an automatic install that actually downloads the JARs and places them into the mod folder?
+ MC.sendChat(
+ Text.translatable("firmament.reiwarning").red().bold().append("\n")
+ .append(downloadButton("RoughlyEnoughItems", reiModId, "rei")).append("\n")
+ .append(downloadButton("Architectury API", "architectury", "architectury-api")).append("\n")
+ .append(downloadButton("Cloth Config API", "cloth-config", "cloth-config")).append("\n")
+ .append(Text.translatable("firmament.reiwarning.disable")
+ .clickCommand("/firm disablereiwarning")
+ .grey())
+ )
+ }
+ }
+
+ @Subscribe
+ fun onSubcommand(event: CommandEvent.SubCommand) {
+ if (hasREI) return
+ event.subcommand("disablereiwarning") {
+ thenExecute {
+ RepoManager.Config.warnForMissingItemListMod = false
+ RepoManager.Config.save()
+ MC.sendChat(Text.translatable("firmament.reiwarning.disabled").yellow())
+ }
+ }
+ }
+}
diff --git a/src/main/kotlin/repo/RepoManager.kt b/src/main/kotlin/repo/RepoManager.kt
index b586548..9f8f422 100644
--- a/src/main/kotlin/repo/RepoManager.kt
+++ b/src/main/kotlin/repo/RepoManager.kt
@@ -40,7 +40,7 @@ object RepoManager {
RepoManager.launchAsyncUpdate(true)
}
val alwaysSuperCraft by toggle("enable-super-craft") { true }
-
+ var warnForMissingItemListMod by toggle("warn-for-missing-item-list-mod") { true }
}
val currentDownloadedSha by RepoDownloadManager::latestSavedVersionHash
diff --git a/src/main/kotlin/util/render/DrawContextExt.kt b/src/main/kotlin/util/render/DrawContextExt.kt
index 3e086b8..fc38aa6 100644
--- a/src/main/kotlin/util/render/DrawContextExt.kt
+++ b/src/main/kotlin/util/render/DrawContextExt.kt
@@ -12,6 +12,7 @@ fun DrawContext.isUntranslatedGuiDrawContext(): Boolean {
fun DrawContext.drawLine(fromX: Int, fromY: Int, toX: Int, toY: Int, color: Color) {
// TODO: push scissors
+ // TODO: use matrix translations and a different render layer
if (toY < fromY) {
drawLine(toX, toY, fromX, fromY, color)
return
diff --git a/src/main/kotlin/util/textutil.kt b/src/main/kotlin/util/textutil.kt
index 252f708..a6a7e87 100644
--- a/src/main/kotlin/util/textutil.kt
+++ b/src/main/kotlin/util/textutil.kt
@@ -1,5 +1,6 @@
package moe.nea.firmament.util
+import net.minecraft.text.ClickEvent
import net.minecraft.text.MutableText
import net.minecraft.text.PlainTextContent
import net.minecraft.text.Text
@@ -119,7 +120,30 @@ fun Text.iterator(): Sequence<Text> {
fun Text.allSiblings(): List<Text> = listOf(this) + siblings.flatMap { it.allSiblings() }
-fun MutableText.withColor(formatting: Formatting) = this.styled { it.withColor(formatting).withItalic(false) }
+fun MutableText.withColor(formatting: Formatting): MutableText = this.styled {
+ it.withColor(formatting)
+ .withItalic(false)
+ .withBold(false)
+}
+
+fun MutableText.blue() = withColor(Formatting.BLUE)
+fun MutableText.aqua() = withColor(Formatting.AQUA)
+fun MutableText.lime() = withColor(Formatting.GREEN)
+fun MutableText.darkGreen() = withColor(Formatting.DARK_GREEN)
+fun MutableText.yellow() = withColor(Formatting.YELLOW)
+fun MutableText.grey() = withColor(Formatting.GRAY)
+fun MutableText.red() = withColor(Formatting.RED)
+fun MutableText.white() = withColor(Formatting.WHITE)
+fun MutableText.bold(): MutableText = styled { it.withBold(true) }
+
+
+fun MutableText.clickCommand(command: String): MutableText {
+ require(command.startsWith("/"))
+ return this.styled {
+ it.withClickEvent(ClickEvent(ClickEvent.Action.RUN_COMMAND,
+ "/firm disablereiwarning"))
+ }
+}
fun Text.transformEachRecursively(function: (Text) -> Text): Text {
val c = this.content