aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt
blob: 6fd65778ecfbaf08098cd8ebf1dcaa3f31bae78e (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package at.hannibal2.skyhanni.data.model

import at.hannibal2.skyhanni.utils.StringUtils.allLettersFirstUppercase
import net.minecraft.client.Minecraft
import java.util.EnumMap

enum class SkyblockStat(val icon: String) {
    DAMAGE("§c❁"),
    HEALTH("§c❤"),
    DEFENSE("§a❈"),
    STRENGTH("§c❁"),
    INTELLIGENCE("§b✎"),

    CRIT_DAMAGE("§9☠"),
    CRIT_CHANCE("§9☣"),
    FEROCITY("§c⫽"),
    BONUS_ATTACK_SPEED("§e⚔"),
    ABILITY_DAMAGE("§c๑"),
    HEALTH_REGEN("§c❣"),
    VITALITY("§4♨"),
    MENDING("§a☄"),
    TRUE_DEFENCE("§7❂"),
    SWING_RANGE("§eⓈ"),
    SPEED("§f✦"),
    SEA_CREATURE_CHANCE("§3α"),
    MAGIC_FIND("§b✯"),
    PET_LUCK("§d♣"),
    FISHING_SPEED("§b☂"),
    BONUS_PEST_CHANCE("§2ൠ"),
    COMBAT_WISDOM("§3☯"),
    MINING_WISDOM("§3☯"),
    FARMING_WISDOM("§3☯"),
    FORAGING_WISDOM("§3☯"),
    FISHING_WISDOM("§3☯"),
    ENCHANTING_WISDOM("§3☯"),
    ALCHEMY_WISDOM("§3☯"),
    CARPENTRY_WISDOM("§3☯"),
    RUNECRAFTING_WISDOM("§3☯"),
    SOCIAL_WISDOM("§3☯"),
    TAMING_WISDOM("§3☯"),
    MINING_SPEED("§6⸕"),
    BREAKING_POWER("§2Ⓟ"),
    PRISTINE("§5✧"),
    FORAGING_FORTUNE("§☘"),
    FARMING_FORTUNE("§6☘"),
    MINING_FORTUNE("§6☘"),
    FEAR("§a☠")
    ;

    val capitalizedName = name.lowercase().allLettersFirstUppercase()

    val iconWithName = "$icon $capitalizedName"

    fun asString(value: Int) = (if (value > 0) "+" else "") + value.toString() + " " + this.icon

    companion object {
        val fontSizeOfLargestIcon by lazy {
            entries.maxOf { Minecraft.getMinecraft().fontRendererObj.getStringWidth(it.icon) } + 1
        }
    }
}

class SkyblockStatList : EnumMap<SkyblockStat, Double>(SkyblockStat::class.java), Map<SkyblockStat, Double> {
    operator fun minus(other: SkyblockStatList): SkyblockStatList {
        return SkyblockStatList().apply {
            val keys = this.keys + other.keys
            for (key in keys) {
                this[key] = (this@SkyblockStatList[key] ?: 0.0) - (other[key] ?: 0.0)
            }
        }
    }

    companion object {
        fun mapOf(vararg list: Pair<SkyblockStat, Double>) = SkyblockStatList().apply {
            for ((key, value) in list) {
                this[key] = value
            }
        }
    }
}