feat: Allow skipping DFU for REI lore cache generation

This commit is contained in:
Linnea Gräf
2025-06-22 15:19:01 +02:00
parent 4cfba87783
commit 7c45e48050
5 changed files with 73 additions and 25 deletions

View File

@@ -21,6 +21,7 @@ import net.minecraft.item.tooltip.TooltipType
import net.minecraft.text.Text
import moe.nea.firmament.compat.rei.FirmamentReiPlugin.Companion.asItemEntry
import moe.nea.firmament.events.ItemTooltipEvent
import moe.nea.firmament.repo.RepoManager
import moe.nea.firmament.repo.SBItemStack
import moe.nea.firmament.util.ErrorUtil
import moe.nea.firmament.util.FirmFormatters
@@ -44,10 +45,13 @@ object NEUItemEntryRenderer : EntryRenderer<SBItemStack> {
context.matrices.scale(bounds.width.toFloat() / 16F, bounds.height.toFloat() / 16F, 1f)
val item = entry.asItemEntry().value
context.drawItemWithoutEntity(item, -8, -8)
context.drawStackOverlay(minecraft.textRenderer, item, -8, -8,
if (entry.value.getStackSize() > 1000) FirmFormatters.shortFormat(entry.value.getStackSize()
.toDouble())
else null
context.drawStackOverlay(
minecraft.textRenderer, item, -8, -8,
if (entry.value.getStackSize() > 1000) FirmFormatters.shortFormat(
entry.value.getStackSize()
.toDouble()
)
else null
)
context.matrices.pop()
}
@@ -56,6 +60,16 @@ object NEUItemEntryRenderer : EntryRenderer<SBItemStack> {
var canUseVanillaTooltipEvents = true
override fun getTooltip(entry: EntryStack<SBItemStack>, tooltipContext: TooltipContext): Tooltip? {
if (!entry.value.isWarm() && !RepoManager.Config.perfectTooltips) {
val neuItem = entry.value.neuItem
if (neuItem != null) {
val lore = mutableListOf<Text>()
lore.add(Text.literal(neuItem.displayName))
neuItem.lore.mapTo(mutableListOf()) { Text.literal(it) }
return Tooltip.create(lore)
}
}
val stack = entry.value.asImmutableItemStack()
val lore = mutableListOf(stack.displayNameAccordingToNbt)
@@ -70,12 +84,14 @@ object NEUItemEntryRenderer : EntryRenderer<SBItemStack> {
ErrorUtil.softError("Failed to use vanilla tooltips", ex)
}
} else {
ItemTooltipEvent.publish(ItemTooltipEvent(
stack,
tooltipContext.vanillaContext(),
TooltipType.BASIC,
lore
))
ItemTooltipEvent.publish(
ItemTooltipEvent(
stack,
tooltipContext.vanillaContext(),
TooltipType.BASIC,
lore
)
)
}
if (entry.value.getStackSize() > 1000 && lore.isNotEmpty())
lore.add(1, Text.literal("${entry.value.getStackSize()}x").darkGrey())

View File

@@ -42,7 +42,12 @@ object SBItemEntryDefinition : EntryDefinition<SBItemStack> {
}
override fun asFormattedText(entry: EntryStack<SBItemStack>, value: SBItemStack): Text {
return VanillaEntryTypes.ITEM.definition.asFormattedText(entry.asItemEntry(), value.asImmutableItemStack())
val neuItem = entry.value.neuItem
return if (RepoManager.Config.perfectTooltips || entry.value.isWarm() || neuItem == null) {
VanillaEntryTypes.ITEM.definition.asFormattedText(entry.asItemEntry(), value.asImmutableItemStack())
} else {
Text.literal(neuItem.displayName)
}
}
override fun hash(entry: EntryStack<SBItemStack>, value: SBItemStack, context: ComparisonContext): Long {
@@ -51,8 +56,10 @@ object SBItemEntryDefinition : EntryDefinition<SBItemStack> {
}
override fun wildcard(entry: EntryStack<SBItemStack>?, value: SBItemStack): SBItemStack {
return value.copy(stackSize = 1, petData = RepoManager.getPotentialStubPetData(value.skyblockId),
stars = 0, extraLore = listOf(), reforge = null)
return value.copy(
stackSize = 1, petData = RepoManager.getPotentialStubPetData(value.skyblockId),
stars = 0, extraLore = listOf(), reforge = null
)
}
override fun normalize(entry: EntryStack<SBItemStack>?, value: SBItemStack): SBItemStack {

View File

@@ -146,6 +146,10 @@ object ItemCache : IReloadable {
}
}
fun hasCacheFor(skyblockId: SkyblockId): Boolean {
return skyblockId.neuItem in cache
}
fun NEUItem?.asItemStack(idHint: SkyblockId? = null, loreReplacements: Map<String, String>? = null): ItemStack {
if (this == null) return brokenItemStack(null, idHint)
var s = cache[this.skyblockItemId]

View File

@@ -46,6 +46,7 @@ object RepoManager {
}
val alwaysSuperCraft by toggle("enable-super-craft") { true }
var warnForMissingItemListMod by toggle("warn-for-missing-item-list-mod") { true }
val perfectTooltips by toggle("perfect-tooltips") { false }
}
val currentDownloadedSha by RepoDownloadManager::latestSavedVersionHash

View File

@@ -225,14 +225,21 @@ data class SBItemStack constructor(
Text.literal(
buffKind.prefix + formattedAmount +
statFormatting.postFix +
buffKind.postFix + " ")
.withColor(buffKind.color)))
buffKind.postFix + " "
)
.withColor(buffKind.color)
)
)
}
fun formatValue() =
Text.literal(FirmFormatters.formatCommas(valueNum ?: 0.0,
1,
includeSign = true) + statFormatting.postFix + " ")
Text.literal(
FirmFormatters.formatCommas(
valueNum ?: 0.0,
1,
includeSign = true
) + statFormatting.postFix + " "
)
.setStyle(Style.EMPTY.withColor(statFormatting.color))
val statFormatting = formattingOverrides[statName] ?: StatFormatting("", Formatting.GREEN)
@@ -413,13 +420,26 @@ data class SBItemStack constructor(
.append(starString(stars))
val isDungeon = ItemType.fromItemStack(itemStack)?.isDungeon ?: true
val truncatedStarCount = if (isDungeon) minOf(5, stars) else stars
appendEnhancedStats(itemStack,
baseStats
.filter { it.statFormatting.isStarAffected }
.associate {
it.statName to ((it.valueNum ?: 0.0) * (truncatedStarCount * 0.02))
},
BuffKind.STAR_BUFF)
appendEnhancedStats(
itemStack,
baseStats
.filter { it.statFormatting.isStarAffected }
.associate {
it.statName to ((it.valueNum ?: 0.0) * (truncatedStarCount * 0.02))
},
BuffKind.STAR_BUFF
)
}
fun isWarm(): Boolean {
if (itemStack_ != null) return true
if (ItemCache.hasCacheFor(skyblockId)) return true
return false
}
fun asLazyImmutableItemStack(): ItemStack? {
if (isWarm()) return asImmutableItemStack()
return null
}
fun asImmutableItemStack(): ItemStack {