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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user