aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/features/inventory
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/features/inventory')
-rw-r--r--src/main/kotlin/features/inventory/REIDependencyWarner.kt83
1 files changed, 83 insertions, 0 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())
+ }
+ }
+ }
+}