From 2dd1d451a5a890f992cbf5dbb2561b7d6b31e14f Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:18:23 +0200 Subject: [PATCH 1/6] chore: rewrite weekly event and phase, id + registry WeeklyEvent --- src/main/java/fr/openmc/core/OMCRegistry.java | 8 +- .../core/features/events/EventsManager.java | 13 ++- .../weeklyevents/WeeklyEventsManager.java | 98 +++++++------------ .../weeklyevents/WeeklyEventsRegistry.java | 34 +++++++ .../contents/contest/Contest.java | 5 + .../contents/contest/ContestPhase.java | 15 +++ .../contest/commands/ContestCommand.java | 12 ++- .../weeklyevents/models/WeeklyEvent.java | 22 +++++ .../weeklyevents/models/WeeklyEventPhase.java | 1 + .../weeklyevents/models/WeeklyEventsData.java | 14 +-- 10 files changed, 149 insertions(+), 73 deletions(-) create mode 100644 src/main/java/fr/openmc/core/features/events/contents/weeklyevents/WeeklyEventsRegistry.java 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..e49e83bde 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,12 +5,12 @@ 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; @@ -27,10 +27,6 @@ @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; @@ -69,7 +65,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, contest.getPhases().getFirst()); dao.create(data); } return data; @@ -93,17 +90,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 +98,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); } /** @@ -159,8 +148,8 @@ public static void scheduleNextPhase() { 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(), () -> { @@ -197,15 +186,16 @@ private static void runPhase(WeeklyEventPhase phase) { * 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); - } + WeeklyEvent event = getCurrentEvent(); + WeeklyEventPhase current = getCurrentPhase(); + + event.getNextPhase(current).ifPresentOrElse( + next -> { + data.setCurrentPhase(next.getId()); + save(data); + }, + WeeklyEventsManager::advanceToNextEvent + ); } /** @@ -214,14 +204,15 @@ 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())); @@ -233,14 +224,17 @@ public static void forceEventAtPhase(WeeklyEvent event, WeeklyEventPhase 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(next.getFirstPhase().getId()); save(data); OMCLogger.info("[WeeklyEvents] Passage à l'event suivant : {}", - PlainTextComponentSerializer.plainText().serialize(getCurrentEvent().getName())); + next.getId()); } /** @@ -248,27 +242,11 @@ 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(); - 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..127bc6487 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"); 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..4d2dba000 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,8 @@ 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(); + this.currentPhase = currentPhase.getId(); } } From 10ba247136c6f7194504b9ac27fb34cbe93e0ef4 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:35:45 +0200 Subject: [PATCH 2/6] fix: first phase skipped --- .../weeklyevents/WeeklyEventsManager.java | 28 +++++++++++-------- .../weeklyevents/models/WeeklyEventsData.java | 5 +++- 2 files changed, 20 insertions(+), 13 deletions(-) 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 e49e83bde..87d3fe467 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 @@ -15,7 +15,6 @@ 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; @@ -42,7 +41,7 @@ public void init() { WeeklyEventPhase currentPhase = getCurrentPhase(); if (data.isActive() && currentPhase != null && DateUtils.getCurrentDayOfWeek().equals(currentPhase.getStartDay())) { - runPhase(currentPhase); + runPhase(getCurrentEvent(), currentPhase); return; } @@ -66,7 +65,7 @@ public static WeeklyEventsData load() { WeeklyEventsData data = dao.queryForId(1); if (data == null) { WeeklyEvent contest = OMCRegistry.WEEKLY_EVENTS.CONTEST; - data = new WeeklyEventsData(contest, contest.getPhases().getFirst()); + data = new WeeklyEventsData(contest, null); dao.create(data); } return data; @@ -136,7 +135,7 @@ public static void scheduleNextPhase() { ) * 20L; if (delayTicks <= 0) { - runPhase(nextPhase); + runPhase(getCurrentEvent(), nextPhase); return; } @@ -157,7 +156,7 @@ public static void scheduleNextPhase() { scheduleNextPhase(); return; } - runPhase(nextPhase); + runPhase(getCurrentEvent(), nextPhase); }, delayTicks); } @@ -165,7 +164,9 @@ 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); @@ -176,8 +177,7 @@ private static void runPhase(WeeklyEventPhase phase) { 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); + OMCLogger.error("Erreur lors de l'exécution de la phase {}", phase.getId(), e); } } @@ -214,10 +214,10 @@ public static void forceEventAtPhase(WeeklyEvent event, WeeklyEventPhase phase) 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); } /** @@ -230,7 +230,7 @@ private static void advanceToNextEvent() { data.setActive(false); data.setCurrentEvent(next.getId()); - data.setCurrentPhase(next.getFirstPhase().getId()); + data.setCurrentPhase(null); save(data); OMCLogger.info("[WeeklyEvents] Passage à l'event suivant : {}", @@ -245,6 +245,10 @@ private static WeeklyEventPhase findNextPhase() { WeeklyEvent event = getCurrentEvent(); WeeklyEventPhase current = getCurrentPhase(); + if (current == null) { + return event.getFirstPhase(); + } + return event.getNextPhase(current) .or(() -> OMCRegistry.WEEKLY_EVENTS.getNextEvent(event).map(WeeklyEvent::getFirstPhase)) .orElse(null); 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 4d2dba000..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 @@ -28,6 +28,9 @@ public WeeklyEventsData() {} public WeeklyEventsData(WeeklyEvent currentEvent, WeeklyEventPhase currentPhase) { this.currentEvent = currentEvent.getId(); - this.currentPhase = currentPhase.getId(); + if (currentPhase == null) + this.currentPhase = null; + else + this.currentPhase = currentPhase.getId(); } } From 0c7bad3356b93bf6e2e28f9ced2d555321a9210b Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:38:11 +0200 Subject: [PATCH 3/6] fix: typo --- .../events/contents/weeklyevents/WeeklyEventsManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 87d3fe467..a666e9159 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 @@ -139,10 +139,10 @@ public static void scheduleNextPhase() { 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(), From f821fa067064d2e7af5b99cd66f79392f8c1b71f Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:39:29 +0200 Subject: [PATCH 4/6] wait: friday ahahah for test --- .../weeklyevents/contents/contest/ContestPhase.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 127bc6487..a0bafe1e9 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 @@ -29,7 +29,7 @@ public List getDescription() { @Override public DayOfWeek getStartDay() { - return DayOfWeek.FRIDAY; + return DayOfWeek.WEDNESDAY; } @Override @@ -65,7 +65,7 @@ public List getDescription() { @Override public DayOfWeek getStartDay() { - return DayOfWeek.SATURDAY; + return DayOfWeek.THURSDAY; } @Override @@ -101,7 +101,7 @@ public List getDescription() { @Override public DayOfWeek getStartDay() { - return DayOfWeek.MONDAY; + return DayOfWeek.FRIDAY; } @Override From 655de8dc63ff126df8b388a3aa091fd2f5e70fb8 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Tue, 11 Aug 2026 21:05:47 +0200 Subject: [PATCH 5/6] PUTAIN DE TODO ET DE FIX DE EDLAI --- .../core/features/chatanimations/ChatAnimationManager.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/chatanimations/ChatAnimationManager.java b/src/main/java/fr/openmc/core/features/chatanimations/ChatAnimationManager.java index 3f025aa74..8c0e9e3e1 100644 --- a/src/main/java/fr/openmc/core/features/chatanimations/ChatAnimationManager.java +++ b/src/main/java/fr/openmc/core/features/chatanimations/ChatAnimationManager.java @@ -33,9 +33,8 @@ @Credit(developers = {"iambibi_"}) public class ChatAnimationManager extends Feature implements LoadAfterItemsAdder, HasListeners { - //todo: changr valeur pour delay entre animationsXXss - private static final long MIN_DELAY_TICKS = 20 * 60 * 1L; // 20 min - private static final long MAX_DELAY_TICKS = 20 * 60 * 2L; // 30 min + private static final long MIN_DELAY_TICKS = 20 * 60 * 20L; // 20 min + private static final long MAX_DELAY_TICKS = 20 * 60 * 30L; // 30 min private Set ANIMATIONS; From 607e23607f2c527d433c5bee39a5dc61ef9facae Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Tue, 11 Aug 2026 21:09:39 +0200 Subject: [PATCH 6/6] PUTAIN DE TODO ET DE FIX DE EDLAI --- src/main/java/fr/openmc/core/features/bits/BitsManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/fr/openmc/core/features/bits/BitsManager.java b/src/main/java/fr/openmc/core/features/bits/BitsManager.java index fbf27dd65..14ebb9cba 100644 --- a/src/main/java/fr/openmc/core/features/bits/BitsManager.java +++ b/src/main/java/fr/openmc/core/features/bits/BitsManager.java @@ -26,7 +26,6 @@ import java.text.NumberFormat; import java.util.*; -// todo: shop de bits (menu qui va avec) @Credit(developers = {"iambibi_"}) public class BitsManager extends Feature implements HasDatabase, HasCommands { @Getter