package emu.grasscutter.game.tower; import emu.grasscutter.Grasscutter; import emu.grasscutter.data.GameData; import emu.grasscutter.data.def.TowerScheduleData; import emu.grasscutter.server.game.GameServer; import java.io.FileReader; import java.util.List; public class TowerScheduleManager { private final GameServer gameServer; public GameServer getGameServer() { return gameServer; } public TowerScheduleManager(GameServer gameServer) { this.gameServer = gameServer; this.load(); } private TowerScheduleConfig towerScheduleConfig; public synchronized void load(){ try (FileReader fileReader = new FileReader(Grasscutter.getConfig().DATA_FOLDER + "TowerSchedule.json")) { towerScheduleConfig = Grasscutter.getGsonFactory().fromJson(fileReader, TowerScheduleConfig.class); } catch (Exception e) { Grasscutter.getLogger().error("Unable to load tower schedule config.", e); } } public TowerScheduleConfig getTowerScheduleConfig() { return towerScheduleConfig; } public TowerScheduleData getCurrentTowerScheduleData(){ var data = GameData.getTowerScheduleDataMap().get(towerScheduleConfig.getScheduleId()); if(data == null){ Grasscutter.getLogger().error("Could not get current tower schedule data by config:{}", towerScheduleConfig); } return data; } public List getScheduleFloors() { return getCurrentTowerScheduleData().getSchedules().get(0).getFloorList(); } public int getNextFloorId(int floorId){ var entranceFloors = getCurrentTowerScheduleData().getEntranceFloorId(); var scheduleFloors = getScheduleFloors(); var nextId = 0; // find in entrance floors first for(int i=0;i