package emu.grasscutter.data; import emu.grasscutter.Grasscutter; import emu.grasscutter.data.ResourceLoader.AvatarConfig; import emu.grasscutter.data.excels.reliquary.ReliquaryAffixData; import emu.grasscutter.data.excels.reliquary.ReliquaryMainPropData; import emu.grasscutter.game.managers.blossom.BlossomConfig; import emu.grasscutter.game.world.SpawnDataEntry; import emu.grasscutter.utils.WeightedList; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import lombok.Getter; import lombok.Setter; public class GameDepot { public static final int[] BLOCK_SIZE = new int[] {50, 500}; // Scales private static final Int2ObjectMap> relicRandomMainPropDepot = new Int2ObjectOpenHashMap<>(); private static final Int2ObjectMap> relicMainPropDepot = new Int2ObjectOpenHashMap<>(); private static final Int2ObjectMap> relicAffixDepot = new Int2ObjectOpenHashMap<>(); @Getter @Setter private static Map playerAbilities = new HashMap<>(); @Getter private static final HashMap> spawnLists = new HashMap<>(); @Getter @Setter private static BlossomConfig blossomConfig; public static void load() { for (ReliquaryMainPropData data : GameData.getReliquaryMainPropDataMap().values()) { if (data.getWeight() <= 0 || data.getPropDepotId() <= 0) { continue; } List list = relicMainPropDepot.computeIfAbsent(data.getPropDepotId(), k -> new ArrayList<>()); list.add(data); WeightedList weightedList = relicRandomMainPropDepot.computeIfAbsent( data.getPropDepotId(), k -> new WeightedList<>()); weightedList.add(data.getWeight(), data); } for (ReliquaryAffixData data : GameData.getReliquaryAffixDataMap().values()) { if (data.getWeight() <= 0 || data.getDepotId() <= 0) { continue; } List list = relicAffixDepot.computeIfAbsent(data.getDepotId(), k -> new ArrayList<>()); list.add(data); } // Let the server owner know if theyre missing weights if (relicMainPropDepot.size() == 0 || relicAffixDepot.size() == 0) { Grasscutter.getLogger() .error( "Relic properties are missing weights! Please check your ReliquaryMainPropExcelConfigData or ReliquaryAffixExcelConfigData files in your ExcelBinOutput folder."); } } public static ReliquaryMainPropData getRandomRelicMainProp(int depot) { WeightedList depotList = relicRandomMainPropDepot.get(depot); if (depotList == null) { return null; } return depotList.next(); } public static List getRelicMainPropList(int depot) { return relicMainPropDepot.get(depot); } public static List getRelicAffixList(int depot) { return relicAffixDepot.get(depot); } public static void addSpawnListById( HashMap> data) { spawnLists.putAll(data); } }