Fix crash when rendering SkyBlock id in a string

This commit is contained in:
Linnea Gräf
2024-02-09 12:00:50 +01:00
parent 0cb6e308ac
commit efbef71213
14 changed files with 55 additions and 87 deletions

View File

@@ -52,25 +52,19 @@ fun firmamentCommand() = literal("firmament") {
val configObj = AllConfigsGui.allConfigs.find { it.name == config }
if (configObj == null) {
source.sendFeedback(Text.translatable("firmament.command.toggle.no-config-found", config))
source.sendFeedback(Text.stringifiedTranslatable("firmament.command.toggle.no-config-found", config))
return@thenExecute
}
val propertyObj = configObj.allOptions[property]
if (propertyObj == null) {
source.sendFeedback(
Text.translatable(
"firmament.command.toggle.no-property-found",
property
)
Text.stringifiedTranslatable("firmament.command.toggle.no-property-found", property)
)
return@thenExecute
}
if (propertyObj.handler !is BooleanHandler) {
source.sendFeedback(
Text.translatable(
"firmament.command.toggle.not-a-toggle",
property
)
Text.stringifiedTranslatable("firmament.command.toggle.not-a-toggle", property)
)
return@thenExecute
}
@@ -78,12 +72,9 @@ fun firmamentCommand() = literal("firmament") {
propertyObj.value = !propertyObj.value
configObj.save()
source.sendFeedback(
Text.translatable(
"firmament.command.toggle.toggled",
configObj.labelText,
Text.stringifiedTranslatable("firmament.command.toggle.toggled",configObj.labelText,
propertyObj.labelText,
Text.translatable("firmament.toggle.${propertyObj.value}")
)
Text.translatable("firmament.toggle.${propertyObj.value}"))
)
}
}
@@ -145,48 +136,30 @@ fun firmamentCommand() = literal("firmament") {
suggestsList { RepoManager.neuRepo.items.items.keys }
thenExecute {
val itemName = SkyblockId(get(item))
source.sendFeedback(Text.translatable("firmament.price", itemName.neuItem))
source.sendFeedback(Text.stringifiedTranslatable("firmament.price", itemName.neuItem))
val bazaarData = HypixelStaticData.bazaarData[itemName]
if (bazaarData != null) {
source.sendFeedback(Text.translatable("firmament.price.bazaar"))
source.sendFeedback(
Text.translatable(
"firmament.price.bazaar.productid",
bazaarData.productId.bazaarId
)
Text.stringifiedTranslatable("firmament.price.bazaar.productid", bazaarData.productId.bazaarId)
)
source.sendFeedback(
Text.translatable(
"firmament.price.bazaar.buy.price",
FirmFormatters.formatCurrency(bazaarData.quickStatus.buyPrice, 1)
)
Text.stringifiedTranslatable("firmament.price.bazaar.buy.price", FirmFormatters.formatCurrency(bazaarData.quickStatus.buyPrice, 1))
)
source.sendFeedback(
Text.translatable(
"firmament.price.bazaar.buy.order",
bazaarData.quickStatus.buyOrders
)
Text.stringifiedTranslatable("firmament.price.bazaar.buy.order", bazaarData.quickStatus.buyOrders)
)
source.sendFeedback(
Text.translatable(
"firmament.price.bazaar.sell.price",
FirmFormatters.formatCurrency(bazaarData.quickStatus.sellPrice, 1)
)
Text.stringifiedTranslatable("firmament.price.bazaar.sell.price", FirmFormatters.formatCurrency(bazaarData.quickStatus.sellPrice, 1))
)
source.sendFeedback(
Text.translatable(
"firmament.price.bazaar.sell.order",
bazaarData.quickStatus.sellOrders
)
Text.stringifiedTranslatable("firmament.price.bazaar.sell.order", bazaarData.quickStatus.sellOrders)
)
}
val lowestBin = HypixelStaticData.lowestBin[itemName]
if (lowestBin != null) {
source.sendFeedback(
Text.translatable(
"firmament.price.lowestbin",
FirmFormatters.formatCurrency(lowestBin, 1)
)
Text.stringifiedTranslatable("firmament.price.lowestbin", FirmFormatters.formatCurrency(lowestBin, 1))
)
}
}
@@ -200,15 +173,15 @@ fun firmamentCommand() = literal("firmament") {
}
thenLiteral("sbdata") {
thenExecute {
source.sendFeedback(Text.translatable("firmament.sbinfo.profile", SBData.profileId))
source.sendFeedback(Text.stringifiedTranslatable("firmament.sbinfo.profile", SBData.profileId))
val locrawInfo = SBData.locraw
if (locrawInfo == null) {
source.sendFeedback(Text.translatable("firmament.sbinfo.nolocraw"))
} else {
source.sendFeedback(Text.translatable("firmament.sbinfo.server", locrawInfo.server))
source.sendFeedback(Text.translatable("firmament.sbinfo.gametype", locrawInfo.gametype))
source.sendFeedback(Text.translatable("firmament.sbinfo.mode", locrawInfo.mode))
source.sendFeedback(Text.translatable("firmament.sbinfo.map", locrawInfo.map))
source.sendFeedback(Text.stringifiedTranslatable("firmament.sbinfo.server", locrawInfo.server))
source.sendFeedback(Text.stringifiedTranslatable("firmament.sbinfo.gametype", locrawInfo.gametype))
source.sendFeedback(Text.stringifiedTranslatable("firmament.sbinfo.mode", locrawInfo.mode))
source.sendFeedback(Text.stringifiedTranslatable("firmament.sbinfo.map", locrawInfo.map))
}
}
}
@@ -217,7 +190,7 @@ fun firmamentCommand() = literal("firmament") {
thenExecute {
source.sendFeedback(Text.translatable("firmament.ursa.debugrequest.start"))
val text = UrsaManager.request(this[path].split("/")).bodyAsText()
source.sendFeedback(Text.translatable("firmament.ursa.debugrequest.result", text))
source.sendFeedback(Text.stringifiedTranslatable("firmament.ursa.debugrequest.result", text))
}
}
}

View File

@@ -46,9 +46,9 @@ object QuickCommands : FirmamentFeature {
}
val joinName = getNameForFloor(what.replace(" ", "").lowercase())
if (joinName == null) {
source.sendFeedback(Text.translatable("firmament.quick-commands.join.unknown",what))
source.sendFeedback(Text.stringifiedTranslatable("firmament.quick-commands.join.unknown", what))
} else {
source.sendFeedback(Text.translatable("firmament.quick-commands.join.success", joinName))
source.sendFeedback(Text.stringifiedTranslatable("firmament.quick-commands.join.success", joinName))
MC.sendCommand("joininstance $joinName")
}
}
@@ -70,7 +70,7 @@ object QuickCommands : FirmamentFeature {
)
}
if (l !in kuudraLevelNames.indices) {
source.sendFeedback(Text.translatable("firmament.quick-commands.join.unknown-kuudra", kuudraLevel))
source.sendFeedback(Text.stringifiedTranslatable("firmament.quick-commands.join.unknown-kuudra", kuudraLevel))
return null
}
return "KUUDRA_${kuudraLevelNames[l]}"
@@ -90,7 +90,7 @@ object QuickCommands : FirmamentFeature {
return "CATACOMBS_ENTRANCE"
}
if (l !in dungeonLevelNames.indices) {
source.sendFeedback(Text.translatable("firmament.quick-commands.join.unknown-catacombs", kuudraLevel))
source.sendFeedback(Text.stringifiedTranslatable("firmament.quick-commands.join.unknown-catacombs", kuudraLevel))
return null
}
return "${if (masterLevel != null) "MASTER_" else ""}CATACOMBS_FLOOR_${dungeonLevelNames[l]}"

View File

@@ -47,7 +47,7 @@ object DeveloperFeatures : FirmamentFeature {
MC.player?.sendMessage(Text.translatable("firmament.dev.resourcerebuild.start"))
val startTime = TimeMark.now()
process.toHandle().onExit().thenApply {
MC.player?.sendMessage(Text.translatable("firmament.dev.resourcerebuild.done", startTime.passedTime()))
MC.player?.sendMessage(Text.stringifiedTranslatable("firmament.dev.resourcerebuild.done", startTime.passedTime()))
Unit
}
} else {

View File

@@ -54,7 +54,7 @@ object PowerUserTools : FirmamentFeature {
ItemTooltipEvent.subscribe {
if (TConfig.showItemIds) {
val id = it.stack.skyBlockId ?: return@subscribe
it.lines.add(Text.translatable("firmament.tooltip.skyblockid", id.neuItem))
it.lines.add(Text.stringifiedTranslatable("firmament.tooltip.skyblockid", id.neuItem))
}
val (item, text) = lastCopiedStack ?: return@subscribe
if (!ItemStack.areEqual(item, it.stack)) {
@@ -83,7 +83,7 @@ object PowerUserTools : FirmamentFeature {
MC.sendChat(Text.translatable("firmament.tooltip.copied.skull.fail"))
} else {
ClipboardUtils.setTextContent(id.toString())
MC.sendChat(Text.translatable("firmament.tooltip.copied.skull", id.toString()))
MC.sendChat(Text.stringifiedTranslatable("firmament.tooltip.copied.skull", id.toString()))
}
}
}
@@ -105,7 +105,7 @@ object PowerUserTools : FirmamentFeature {
return@subscribe
}
ClipboardUtils.setTextContent(sbId.neuItem)
lastCopiedStack = Pair(item, Text.translatable("firmament.tooltip.copied.skyblockid", sbId.neuItem))
lastCopiedStack = Pair(item, Text.stringifiedTranslatable("firmament.tooltip.copied.skyblockid", sbId.neuItem))
} else if (it.matches(TConfig.copyTexturePackId)) {
val model = CustomItemModelEvent.getModelIdentifier(item)
if (model == null) {
@@ -113,7 +113,7 @@ object PowerUserTools : FirmamentFeature {
return@subscribe
}
ClipboardUtils.setTextContent(model.toString())
lastCopiedStack = Pair(item, Text.translatable("firmament.tooltip.copied.modelid", model.toString()))
lastCopiedStack = Pair(item, Text.stringifiedTranslatable("firmament.tooltip.copied.modelid", model.toString()))
} else if (it.matches(TConfig.copyNbtData)) {
val nbt = item.orCreateNbt.toString()
ClipboardUtils.setTextContent(nbt)

View File

@@ -36,24 +36,15 @@ object PriceData : FirmamentFeature {
if (bazaarData != null) {
it.lines.add(Text.literal(""))
it.lines.add(
Text.translatable(
"firmament.tooltip.bazaar.sell-order",
FirmFormatters.formatCurrency(bazaarData.quickStatus.sellPrice, 1)
)
Text.stringifiedTranslatable("firmament.tooltip.bazaar.sell-order", FirmFormatters.formatCurrency(bazaarData.quickStatus.sellPrice, 1))
)
it.lines.add(
Text.translatable(
"firmament.tooltip.bazaar.buy-order",
FirmFormatters.formatCurrency(bazaarData.quickStatus.buyPrice, 1)
)
Text.stringifiedTranslatable("firmament.tooltip.bazaar.buy-order", FirmFormatters.formatCurrency(bazaarData.quickStatus.buyPrice, 1))
)
} else if (lowestBin != null) {
it.lines.add(Text.literal(""))
it.lines.add(
Text.translatable(
"firmament.tooltip.ah.lowestbin",
FirmFormatters.formatCurrency(lowestBin, 1)
)
Text.stringifiedTranslatable("firmament.tooltip.ah.lowestbin", FirmFormatters.formatCurrency(lowestBin, 1))
)
}
}

View File

@@ -97,15 +97,9 @@ object PristineProfitTracker : FirmamentFeature {
val moneyPerSecond = moneyHistogram.averagePer({ it }, 1.seconds)
if (collectionPerSecond == null || moneyPerSecond == null) return
ProfitHud.collectionCurrent = collectionPerSecond
ProfitHud.collectionText = Text.translatable(
"firmament.pristine-profit.collection",
formatCurrency(collectionPerSecond * SECONDS_PER_HOUR, 1)
).formattedString()
ProfitHud.collectionText = Text.stringifiedTranslatable("firmament.pristine-profit.collection", formatCurrency(collectionPerSecond * SECONDS_PER_HOUR, 1)).formattedString()
ProfitHud.moneyCurrent = moneyPerSecond
ProfitHud.moneyText = Text.translatable(
"firmament.pristine-profit.money",
formatCurrency(moneyPerSecond * SECONDS_PER_HOUR, 1)
).formattedString()
ProfitHud.moneyText = Text.stringifiedTranslatable("firmament.pristine-profit.money", formatCurrency(moneyPerSecond * SECONDS_PER_HOUR, 1)).formattedString()
val data = DConfig.data
if (data != null) {
if (data.maxCollectionPerSecond < collectionPerSecond && collectionHistogram.oldestUpdate()

View File

@@ -52,7 +52,7 @@ object Waypoints : FirmamentFeature {
?.skinTextures
?.texture
withFacingThePlayer(waypoint.pos.toCenterPos()) {
waypoint(waypoint.pos, Text.translatable("firmament.waypoint.temporary", player))
waypoint(waypoint.pos, Text.stringifiedTranslatable("firmament.waypoint.temporary", player))
if (skin != null) {
matrixStack.translate(0F, -20F, 0F)
// Head front

View File

@@ -27,7 +27,7 @@ class HudMetaHandler(val config: ManagedConfig, val label: MutableText, val widt
}
override fun emitGuiElements(opt: ManagedOption<HudMeta>, guiAppender: GuiAppender) {
guiAppender.appendLabeledRow(opt.labelText, WButton(Text.translatable("firmament.hud.edit", label))
guiAppender.appendLabeledRow(opt.labelText, WButton(Text.stringifiedTranslatable("firmament.hud.edit", label))
.also {
it.setOnClick {
MC.screen = JarvisIntegration.jarvis.getHudEditor(

View File

@@ -44,31 +44,31 @@ class ProfileViewer(
companion object {
suspend fun onCommand(source: FabricClientCommandSource, name: String) {
source.sendFeedback(Text.translatable("firmament.pv.lookingup", name))
source.sendFeedback(Text.stringifiedTranslatable("firmament.pv.lookingup", name))
try {
val uuid = Routes.getUUIDForPlayerName(name)
if (uuid == null) {
source.sendError(Text.translatable("firmament.pv.noplayer", name))
source.sendError(Text.stringifiedTranslatable("firmament.pv.noplayer", name))
return
}
val name = Routes.getPlayerNameForUUID(uuid) ?: name
val names = mapOf(uuid to (name))
val data = Routes.getAccountData(uuid)
if (data == null) {
source.sendError(Text.translatable("firmament.pv.noprofile", name))
source.sendError(Text.stringifiedTranslatable("firmament.pv.noprofile", name))
return
}
val accountData = mapOf(data.uuid to data)
val profiles = Routes.getProfiles(uuid)
val profile = profiles?.profiles?.find { it.selected }
if (profile == null) {
source.sendFeedback(Text.translatable("firmament.pv.noprofile", name))
source.sendFeedback(Text.stringifiedTranslatable("firmament.pv.noprofile", name))
return
}
ScreenUtil.setScreenLater(CottonClientScreen(ProfileViewer(uuid, names, accountData, profile)))
} catch (e: Exception) {
Firmament.logger.error("Error loading profile data for $name", e)
source.sendError(Text.translatable("firmament.pv.badprofile", name, e.message))
source.sendError(Text.stringifiedTranslatable("firmament.pv.badprofile", name, e.message))
}
}
}

View File

@@ -49,7 +49,7 @@ object SkillPage : ProfilePage {
) {
override fun addTooltip(tooltip: TooltipBuilder) {
tooltip.add(Text.literal("$level/$maxLevel"))
tooltip.add(Text.translatable("firmament.pv.skills.total", FirmFormatters.formatCurrency(exp, 1)))
tooltip.add(Text.stringifiedTranslatable("firmament.pv.skills.total", FirmFormatters.formatCurrency(exp, 1)))
}
}
}

View File

@@ -43,7 +43,7 @@ class SBForgeRecipe(override val neuRecipe: NEUForgeRecipe) : SBRecipe() {
add(Widgets.createResultSlotBackground(Point(bounds.minX + 124, bounds.minY + 46)))
val arrow = Widgets.createArrow(Point(bounds.minX + 90, bounds.minY + 54 - 18 / 2))
add(arrow)
add(Widgets.createTooltip(arrow.bounds, Text.translatable("firmament.recipe.forge.time", display.neuRecipe.duration.seconds)))
add(Widgets.createTooltip(arrow.bounds, Text.stringifiedTranslatable("firmament.recipe.forge.time", display.neuRecipe.duration.seconds)))
val ingredientsCenter = Point(bounds.minX + 49 - 8, bounds.minY + 54 - 8)
val count = display.neuRecipe.inputs.size
if (count == 1) {

View File

@@ -14,7 +14,7 @@ import io.github.moulberry.repo.IReloadable
import io.github.moulberry.repo.NEURepository
import io.github.moulberry.repo.data.NEUItem
import java.text.NumberFormat
import java.util.UUID
import java.util.*
import java.util.concurrent.ConcurrentHashMap
import org.apache.logging.log4j.LogManager
import kotlinx.coroutines.Job
@@ -74,7 +74,14 @@ object ItemCache : IReloadable {
fun brokenItemStack(neuItem: NEUItem?, idHint: SkyblockId? = null): ItemStack {
return ItemStack(Items.PAINTING).apply {
setCustomName(Text.literal(neuItem?.displayName ?: idHint?.neuItem ?: "null"))
appendLore(listOf(Text.translatable("firmament.repo.brokenitem", neuItem?.skyblockItemId ?: idHint)))
appendLore(
listOf(
Text.stringifiedTranslatable(
"firmament.repo.brokenitem",
(neuItem?.skyblockItemId ?: idHint)
)
)
)
}
}

View File

@@ -30,6 +30,9 @@ import moe.nea.firmament.util.json.DashlessUUIDSerializer
@Serializable
value class SkyblockId(val neuItem: String) {
val identifier get() = Identifier("skyblockitem", neuItem.lowercase().replace(";", "__").replace(":", "___"))
override fun toString(): String {
return neuItem
}
/**
* A bazaar stock item id, as returned by the HyPixel bazaar api endpoint.

View File

@@ -65,7 +65,7 @@ object WarpUtil {
) {
DConfig.data?.excludedWarps?.add(lastAttemptedWarp)
DConfig.markDirty()
MC.sendChat(Text.translatable("firmament.warp-util.mark-excluded", lastAttemptedWarp))
MC.sendChat(Text.stringifiedTranslatable("firmament.warp-util.mark-excluded", lastAttemptedWarp))
lastWarpAttempt = TimeMark.farPast()
}
if (it.unformattedString == "You may now fast travel to") {