aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/repo/item/SBReforge.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/repo/item/SBReforge.kt')
-rw-r--r--src/main/kotlin/repo/item/SBReforge.kt66
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()
+ }
+}