package com.alttd.fishingevent.objects; import java.util.*; public class RarityManager { private final HashMap> rarityMap; private final HashMap rarityChanceMap; public RarityManager(Set 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 getRarityFromNumber(FishType fishType, int random) { SortedSet 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); } }