diff options
-rw-r--r-- | src/main/kotlin/commands/rome.kt | 32 | ||||
-rw-r--r-- | src/main/kotlin/repo/RepoManager.kt | 11 | ||||
-rw-r--r-- | src/main/kotlin/util/FirmFormatters.kt | 37 | ||||
-rw-r--r-- | src/main/kotlin/util/textutil.kt | 6 |
4 files changed, 84 insertions, 2 deletions
diff --git a/src/main/kotlin/commands/rome.kt b/src/main/kotlin/commands/rome.kt index 39053d2..a690e1f 100644 --- a/src/main/kotlin/commands/rome.kt +++ b/src/main/kotlin/commands/rome.kt @@ -3,7 +3,14 @@ package moe.nea.firmament.commands import com.mojang.brigadier.CommandDispatcher import com.mojang.brigadier.arguments.StringArgumentType.string import io.ktor.client.statement.bodyAsText +import java.nio.file.Path import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource +import kotlin.io.path.exists +import kotlin.io.path.fileSize +import kotlin.io.path.isDirectory +import kotlin.io.path.isReadable +import kotlin.io.path.isRegularFile +import kotlin.io.path.listDirectoryEntries import net.minecraft.nbt.NbtOps import net.minecraft.text.Text import net.minecraft.text.TextCodecs @@ -21,8 +28,12 @@ import moe.nea.firmament.gui.config.ManagedConfig import moe.nea.firmament.gui.config.ManagedOption import moe.nea.firmament.init.MixinPlugin import moe.nea.firmament.repo.HypixelStaticData +import moe.nea.firmament.repo.ItemCache +import moe.nea.firmament.repo.RepoDownloadManager import moe.nea.firmament.repo.RepoManager import moe.nea.firmament.util.FirmFormatters +import moe.nea.firmament.util.FirmFormatters.debugPath +import moe.nea.firmament.util.FirmFormatters.formatBool import moe.nea.firmament.util.MC import moe.nea.firmament.util.SBData import moe.nea.firmament.util.ScreenUtil @@ -30,7 +41,11 @@ import moe.nea.firmament.util.SkyblockId import moe.nea.firmament.util.accessors.messages import moe.nea.firmament.util.collections.InstanceList import moe.nea.firmament.util.collections.WeakCache +import moe.nea.firmament.util.darkGreen +import moe.nea.firmament.util.lime import moe.nea.firmament.util.mc.SNbtFormatter +import moe.nea.firmament.util.purple +import moe.nea.firmament.util.red import moe.nea.firmament.util.tr import moe.nea.firmament.util.unformattedString @@ -300,6 +315,23 @@ fun firmamentCommand() = literal("firmament") { } } } + thenLiteral("repo") { + thenExecute { + source.sendFeedback(tr("firmament.repo.info.ref", "Repo Upstream: ${RepoManager.getRepoRef()}")) + source.sendFeedback(tr("firmament.repo.info.downloadedref", + "Downloaded ref: ${RepoDownloadManager.latestSavedVersionHash}")) + source.sendFeedback(tr("firmament.repo.info.location", + "Saved location: ${debugPath(RepoDownloadManager.repoSavedLocation)}")) + source.sendFeedback(tr("firmament.repo.info.reloadstatus", + "Incomplete: ${formatBool(RepoManager.neuRepo.isIncomplete, trueIsGood = false)}, Unstable ${formatBool(RepoManager.neuRepo.isUnstable, trueIsGood = false)}")) + source.sendFeedback(tr("firmament.repo.info.items", + "Loaded items: ${RepoManager.neuRepo.items?.items?.size}")) + source.sendFeedback(tr("firmament.repo.info.itemcache", + "ItemCache flawless: ${formatBool(ItemCache.isFlawless)}")) + source.sendFeedback(tr("firmament.repo.info.itemdir", + "Items on disk: ${debugPath(RepoDownloadManager.repoSavedLocation.resolve("items"))}")) + } + } } CommandEvent.SubCommand.publish(CommandEvent.SubCommand(this@literal)) } diff --git a/src/main/kotlin/repo/RepoManager.kt b/src/main/kotlin/repo/RepoManager.kt index dc39511..667ab73 100644 --- a/src/main/kotlin/repo/RepoManager.kt +++ b/src/main/kotlin/repo/RepoManager.kt @@ -118,12 +118,20 @@ object RepoManager { } fun reload() { + if (!TestUtil.isInTest && !MC.instance.isOnThread) { + MC.instance.send { + reload() + } + return + } try { ItemCache.ReloadProgressHud.reportProgress("Reloading from Disk", 0, -1) // TODO: replace with a proper bouncy bar ItemCache.ReloadProgressHud.isEnabled = true + logger.info("Repo reload started.") neuRepo.reload() + logger.info("Repo reload completed.") } catch (exc: NEURepositoryException) { ErrorUtil.softError("Failed to reload repository", exc) MC.sendChat( @@ -171,4 +179,7 @@ object RepoManager { return PetData(Rarity.entries[intIndex], petId, 0.0, true) } + fun getRepoRef(): String { + return "${Config.username}/${Config.reponame}#${Config.branch}" + } } diff --git a/src/main/kotlin/util/FirmFormatters.kt b/src/main/kotlin/util/FirmFormatters.kt index 61644db..92fb9e5 100644 --- a/src/main/kotlin/util/FirmFormatters.kt +++ b/src/main/kotlin/util/FirmFormatters.kt @@ -1,9 +1,17 @@ package moe.nea.firmament.util import com.google.common.math.IntMath.pow +import java.nio.file.Path +import kotlin.io.path.exists +import kotlin.io.path.fileSize +import kotlin.io.path.isDirectory +import kotlin.io.path.isReadable +import kotlin.io.path.isRegularFile +import kotlin.io.path.listDirectoryEntries import kotlin.math.absoluteValue import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds +import net.minecraft.text.Text object FirmFormatters { fun formatCommas(int: Int, segments: Int = 3): String = formatCommas(int.toLong(), segments) @@ -62,4 +70,33 @@ object FirmFormatters { return sb.toString() } + fun debugPath(path: Path): Text { + if (!path.exists()) { + return tr("firmament.path.missing", "$path (missing)").red() + } + if (!path.isReadable()) { + return tr("firmament.path.unreadable", "$path (unreadable)").red() + } + if (path.isRegularFile()) { + return tr("firmament.path.regular", + "$path (exists ${formatFileSize(path.fileSize())})").lime() + } + if (path.isDirectory()) { + return tr("firmament.path.directory", "$path (${path.listDirectoryEntries().size} entries)").darkGreen() + } + return tr("firmament.path.unknown", "$path (unknown)").purple() + } + + fun formatFileSize(fileSizeInBytes: Long): String { + return "${fileSizeInBytes / 1024} KiB" + } + + fun formatBool( + boolean: Boolean, + trueIsGood: Boolean = true, + ): Text { + val text = Text.literal(boolean.toString()) + return if (boolean == trueIsGood) text.lime() else text.red() + } + } diff --git a/src/main/kotlin/util/textutil.kt b/src/main/kotlin/util/textutil.kt index 2770b26..5d95d7a 100644 --- a/src/main/kotlin/util/textutil.kt +++ b/src/main/kotlin/util/textutil.kt @@ -130,6 +130,8 @@ 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.purple() = withColor(Formatting.DARK_PURPLE) +fun MutableText.pink() = withColor(Formatting.LIGHT_PURPLE) fun MutableText.yellow() = withColor(Formatting.YELLOW) fun MutableText.grey() = withColor(Formatting.GRAY) fun MutableText.red() = withColor(Formatting.RED) @@ -165,6 +167,6 @@ fun Text.transformEachRecursively(function: (Text) -> Text): Text { } } -fun tr(key: String, default: String): Text = error("Compiler plugin did not run.") -fun trResolved(key: String, vararg args: Any) = Text.translatable(key, *args) +fun tr(key: String, default: String): MutableText = error("Compiler plugin did not run.") +fun trResolved(key: String, vararg args: Any): MutableText = Text.stringifiedTranslatable(key, *args) |