diff --git a/src/main/java/fr/openmc/core/OMCRegistry.java b/src/main/java/fr/openmc/core/OMCRegistry.java index 8739d01a9..e0859966d 100644 --- a/src/main/java/fr/openmc/core/OMCRegistry.java +++ b/src/main/java/fr/openmc/core/OMCRegistry.java @@ -5,6 +5,7 @@ import fr.openmc.core.bootstrap.registries.LifecycleRegistry; import fr.openmc.core.bootstrap.registries.RegistryContext; import fr.openmc.core.bootstrap.registries.RegistryLoadingType; +import fr.openmc.core.features.events.contents.weeklyevents.WeeklyEventsRegistry; import fr.openmc.core.registry.ambient.CustomAmbientRegistry; import fr.openmc.core.registry.enchantments.CustomEnchantmentRegistry; import fr.openmc.core.registry.items.CustomItemRegistry; @@ -20,7 +21,7 @@ @SuppressWarnings("UnstableApiUsage") public final class OMCRegistry { - + // * Registre globaux public static CustomItemRegistry CUSTOM_ITEMS; public static CustomMobRegistry CUSTOM_MOBS; public static CustomEnchantmentRegistry CUSTOM_ENCHANTS; @@ -28,6 +29,9 @@ public final class OMCRegistry { public static CustomAmbientRegistry CUSTOM_AMBIENTS; public static CustomLootboxRegistry CUSTOM_LOOTBOXES; + // * Registre des features + public static WeeklyEventsRegistry WEEKLY_EVENTS; + private static final List LOADED = new ArrayList<>(); private static final List ALL = List.of( @@ -47,6 +51,8 @@ public final class OMCRegistry { () -> CUSTOM_LOOTBOXES = new CustomLootboxRegistry(), RegistryLoadingType.AFTER_IA), new RegistryContext(() -> CUSTOM_MOBS = new CustomMobRegistry(), + RegistryLoadingType.AFTER_IA), + new RegistryContext(() -> WEEKLY_EVENTS = new WeeklyEventsRegistry(), RegistryLoadingType.AFTER_IA) ); diff --git a/src/main/java/fr/openmc/core/features/events/EventsManager.java b/src/main/java/fr/openmc/core/features/events/EventsManager.java index 5d1c0a0eb..c2424bf0d 100644 --- a/src/main/java/fr/openmc/core/features/events/EventsManager.java +++ b/src/main/java/fr/openmc/core/features/events/EventsManager.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.events; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.bootstrap.features.Feature; import fr.openmc.core.bootstrap.features.types.HasCommands; import fr.openmc.core.bootstrap.features.types.LoadAfterItemsAdder; @@ -60,9 +61,19 @@ public int getWeekOffset() { return weekOffset; } + @Override + public String getId() { + return "omc_weekly_event:unknown_event_" + weekOffset; + } + @Override public List getPhases() { return List.of(new WeeklyEventPhase() { + @Override + public String getId() { + return "unknown_phase"; + } + @Override public Component getName() { return TranslationManager.translation("feature.events.calendar.unknown_phase"); @@ -132,7 +143,7 @@ private static LocalDateTime getEventStartDate(Event event) { public static List getAllEventsRegistred() { List events = new ArrayList<>(DailyEventsManager.EVENTS); - events.addAll(WeeklyEventsManager.EVENTS); + events.addAll(OMCRegistry.WEEKLY_EVENTS.values()); return events; } diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/WeeklyEventsManager.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/WeeklyEventsManager.java index 6307aa520..8dccea4b8 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/WeeklyEventsManager.java +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/WeeklyEventsManager.java @@ -5,17 +5,16 @@ import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import fr.openmc.core.OMCPlugin; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.bootstrap.features.Feature; import fr.openmc.core.bootstrap.features.annotations.Credit; import fr.openmc.core.bootstrap.features.types.HasDatabase; import fr.openmc.core.bootstrap.features.types.LoadAfterItemsAdder; import fr.openmc.core.bootstrap.integration.OMCLogger; -import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.Contest; import fr.openmc.core.features.events.contents.weeklyevents.models.WeeklyEvent; import fr.openmc.core.features.events.contents.weeklyevents.models.WeeklyEventPhase; import fr.openmc.core.features.events.contents.weeklyevents.models.WeeklyEventsData; import fr.openmc.core.utils.text.DateUtils; -import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.scheduler.BukkitTask; @@ -27,29 +26,17 @@ @Credit(developers = {"iambibi_"}) public class WeeklyEventsManager extends Feature implements LoadAfterItemsAdder, HasDatabase { - public static final List EVENTS = List.of( - new Contest() - ); - private static Dao dao; private static WeeklyEventsData data; private static BukkitTask currentTask = null; /** * Initialise la gestion des WeeklyEvents. - * Au restart : si on est déjà le bon jour pour la phase courante et que l'event - * était actif, on relance l'action immédiatement. */ @Override public void init() { data = load(); - WeeklyEventPhase currentPhase = getCurrentPhase(); - if (data.isActive() && currentPhase != null && DateUtils.getCurrentDayOfWeek().equals(currentPhase.getStartDay())) { - runPhase(currentPhase); - return; - } - scheduleNextPhase(); } @@ -69,7 +56,8 @@ public static WeeklyEventsData load() { try { WeeklyEventsData data = dao.queryForId(1); if (data == null) { - data = new WeeklyEventsData(0, 0); + WeeklyEvent contest = OMCRegistry.WEEKLY_EVENTS.CONTEST; + data = new WeeklyEventsData(contest, null); dao.create(data); } return data; @@ -93,17 +81,7 @@ public static void save(WeeklyEventsData data) { * Retourne l'event en cours. */ public static WeeklyEvent getCurrentEvent() { - return EVENTS.get(data.getCurrentEventIndex()); - } - - /** - * Retourne l'instance de WeeklyEvent correspondant à la classe donnée, ou null si introuvable. - */ - public static WeeklyEvent getEvent(Class eventClass) { - return EVENTS.stream() - .filter(event -> event.getClass().equals(eventClass)) - .findFirst() - .orElse(null); + return OMCRegistry.WEEKLY_EVENTS.get(data.getCurrentEvent()).orElse(null); } /** @@ -111,9 +89,11 @@ public static WeeklyEvent getEvent(Class eventClass) { */ public static WeeklyEventPhase getCurrentPhase() { List phases = getCurrentEvent().getPhases(); - int index = data.getCurrentPhaseIndex(); - if (index < 0 || index >= phases.size()) return null; - return phases.get(index); + String phaseId = data.getCurrentPhase(); + return phases.stream() + .filter(phase -> phase.getId().equals(phaseId)) + .findFirst() + .orElse(null); } /** @@ -146,21 +126,23 @@ public static void scheduleNextPhase() { 0 ) * 20L; - if (delayTicks <= 0) { - runPhase(nextPhase); + if (delayTicks < 0) { + runPhase(getCurrentEvent(), nextPhase); + OMCLogger.infoFormatted("Phase passée ({}) de l'évenement weekly ({}) car il devrait etre passé)", nextPhase.getId(), + getCurrentEvent().getId()); return; } - OMCLogger.infoFormatted("Prochaine Phase ({}) de l'évenement weekly ({}) le" + OMCLogger.infoFormatted("Prochaine Phase ({}) de l'évenement weekly ({}) le " + nextPhase.getStartDay().getDisplayName(TextStyle.FULL_STANDALONE, Locale.FRENCH) + " " - + nextPhase.getStartHour() + "h" + nextPhase.getStartMinutes() + "m " - + " (dans " + DateUtils.convertSecondToTime(DateUtils.getSecondsUntilDayOfWeekTime( + + nextPhase.getStartHour() + "h " + nextPhase.getStartMinutes() + "m " + + "(dans " + DateUtils.convertSecondToTime(DateUtils.getSecondsUntilDayOfWeekTime( nextPhase.getStartDay(), nextPhase.getStartHour(), nextPhase.getStartMinutes(), 0 - )) + ")", PlainTextComponentSerializer.plainText().serialize(nextPhase.getName()), - PlainTextComponentSerializer.plainText().serialize(getCurrentEvent().getName())); + )) + ")", nextPhase.getId(), + getCurrentEvent().getId()); currentTask = Bukkit.getScheduler().runTaskLater(OMCPlugin.getInstance(), () -> { @@ -168,7 +150,7 @@ public static void scheduleNextPhase() { scheduleNextPhase(); return; } - runPhase(nextPhase); + runPhase(getCurrentEvent(), nextPhase); }, delayTicks); } @@ -176,35 +158,22 @@ public static void scheduleNextPhase() { * Exécute l'action de la phase, marque l'event comme actif, * avance l'état, puis schedule la suivante. */ - private static void runPhase(WeeklyEventPhase phase) { + private static void runPhase(WeeklyEvent event, WeeklyEventPhase phase) { + data.setCurrentEvent(event.getId()); + data.setCurrentPhase(phase.getId()); data.setActive(true); save(data); - advancePhase(); + if (event.getNextPhase(phase).isEmpty()) + advanceToNextEvent(); + scheduleNextPhase(); try { Runnable action = phase.runAction(); if (action != null) action.run(); } catch (Exception e) { - OMCLogger.error("Erreur lors de l'exécution de la phase {}", - PlainTextComponentSerializer.plainText().serialize(phase.getName()), e); - } - } - - /** - * Avance à la phase suivante. - * Si c'était la dernière phase, passe à l'event suivant (et marque inactif). - */ - private static void advancePhase() { - List phases = getCurrentEvent().getPhases(); - int nextPhaseIndex = data.getCurrentPhaseIndex() + 1; - - if (nextPhaseIndex >= phases.size()) { - advanceToNextEvent(); - } else { - data.setCurrentPhaseIndex(nextPhaseIndex); - save(data); + OMCLogger.error("Erreur lors de l'exécution de la phase {}", phase.getId(), e); } } @@ -214,33 +183,37 @@ private static void advancePhase() { * puis reschedule proprement. */ public static void forceEventAtPhase(WeeklyEvent event, WeeklyEventPhase phase) { - int eventIndex = EVENTS.indexOf(event); - int phaseIndex = event.getPhases().indexOf(phase); - - if (eventIndex == -1 || phaseIndex == -1) { + if (event == null || phase == null || !event.hasPhase(phase)) { OMCLogger.error("[WeeklyEvents] Event ou phase non trouvé"); return; } + data.setCurrentEvent(event.getId()); + data.setCurrentPhase(phase.getId()); + save(data); + OMCLogger.info("[WeeklyEvents] Event forcé : {} à la phase {}", - PlainTextComponentSerializer.plainText().serialize(event.getName()), - PlainTextComponentSerializer.plainText().serialize(phase.getName())); + event.getId(), + phase.getId()); - runPhase(phase); + runPhase(event, phase); } /** * Passe à l'event suivant, réinitialise la phase à 0 et marque l'event comme inactif. */ private static void advanceToNextEvent() { + WeeklyEvent current = getCurrentEvent(); + WeeklyEvent next = OMCRegistry.WEEKLY_EVENTS.getNextEvent(current) + .orElseThrow(() -> new IllegalStateException("Aucun event enregistré")); + data.setActive(false); - int nextIndex = (data.getCurrentEventIndex() + 1) % EVENTS.size(); - data.setCurrentEventIndex(nextIndex); - data.setCurrentPhaseIndex(0); + data.setCurrentEvent(next.getId()); + data.setCurrentPhase(null); save(data); OMCLogger.info("[WeeklyEvents] Passage à l'event suivant : {}", - PlainTextComponentSerializer.plainText().serialize(getCurrentEvent().getName())); + next.getId()); } /** @@ -248,27 +221,13 @@ private static void advanceToNextEvent() { * Commence à la phase courante de l'event courant, puis les events suivants depuis 0. */ private static WeeklyEventPhase findNextPhase() { - int totalEvents = EVENTS.size(); - - for (int i = 0; i < totalEvents; i++) { - int eventIdx = (data.getCurrentEventIndex() + i) % totalEvents; - WeeklyEvent event = EVENTS.get(eventIdx); - List phases = event.getPhases(); - - int phaseStart = (i == 0) ? (data.getCurrentPhaseIndex() + 1) : 0; - - for (int j = phaseStart; j < phases.size(); j++) { - WeeklyEventPhase phase = phases.get(j); - long delay = DateUtils.getSecondsUntilDayOfWeekTime( - phase.getStartDay(), - phase.getStartHour(), - phase.getStartMinutes(), - 0 - ); - if (delay >= 0) return phase; - } - } + WeeklyEvent event = getCurrentEvent(); + WeeklyEventPhase current = getCurrentPhase(); + + if (current == null) return event.getFirstPhase(); - return null; + return event.getNextPhase(current) + .or(() -> OMCRegistry.WEEKLY_EVENTS.getNextEvent(event).map(WeeklyEvent::getFirstPhase)) + .orElse(null); } } \ No newline at end of file diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/WeeklyEventsRegistry.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/WeeklyEventsRegistry.java new file mode 100644 index 000000000..3fd4d51e9 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/WeeklyEventsRegistry.java @@ -0,0 +1,34 @@ +package fr.openmc.core.features.events.contents.weeklyevents; + +import fr.openmc.core.bootstrap.registries.KeyedRegistry; +import fr.openmc.core.bootstrap.registries.Registry; +import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.Contest; +import fr.openmc.core.features.events.contents.weeklyevents.models.WeeklyEvent; + +import java.util.List; +import java.util.Optional; + +public class WeeklyEventsRegistry extends Registry + implements KeyedRegistry { + + public final WeeklyEvent CONTEST = register(new Contest()); + + @Override + public String key(WeeklyEvent registryObject) { + return registryObject.getId(); + } + + public WeeklyEvent getEvent(Class eventClass) { + return entries.values().stream() + .filter(weeklyEvent -> weeklyEvent.getClass().equals(eventClass)) + .findFirst() + .orElse(null); + } + + public Optional getNextEvent(WeeklyEvent current) { + List events = values().stream().toList(); + int index = events.indexOf(current); + if (index == -1) return Optional.empty(); + return Optional.of(events.get((index + 1) % events.size())); + } +} diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/Contest.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/Contest.java index 12bbc35a3..d66e9e9f3 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/Contest.java +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/Contest.java @@ -30,6 +30,11 @@ public ItemStack getIcon() { return OMCRegistry.CUSTOM_ITEMS.CONTEST_SHELL.getBest(); } + @Override + public String getId() { + return "omc_contest:contest"; + } + @Override public List getPhases() { return Arrays.stream(ContestPhase.values()).map(ContestPhase::getPhase).toList(); diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/ContestPhase.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/ContestPhase.java index 698305a38..6a6f3c785 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/ContestPhase.java +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/ContestPhase.java @@ -12,6 +12,11 @@ @Getter public enum ContestPhase { VOTE_CAMP(new WeeklyEventPhase() { + @Override + public String getId() { + return "omc_contest:vote_camp"; + } + @Override public Component getName() { return TranslationManager.translation("feature.events.contest.phase.vote.name"); @@ -43,6 +48,11 @@ public Runnable runAction() { } }), TRADE_PHASE(new WeeklyEventPhase() { + @Override + public String getId() { + return "omc_contest:trade_phase"; + } + @Override public Component getName() { return TranslationManager.translation("feature.events.contest.phase.trade.name"); @@ -74,6 +84,11 @@ public Runnable runAction() { } }), END_PHASE(new WeeklyEventPhase() { + @Override + public String getId() { + return "omc_contest:end_phase"; + } + @Override public Component getName() { return TranslationManager.translation("feature.events.contest.phase.end.name"); @@ -86,7 +101,7 @@ public List getDescription() { @Override public DayOfWeek getStartDay() { - return DayOfWeek.MONDAY; + return DayOfWeek.SUNDAY; } @Override diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/commands/ContestCommand.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/commands/ContestCommand.java index a09e2cac9..a54637b52 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/commands/ContestCommand.java +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/contents/contest/commands/ContestCommand.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.events.contents.weeklyevents.contents.contest.commands; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.commands.autocomplete.OnlinePlayerAutoComplete; import fr.openmc.core.features.events.contents.weeklyevents.WeeklyEventsManager; import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.Contest; @@ -12,6 +13,7 @@ import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.managers.TradeYMLManager; import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.menu.ContributionMenu; import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.menu.VoteMenu; +import fr.openmc.core.features.events.contents.weeklyevents.models.WeeklyEvent; import fr.openmc.core.features.events.contents.weeklyevents.models.WeeklyEventPhase; import fr.openmc.core.utils.text.DateUtils; import fr.openmc.core.utils.text.messages.MessageType; @@ -36,7 +38,7 @@ public class ContestCommand { @Cooldown(4) @CommandPlaceholder() public static void mainCommand(Player player) { - Contest contest = (Contest) WeeklyEventsManager.getEvent(Contest.class); + WeeklyEvent contest = OMCRegistry.WEEKLY_EVENTS.getEvent(Contest.class); if (!contest.isActive()) { int days = (ContestPhase.VOTE_CAMP.getPhase().getStartDay().getValue() @@ -69,7 +71,9 @@ public static void mainCommand(Player player) { @Description("Permet de lancer une procédure de phase") @CommandPermission("omc.admin.commands.contest.setphase") public void setPhase(@Named("phase") @SuggestWith(ContestPhaseAutoComplete.class) String phase) { - WeeklyEventsManager.forceEventAtPhase(WeeklyEventsManager.getEvent(Contest.class), ContestPhase.valueOf(phase).getPhase()); + WeeklyEventsManager.forceEventAtPhase( + OMCRegistry.WEEKLY_EVENTS.getEvent(Contest.class), + ContestPhase.valueOf(phase).getPhase()); } @Subcommand("setcontest") @@ -82,7 +86,7 @@ public void setContest( @Named("nom du camp 2") String camp2, @Named("couleur du camp 2") @SuggestWith(ColorContestAutoComplete.class) String color2 ) { - Contest contest = (Contest) WeeklyEventsManager.getEvent(Contest.class); + WeeklyEvent contest = OMCRegistry.WEEKLY_EVENTS.getEvent(Contest.class); if (!contest.isActive()) { MessagesManager.sendMessage(player, TranslationManager.translation("feature.events.contest.command.setcontest.not_active"), Prefix.STAFF, MessageType.ERROR, true); @@ -154,7 +158,7 @@ public void addPoints( @Named("membre") @SuggestWith(OnlinePlayerAutoComplete.class) Player target, @Named("points") Integer points ) { - Contest contest = (Contest) WeeklyEventsManager.getEvent(Contest.class); + WeeklyEvent contest = OMCRegistry.WEEKLY_EVENTS.getEvent(Contest.class); if (contest.getActivePhase() != ContestPhase.TRADE_PHASE.getPhase()) { MessagesManager.sendMessage(player, TranslationManager.translation("feature.events.contest.command.addpoints.not_started"), Prefix.STAFF, MessageType.ERROR, true); diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEvent.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEvent.java index 7cacae58a..194168b15 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEvent.java +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEvent.java @@ -4,8 +4,10 @@ import fr.openmc.core.features.events.models.Event; import java.util.List; +import java.util.Optional; public abstract class WeeklyEvent extends Event { + public abstract String getId(); public abstract List getPhases(); /** @@ -24,6 +26,26 @@ public WeeklyEventPhase getActivePhase() { return WeeklyEventsManager.getCurrentPhase(); } + /** + * Retourne la premiere phase de l'event + * @return un WeeklyEventPhase + */ + public WeeklyEventPhase getFirstPhase() { + return getPhases().getFirst(); + } + + public Optional getNextPhase(WeeklyEventPhase current) { + List phases = getPhases(); + int index = phases.indexOf(current); + if (index == -1 || index + 1 >= phases.size()) return Optional.empty(); + + return Optional.of(phases.get(index + 1)); + } + + public boolean hasPhase(WeeklyEventPhase phase) { + return getPhases().contains(phase); + } + /** * Retourne le nombre de semaines d'offset entre la semaine actuelle et la semaine de référence pour cet event. * Utile pour prédire les événements lointin diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEventPhase.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEventPhase.java index 31db7af69..8734e155c 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEventPhase.java +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEventPhase.java @@ -6,6 +6,7 @@ import java.util.List; public abstract class WeeklyEventPhase { + public abstract String getId(); public abstract Component getName(); public abstract List getDescription(); public abstract DayOfWeek getStartDay(); diff --git a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEventsData.java b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEventsData.java index c68f3772a..760cecf20 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEventsData.java +++ b/src/main/java/fr/openmc/core/features/events/contents/weeklyevents/models/WeeklyEventsData.java @@ -13,12 +13,12 @@ public class WeeklyEventsData { private int id = 1; @Setter - @DatabaseField(columnName = "current_event_index") - private int currentEventIndex; + @DatabaseField(columnName = "current_event") + private String currentEvent; @Setter - @DatabaseField(columnName = "current_phase_index") - private int currentPhaseIndex; + @DatabaseField(columnName = "current_phase") + private String currentPhase; @Setter @DatabaseField(columnName = "is_active") @@ -26,8 +26,11 @@ public class WeeklyEventsData { public WeeklyEventsData() {} - public WeeklyEventsData(int currentEventIndex, int currentPhaseIndex) { - this.currentEventIndex = currentEventIndex; - this.currentPhaseIndex = currentPhaseIndex; + public WeeklyEventsData(WeeklyEvent currentEvent, WeeklyEventPhase currentPhase) { + this.currentEvent = currentEvent.getId(); + if (currentPhase == null) + this.currentPhase = null; + else + this.currentPhase = currentPhase.getId(); } }