Add warning for missing REI
This commit is contained in:
83
src/main/kotlin/features/inventory/REIDependencyWarner.kt
Normal file
83
src/main/kotlin/features/inventory/REIDependencyWarner.kt
Normal file
@@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user