43 lines
1.4 KiB
Java
43 lines
1.4 KiB
Java
package com.alttd.fishingevent.objects;
|
|
|
|
import java.util.*;
|
|
|
|
public class RarityManager {
|
|
|
|
private final HashMap<FishType, SortedSet<Rarity>> rarityMap;
|
|
private final HashMap<FishType, Integer> rarityChanceMap;
|
|
|
|
public RarityManager(Set<Rarity> rarities) {
|
|
rarityMap = new HashMap<>();
|
|
rarities.forEach(rarity ->
|
|
rarity.fishTypes().forEach(fishType ->
|
|
rarityMap.computeIfAbsent(fishType, k -> new TreeSet<>(Comparator.comparing(Rarity::rarityValue))).add(rarity)
|
|
)
|
|
);
|
|
|
|
rarityChanceMap = new HashMap<>();
|
|
rarities.forEach(rarity ->
|
|
rarity.fishTypes().forEach(fishType ->
|
|
rarityChanceMap.compute(fishType, (k, v) -> v == null ? rarity.chance() : v + rarity.chance())
|
|
)
|
|
);
|
|
}
|
|
|
|
public Optional<Rarity> getRarityFromNumber(FishType fishType, int random) {
|
|
SortedSet<Rarity> rarities = rarityMap.get(fishType);
|
|
if (rarities == null)
|
|
return Optional.empty();
|
|
for (Rarity rarity : rarities) {
|
|
random -= rarity.chance();
|
|
if (random <= 0)
|
|
return Optional.of(rarity);
|
|
}
|
|
return Optional.empty();
|
|
}
|
|
|
|
public int getMaxChanceRange(FishType fishType) {
|
|
return rarityChanceMap.getOrDefault(fishType, 0);
|
|
}
|
|
|
|
}
|