blob: cc904a081679b7d37f55c944515abc0e62563e36 (
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
|
package at.hannibal2.skyhanni.features.event.hoppity
import at.hannibal2.skyhanni.data.jsonobjects.repo.neu.NeuHoppityJson
import at.hannibal2.skyhanni.events.NeuRepositoryReloadEvent
import at.hannibal2.skyhanni.features.event.hoppity.HoppityCollectionStats.RabbitCollectionRarity
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
@SkyHanniModule
object HoppityCollectionData {
private val rabbitRarities = mutableMapOf<String, RabbitCollectionRarity>()
private val rarityBonuses = mutableMapOf<RabbitCollectionRarity, ChocolateBonuses>()
private val specialBonuses = mutableMapOf<String, ChocolateBonuses>()
val knownRabbitCount
get() = rabbitRarities.size
fun getRarity(rabbit: String): RabbitCollectionRarity? {
val apiName = rabbit.toApiName()
return rabbitRarities[apiName]
}
fun knownRabbitsOfRarity(rarity: RabbitCollectionRarity): Int =
rabbitRarities.filterValues { it == rarity }.count()
fun isKnownRabbit(rabbit: String) = rabbitRarities.contains(rabbit.toApiName())
fun getChocolateBonuses(rabbit: String): ChocolateBonuses {
val apiName = rabbit.toApiName()
val rarity = rabbitRarities[apiName]
return specialBonuses[apiName]
?: rarityBonuses[rarity]
?: ChocolateBonuses(0, 0.0)
}
private fun String.toApiName(): String = when (this) {
"Fish the Rabbit" -> "fish"
else -> lowercase().replace("[- ]".toRegex(), "_")
}
@SubscribeEvent
fun onNeuRepoReload(event: NeuRepositoryReloadEvent) {
rabbitRarities.clear()
rarityBonuses.clear()
specialBonuses.clear()
val data = event.readConstant<NeuHoppityJson>("hoppity").hoppity
for ((rarityString, rarityData) in data.rarities.entries) {
val rarity = RabbitCollectionRarity.valueOf(rarityString.uppercase())
for (rabbit in rarityData.rabbits) {
rabbitRarities[rabbit] = rarity
}
rarityBonuses[rarity] = ChocolateBonuses(rarityData.chocolate, rarityData.multiplier)
}
data.special.forEach { (rabbit, data) ->
specialBonuses[rabbit] = ChocolateBonuses(data.chocolate, data.multiplier)
}
}
data class ChocolateBonuses(val chocolate: Int, val multiplier: Double)
}
|