package emu.grasscutter.data.excels; import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; import emu.grasscutter.data.GameResource; import emu.grasscutter.data.ResourceType; import emu.grasscutter.game.props.BattlePassMissionRefreshType; import emu.grasscutter.game.props.WatcherTriggerType; import emu.grasscutter.net.proto.BattlePassMissionOuterClass.BattlePassMission.MissionStatus; import lombok.Getter; @ResourceType(name = {"BattlePassMissionExcelConfigData.json"}) @Getter public class BattlePassMissionData extends GameResource { @Getter(onMethod = @__(@Override)) private int id; private int addPoint; private int scheduleId; private int progress; private TriggerConfig triggerConfig; private BattlePassMissionRefreshType refreshType; private transient Set mainParams; public WatcherTriggerType getTriggerType() { return this.getTriggerConfig().getTriggerType(); } public boolean isCycleRefresh() { return getRefreshType() == null || getRefreshType() == BattlePassMissionRefreshType.BATTLE_PASS_MISSION_REFRESH_CYCLE_CROSS_SCHEDULE; } public boolean isValidRefreshType() { return getRefreshType() == null || getRefreshType() == BattlePassMissionRefreshType.BATTLE_PASS_MISSION_REFRESH_CYCLE_CROSS_SCHEDULE || getScheduleId() == 2701; } @Override public void onLoad() { if (this.getTriggerConfig() != null && getTriggerConfig().getParamList()[0].length() > 0) { this.mainParams = Arrays.stream(getTriggerConfig().getParamList()[0].split("[:;,]")).map(Integer::parseInt).collect(Collectors.toSet()); } } @Getter public static class TriggerConfig { private WatcherTriggerType triggerType; private String[] paramList; } public emu.grasscutter.net.proto.BattlePassMissionOuterClass.BattlePassMission toProto() { var protoBuilder = emu.grasscutter.net.proto.BattlePassMissionOuterClass.BattlePassMission.newBuilder(); protoBuilder .setMissionId(getId()) .setTotalProgress(this.getProgress()) .setRewardBattlePassPoint(this.getAddPoint()) .setMissionStatus(MissionStatus.MISSION_STATUS_UNFINISHED) .setMissionType(this.getRefreshType() == null ? 0 : this.getRefreshType().getValue()); return protoBuilder.build(); } }