diff options
author | Linnea Gräf <nea@nea.moe> | 2025-03-17 23:38:50 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2025-03-17 23:38:50 +0100 |
commit | 9484a621afdc79800b25215908e4ee886f328993 (patch) | |
tree | eaf8544fe5b8dba07895d4c74250f1b5413821ca /src/main/kotlin/repo/item/SBReforge.kt | |
parent | aacd527cb8e226b92e5ad28d8d075da06fd79ec4 (diff) | |
download | Firmament-experiment/itemstacks.tar.gz Firmament-experiment/itemstacks.tar.bz2 Firmament-experiment/itemstacks.zip |
refactor: Add stats and reforges to SBItemPropertyexperiment/itemstacks
Diffstat (limited to 'src/main/kotlin/repo/item/SBReforge.kt')
-rw-r--r-- | src/main/kotlin/repo/item/SBReforge.kt | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/main/kotlin/repo/item/SBReforge.kt b/src/main/kotlin/repo/item/SBReforge.kt new file mode 100644 index 0000000..231e3cc --- /dev/null +++ b/src/main/kotlin/repo/item/SBReforge.kt @@ -0,0 +1,66 @@ +package moe.nea.firmament.repo.item + +import com.google.auto.service.AutoService +import net.minecraft.item.ItemStack +import net.minecraft.text.Style +import net.minecraft.text.Text +import moe.nea.firmament.repo.ItemCache +import moe.nea.firmament.repo.ReforgeStore +import moe.nea.firmament.repo.SBItemStack +import moe.nea.firmament.util.MC +import moe.nea.firmament.util.ReforgeId +import moe.nea.firmament.util.blue +import moe.nea.firmament.util.getReforgeId +import moe.nea.firmament.util.grey +import moe.nea.firmament.util.mc.displayNameAccordingToNbt +import moe.nea.firmament.util.mc.modifyLore +import moe.nea.firmament.util.modifyExtraAttributes +import moe.nea.firmament.util.prepend +import moe.nea.firmament.util.reconstitute +import moe.nea.firmament.util.skyblock.Rarity +import moe.nea.firmament.util.skyblock.stats.BuffKind +import moe.nea.firmament.util.unformattedString + +@AutoService(SBItemProperty::class) +object SBReforge : SBItemProperty.State<ReforgeId>() { + override fun applyToStack( + stack: ItemStack, + store: SBItemData, + value: ReforgeId? + ): ItemStack { + val reforgeId = value ?: return stack + stack.modifyExtraAttributes { data -> + data.putString("modifier", reforgeId.id) + } + val rarity = Rarity.fromItem(stack) ?: return stack + val reforge = ReforgeStore.modifierLut[reforgeId] ?: return stack + stack.displayNameAccordingToNbt = stack.displayNameAccordingToNbt.copy() + .prepend(Text.literal(reforge.reforgeName + " ").formatted(rarity.colour())) + val reforgeStats = reforge.reforgeStats?.get(rarity) ?: mapOf() + SBItemStack.appendEnhancedStats(stack, reforgeStats, BuffKind.REFORGE) + reforge.reforgeAbility?.get(rarity)?.let { reforgeAbility -> + val formattedReforgeAbility = ItemCache.un189Lore(reforgeAbility) + .grey() + stack.modifyLore { + val lastBlank = it.indexOfLast { it.unformattedString.isBlank() } + val newList = mutableListOf<Text>() + newList.addAll(it.subList(0, lastBlank)) + newList.add(Text.literal("")) + newList.add(Text.literal("${reforge.reforgeName} Bonus").blue()) + MC.font.textHandler.wrapLines(formattedReforgeAbility, 180, Style.EMPTY).mapTo(newList) { + it.reconstitute() + } + newList.addAll(it.subList(lastBlank, it.size)) + newList + } + } + return stack + } + + override fun fromStack( + stack: ItemStack, + store: SBItemData + ): ReforgeId? { + return stack.getReforgeId() + } +} |