aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/repo/item/SBReforge.kt
blob: 231e3cc26d3eb84f55ae21edd07ed70860ade358 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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()
	}
}