From 6eb085f4e2ba69e98934ffa9489c8679ba23d244 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 23 Jun 2024 20:06:17 +0200 Subject: Feature: Reforge helper (#1437) Co-authored-by: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Co-authored-by: hannibal2 <24389977+hannibal002@users.noreply.github.com> Co-authored-by: Cal Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../data/jsonobjects/repo/neu/NeuReforgeJson.kt | 67 ++++++++++++++++++ .../jsonobjects/repo/neu/NeuReforgeStoneJson.kt | 63 ----------------- .../hannibal2/skyhanni/data/model/SkyblockStat.kt | 80 ++++++++++++++++++++++ 3 files changed, 147 insertions(+), 63 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeStoneJson.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt (limited to 'src/main/java/at/hannibal2/skyhanni/data') diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt new file mode 100644 index 000000000..a8c8f3fe4 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt @@ -0,0 +1,67 @@ +package at.hannibal2.skyhanni.data.jsonobjects.repo.neu + +import at.hannibal2.skyhanni.data.model.SkyblockStatList +import at.hannibal2.skyhanni.utils.LorenzRarity +import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName +import at.hannibal2.skyhanni.utils.NEUItems +import com.google.gson.annotations.Expose +import com.google.gson.annotations.SerializedName +import net.minecraft.item.Item + +data class NeuReforgeJson( + @Expose val internalName: NEUInternalName?, + @Expose val reforgeName: String, + @Expose @SerializedName("itemTypes") val rawItemTypes: Any, + @Expose val requiredRarities: List, + @Expose val reforgeCosts: Map?, + @Expose val reforgeStats: Map?, + @Expose @SerializedName("reforgeAbility") val rawReforgeAbility: Any?, +) { + + private lateinit var reforgeAbilityField: Map + private lateinit var itemTypeField: Pair> + + val reforgeAbility + get() = if (this::reforgeAbilityField.isInitialized) reforgeAbilityField + else { + reforgeAbilityField = when (this.rawReforgeAbility) { + is String -> { + this.requiredRarities.associateWith { this.rawReforgeAbility } + } + + is Map<*, *> -> (this.rawReforgeAbility as? Map)?.mapKeys { + LorenzRarity.valueOf( + it.key.uppercase().replace(" ", "_"), + ) + } ?: emptyMap() + + else -> emptyMap() + } + reforgeAbilityField + } + + val itemType: Pair> + get() = if (this::itemTypeField.isInitialized) itemTypeField + else run { + val any = this.rawItemTypes + return when (any) { + is String -> { + any.replace("/", "_AND_").uppercase() to emptyList() + } + + is Map<*, *> -> { + val type = "SPECIAL_ITEMS" + val map = any as? Map> ?: return type to emptyList() + val internalNames = map["internalName"]?.map { it.asInternalName() } ?: emptyList() + val itemType = map["itemid"]?.map { + NEUItems.getInternalNamesForItemId(Item.getByNameOrId(it)) + }?.flatten() ?: emptyList() + type to (internalNames + itemType) + } + + else -> throw IllegalStateException() + } + } +} + diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeStoneJson.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeStoneJson.kt deleted file mode 100644 index 8ebe2dea6..000000000 --- a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeStoneJson.kt +++ /dev/null @@ -1,63 +0,0 @@ -package at.hannibal2.skyhanni.data.jsonobjects.repo.neu - -import at.hannibal2.skyhanni.utils.LorenzRarity -import at.hannibal2.skyhanni.utils.NEUInternalName -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName - -data class NeuReforgeStoneJson( - @Expose val internalName: NEUInternalName, - @Expose val reforgeName: String, - @Expose @SerializedName("itemTypes") val rawItemTypes: Any, - @Expose val requiredRarities: List, - @Expose val reforgeCosts: Map, - @Expose val reforgeStats: Map>, - @Expose @SerializedName("reforgeAbility") val rawReforgeAbility: Any?, -) { - - private lateinit var reforgeAbilityField: Map - - val reforgeAbility - get() = if (this::reforgeAbilityField.isInitialized) reforgeAbilityField - else { - reforgeAbilityField = when (this.rawReforgeAbility) { - is String -> { - this.requiredRarities.associateWith { this.rawReforgeAbility } - } - - is Map<*, *> -> (this.rawReforgeAbility as? Map)?.mapKeys { - LorenzRarity.valueOf( - it.key.uppercase().replace(" ", "_") - ) - } ?: emptyMap() - - else -> emptyMap() - } - reforgeAbilityField - } - - /* used in ReforgeAPI which isn't in beta yet - val itemType: Pair> by lazy { - val any = this.rawItemTypes - return@lazy when (any) { - is String -> { - any.replace("/", "_AND_").uppercase() to emptyList() - } - - is Map<*, *> -> { - val type = "SPECIAL_ITEMS" - val map = any as? Map> ?: return@lazy type to emptyList() - val internalNames = map["internalName"]?.map { it.asInternalName() } ?: emptyList() - val itemType = map["itemid"]?.map { - NEUItems.getInternalNamesForItemId(Item.getByNameOrId(it)) - }?.flatten() - ?: emptyList() - type to (internalNames + itemType) - } - - else -> throw IllegalStateException() - } - } -*/ -} - diff --git a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt new file mode 100644 index 000000000..161ec76f5 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt @@ -0,0 +1,80 @@ +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::class.java), Map { + 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) = SkyblockStatList().apply { + for ((key, value) in list) { + this[key] = value + } + } + } +} + -- cgit