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 01/13] 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 02/13] 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 03/13] 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 04/13] 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 05/13] 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 06/13] 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 From a6b489b370112f1ac7cb01e73ce1ef6419ecf281 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Wed, 12 Aug 2026 14:48:16 +0200 Subject: [PATCH 07/13] debug --- .../events/contents/weeklyevents/WeeklyEventsManager.java | 5 ++++- .../weeklyevents/contents/contest/ContestPhase.java | 6 +++--- 2 files changed, 7 insertions(+), 4 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 a666e9159..15c07db06 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 @@ -134,8 +134,10 @@ public static void scheduleNextPhase() { 0 ) * 20L; - if (delayTicks <= 0) { + 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; } @@ -186,6 +188,7 @@ private static void runPhase(WeeklyEvent event, WeeklyEventPhase phase) { * Si c'était la dernière phase, passe à l'event suivant (et marque inactif). */ private static void advancePhase() { + OMCLogger.info("[DEBUG] advancePhase: current avant = {}", data.getCurrentPhase()); WeeklyEvent event = getCurrentEvent(); WeeklyEventPhase current = getCurrentPhase(); 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 a0bafe1e9..d3eea953e 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.WEDNESDAY; + return DayOfWeek.THURSDAY; } @Override @@ -65,7 +65,7 @@ public List getDescription() { @Override public DayOfWeek getStartDay() { - return DayOfWeek.THURSDAY; + return DayOfWeek.FRIDAY; } @Override @@ -101,7 +101,7 @@ public List getDescription() { @Override public DayOfWeek getStartDay() { - return DayOfWeek.FRIDAY; + return DayOfWeek.SATURDAY; } @Override From e71cfb0dda51988f15e8e96a354be02c2ea967de Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Thu, 13 Aug 2026 11:16:28 +0200 Subject: [PATCH 08/13] fix: try --- .../weeklyevents/WeeklyEventsManager.java | 26 +++---------------- 1 file changed, 4 insertions(+), 22 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 15c07db06..8a60242a4 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 @@ -172,7 +172,9 @@ private static void runPhase(WeeklyEvent event, WeeklyEventPhase phase) { data.setActive(true); save(data); - advancePhase(); + if (event.getNextPhase(phase).isEmpty()) + advanceToNextEvent(); + scheduleNextPhase(); try { @@ -183,24 +185,6 @@ private static void runPhase(WeeklyEvent event, WeeklyEventPhase phase) { } } - /** - * Avance à la phase suivante. - * Si c'était la dernière phase, passe à l'event suivant (et marque inactif). - */ - private static void advancePhase() { - OMCLogger.info("[DEBUG] advancePhase: current avant = {}", data.getCurrentPhase()); - WeeklyEvent event = getCurrentEvent(); - WeeklyEventPhase current = getCurrentPhase(); - - event.getNextPhase(current).ifPresentOrElse( - next -> { - data.setCurrentPhase(next.getId()); - save(data); - }, - WeeklyEventsManager::advanceToNextEvent - ); - } - /** * Force un event à une phase spécifique. * Met à jour la BDD, exécute l'action, gère le cas dernière phase, @@ -248,9 +232,7 @@ private static WeeklyEventPhase findNextPhase() { WeeklyEvent event = getCurrentEvent(); WeeklyEventPhase current = getCurrentPhase(); - if (current == null) { - return event.getFirstPhase(); - } + if (current == null) return event.getFirstPhase(); return event.getNextPhase(current) .or(() -> OMCRegistry.WEEKLY_EVENTS.getNextEvent(event).map(WeeklyEvent::getFirstPhase)) From 8a27823b45b6e765310223d550af3d8e291b0599 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Thu, 13 Aug 2026 11:19:37 +0200 Subject: [PATCH 09/13] phases 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 d3eea953e..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 @@ -29,7 +29,7 @@ public List getDescription() { @Override public DayOfWeek getStartDay() { - return DayOfWeek.THURSDAY; + return DayOfWeek.FRIDAY; } @Override @@ -65,7 +65,7 @@ public List getDescription() { @Override public DayOfWeek getStartDay() { - return DayOfWeek.FRIDAY; + return DayOfWeek.SATURDAY; } @Override @@ -101,7 +101,7 @@ public List getDescription() { @Override public DayOfWeek getStartDay() { - return DayOfWeek.SATURDAY; + return DayOfWeek.SUNDAY; } @Override From 3739b5c5991489153a71da225358042bcbe472ec Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 14 Aug 2026 22:13:00 +0200 Subject: [PATCH 10/13] fix: inutile --- .../events/contents/weeklyevents/WeeklyEventsManager.java | 6 ------ 1 file changed, 6 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 8a60242a4..21c1b4f6b 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 @@ -39,12 +39,6 @@ public class WeeklyEventsManager extends Feature implements LoadAfterItemsAdder, public void init() { data = load(); - WeeklyEventPhase currentPhase = getCurrentPhase(); - if (data.isActive() && currentPhase != null && DateUtils.getCurrentDayOfWeek().equals(currentPhase.getStartDay())) { - runPhase(getCurrentEvent(), currentPhase); - return; - } - scheduleNextPhase(); } From cc22c070c5bb6a52252ce26f08cde0231145c869 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Fri, 14 Aug 2026 22:17:31 +0200 Subject: [PATCH 11/13] fix: inutile --- .../events/contents/weeklyevents/WeeklyEventsManager.java | 2 -- 1 file changed, 2 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 21c1b4f6b..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 @@ -32,8 +32,6 @@ public class WeeklyEventsManager extends Feature implements LoadAfterItemsAdder, /** * 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() { From ed214c528018543f73af4f642cc151f23281927b Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 15 Aug 2026 19:17:40 +0200 Subject: [PATCH 12/13] chore: OMCRegistry.DAILY_EVENTS, more clean, i love registry --- src/main/java/fr/openmc/core/OMCRegistry.java | 2 + .../core/features/events/EventsManager.java | 2 +- .../dailyevents/DailyEventsManager.java | 37 ++----------------- .../commands/DailyEventCommand.java | 3 +- .../autocomplete/DailyEventAutoComplete.java | 4 +- .../mobs/vampire/VampireBossLootManager.java | 3 +- .../bloodynight/menu/BloodyNightMenu.java | 2 +- .../goldenharvest/menu/GoldenHarvestMenu.java | 2 +- .../menu/MiraculousFishingMenu.java | 2 +- .../dailyevents/models/IncomingEventsDB.java | 4 +- 10 files changed, 17 insertions(+), 44 deletions(-) diff --git a/src/main/java/fr/openmc/core/OMCRegistry.java b/src/main/java/fr/openmc/core/OMCRegistry.java index e0859966d..da9732b22 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.dailyevents.DailyEventsRegistry; import fr.openmc.core.features.events.contents.weeklyevents.WeeklyEventsRegistry; import fr.openmc.core.registry.ambient.CustomAmbientRegistry; import fr.openmc.core.registry.enchantments.CustomEnchantmentRegistry; @@ -31,6 +32,7 @@ public final class OMCRegistry { // * Registre des features public static WeeklyEventsRegistry WEEKLY_EVENTS; + public static DailyEventsRegistry DAILY_EVENTS; private static final List LOADED = new ArrayList<>(); 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 c2424bf0d..f988763c4 100644 --- a/src/main/java/fr/openmc/core/features/events/EventsManager.java +++ b/src/main/java/fr/openmc/core/features/events/EventsManager.java @@ -142,7 +142,7 @@ private static LocalDateTime getEventStartDate(Event event) { } public static List getAllEventsRegistred() { - List events = new ArrayList<>(DailyEventsManager.EVENTS); + List events = new ArrayList<>(OMCRegistry.DAILY_EVENTS.values()); events.addAll(OMCRegistry.WEEKLY_EVENTS.values()); return events; } diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/DailyEventsManager.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/DailyEventsManager.java index 32c398862..cbe66fd7a 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/DailyEventsManager.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/DailyEventsManager.java @@ -5,18 +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.HasCommands; -import fr.openmc.core.bootstrap.features.types.HasDatabase; -import fr.openmc.core.bootstrap.features.types.HasListeners; -import fr.openmc.core.bootstrap.features.types.LoadAfterItemsAdder; import fr.openmc.core.bootstrap.features.types.*; import fr.openmc.core.bootstrap.integration.OMCLogger; import fr.openmc.core.features.events.contents.dailyevents.commands.DailyEventCommand; -import fr.openmc.core.features.events.contents.dailyevents.contents.bloodynight.BloodyNightEvent; -import fr.openmc.core.features.events.contents.dailyevents.contents.goldenharvest.GoldenHarvestEvent; -import fr.openmc.core.features.events.contents.dailyevents.contents.miraculousfishing.MiraculousFishingEvent; import fr.openmc.core.features.events.contents.dailyevents.listeners.DailyEventAmbientListeners; import fr.openmc.core.features.events.contents.dailyevents.models.IncomingEventsDB; import fr.openmc.core.features.events.contents.dailyevents.models.ScheduleDailyEvent; @@ -36,17 +30,6 @@ @Credit(developers = {"iambibi_"}) public class DailyEventsManager extends Feature implements LoadAfterItemsAdder, HasDatabase, HasListeners, HasCommands { - // * Constantes - public static final List EVENTS = List.of( - new MiraculousFishingEvent(), - new GoldenHarvestEvent(), - new BloodyNightEvent() - ); - - public static final DailyEvent MIRACULOUS_FISHING = getDailyEvent("miraculous_fishing"); - public static final DailyEvent GOLDEN_HARVEST = getDailyEvent("golden_harvest"); - public static final DailyEvent BLOODY_NIGHT = getDailyEvent("bloody_night"); - private static final List SLOT_HOURS_EVENTS = new ArrayList<>(List.of( 9, 13, 16, 21 )); @@ -64,7 +47,7 @@ public class DailyEventsManager extends Feature implements LoadAfterItemsAdder, @Override public void init() { // * Register les sous features - for (DailyEvent event : EVENTS) { + for (DailyEvent event : OMCRegistry.DAILY_EVENTS.values()) { if (!(event instanceof HasFeature hasFeature)) continue; OMCPlugin.registerFeature(hasFeature.getFeature()); @@ -95,7 +78,7 @@ public Set getListeners() { new DailyEventAmbientListeners() )); - for (DailyEvent event : EVENTS) { + for (DailyEvent event : OMCRegistry.DAILY_EVENTS.values()) { if (!(event instanceof HasListeners hasListeners)) continue; listeners.addAll(hasListeners.getListeners()); } @@ -157,7 +140,7 @@ public static List loadIncomingEvents() { List copyEvents = new ArrayList<>(incomingEvent); for (int hourSlot : SLOT_HOURS_EVENTS) { if (copyEvents.isEmpty()) { - copyEvents = RandomUtils.generateRandomOrder(EVENTS); + copyEvents = RandomUtils.generateRandomOrder(OMCRegistry.DAILY_EVENTS.values().stream().toList()); } LocalDateTime scheduledDailyEvent; @@ -233,18 +216,6 @@ public static DailyEvent getActiveDailyEvent() { return outgoingEvent.getDailyEvent(); } - /** - * Permet d'obtenir un DailyEvent via l'id dans le registre des Evenements Journalier - * @param id l'id de l'event - * @return l'event - */ - public static DailyEvent getDailyEvent(String id) { - return EVENTS.stream() - .filter(event -> event.getEventId().equals(id)) - .findFirst() - .orElse(null); - } - /** * Permet d'obtenir le temps restant d'un evenement journalier en secondes * @param event l'event diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/commands/DailyEventCommand.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/commands/DailyEventCommand.java index 94ae60761..4f970d6fa 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/commands/DailyEventCommand.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/commands/DailyEventCommand.java @@ -1,5 +1,6 @@ package fr.openmc.core.features.events.contents.dailyevents.commands; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.events.contents.dailyevents.DailyEventsManager; import fr.openmc.core.features.events.contents.dailyevents.commands.autocomplete.DailyEventAutoComplete; import fr.openmc.core.features.events.contents.dailyevents.models.ScheduleDailyEvent; @@ -27,7 +28,7 @@ public static void forceStartCommand(Player player, // * on lance le evenement rentré en param DailyEventsManager.outgoingEvent = new ScheduleDailyEvent( - DailyEventsManager.getDailyEvent(dailyEvent), DateUtils.getLocalDateTime()); + OMCRegistry.DAILY_EVENTS.getOrThrow(dailyEvent), DateUtils.getLocalDateTime()); DailyEventsManager.outgoingEvent.getDailyEvent().start(); } diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/commands/autocomplete/DailyEventAutoComplete.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/commands/autocomplete/DailyEventAutoComplete.java index ce9776b55..08836559d 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/commands/autocomplete/DailyEventAutoComplete.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/commands/autocomplete/DailyEventAutoComplete.java @@ -1,6 +1,6 @@ package fr.openmc.core.features.events.contents.dailyevents.commands.autocomplete; -import fr.openmc.core.features.events.contents.dailyevents.DailyEventsManager; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.events.contents.dailyevents.models.dailyevent.DailyEvent; import org.jetbrains.annotations.NotNull; import revxrsal.commands.autocomplete.SuggestionProvider; @@ -13,7 +13,7 @@ public class DailyEventAutoComplete implements SuggestionProvider getSuggestions(@NotNull ExecutionContext context) { - return DailyEventsManager.EVENTS.stream() + return OMCRegistry.DAILY_EVENTS.values().stream() .map(DailyEvent::getEventId) .toList(); } diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/contents/mobs/vampire/VampireBossLootManager.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/contents/mobs/vampire/VampireBossLootManager.java index 6c88c2df4..48875a634 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/contents/mobs/vampire/VampireBossLootManager.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/contents/mobs/vampire/VampireBossLootManager.java @@ -2,7 +2,6 @@ import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.economy.EconomyManager; -import fr.openmc.core.features.events.contents.dailyevents.DailyEventsManager; import fr.openmc.core.features.leaderboards.LeaderboardManager; import fr.openmc.core.features.mailboxes.MailboxManager; import fr.openmc.core.registry.loottable.CustomLootTable; @@ -49,7 +48,7 @@ public static void giveContributions(CustomMob mob) { )); - World world = DailyEventsManager.BLOODY_NIGHT.getWorld(); + World world = OMCRegistry.DAILY_EVENTS.BLOODY_NIGHT.getWorld(); if (world == null) return; if (orderedMap.isEmpty()) { diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/menu/BloodyNightMenu.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/menu/BloodyNightMenu.java index 0e740f1cc..c451b91d5 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/menu/BloodyNightMenu.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/bloodynight/menu/BloodyNightMenu.java @@ -28,7 +28,7 @@ public BloodyNightMenu(Player owner) { @Override public @NotNull Component getName() { - return DailyEventsManager.BLOODY_NIGHT.getName(); + return OMCRegistry.DAILY_EVENTS.BLOODY_NIGHT.getName(); } @Override diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/goldenharvest/menu/GoldenHarvestMenu.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/goldenharvest/menu/GoldenHarvestMenu.java index 1fc1db71b..d5ce9631f 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/goldenharvest/menu/GoldenHarvestMenu.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/goldenharvest/menu/GoldenHarvestMenu.java @@ -29,7 +29,7 @@ public GoldenHarvestMenu(Player owner) { @Override public @NotNull Component getName() { - return DailyEventsManager.GOLDEN_HARVEST.getName(); + return OMCRegistry.DAILY_EVENTS.GOLDEN_HARVEST.getName(); } @Override diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/miraculousfishing/menu/MiraculousFishingMenu.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/miraculousfishing/menu/MiraculousFishingMenu.java index 5ab3826b3..07d697f2d 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/miraculousfishing/menu/MiraculousFishingMenu.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/contents/miraculousfishing/menu/MiraculousFishingMenu.java @@ -28,7 +28,7 @@ public MiraculousFishingMenu(Player owner) { @Override public @NotNull Component getName() { - return DailyEventsManager.MIRACULOUS_FISHING.getName(); + return OMCRegistry.DAILY_EVENTS.MIRACULOUS_FISHING.getName(); } @Override diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/models/IncomingEventsDB.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/models/IncomingEventsDB.java index e1c48d854..9de3d2fb7 100644 --- a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/models/IncomingEventsDB.java +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/models/IncomingEventsDB.java @@ -3,7 +3,7 @@ import com.j256.ormlite.field.DataType; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; -import fr.openmc.core.features.events.contents.dailyevents.DailyEventsManager; +import fr.openmc.core.OMCRegistry; import fr.openmc.core.features.events.contents.dailyevents.models.dailyevent.DailyEvent; import lombok.Getter; import lombok.Setter; @@ -37,7 +37,7 @@ public IncomingEventsDB(List incomingEventsList) { */ public List getDailyEventsIncomings() { return Arrays.stream(dailyEventsIdIncomings) - .map(id -> DailyEventsManager.EVENTS.stream() + .map(id -> OMCRegistry.DAILY_EVENTS.values().stream() .filter(event -> event.getEventId().equals(id)) .findFirst() .orElseThrow(() -> new IllegalStateException("Aucun daily event trouvé pour l'id : " + id))) From d2086fdac30d2c3b2509464942b55a9053f26b07 Mon Sep 17 00:00:00 2001 From: iambibi_ <89582596+iambibi@users.noreply.github.com> Date: Sat, 15 Aug 2026 19:20:43 +0200 Subject: [PATCH 13/13] chore: OMCRegistry.DAILY_EVENTS, more clean, i love registry --- .../dailyevents/DailyEventsRegistry.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/fr/openmc/core/features/events/contents/dailyevents/DailyEventsRegistry.java diff --git a/src/main/java/fr/openmc/core/features/events/contents/dailyevents/DailyEventsRegistry.java b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/DailyEventsRegistry.java new file mode 100644 index 000000000..347d8fec1 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/events/contents/dailyevents/DailyEventsRegistry.java @@ -0,0 +1,21 @@ +package fr.openmc.core.features.events.contents.dailyevents; + +import fr.openmc.core.bootstrap.registries.KeyedRegistry; +import fr.openmc.core.bootstrap.registries.Registry; +import fr.openmc.core.features.events.contents.dailyevents.contents.bloodynight.BloodyNightEvent; +import fr.openmc.core.features.events.contents.dailyevents.contents.goldenharvest.GoldenHarvestEvent; +import fr.openmc.core.features.events.contents.dailyevents.contents.miraculousfishing.MiraculousFishingEvent; +import fr.openmc.core.features.events.contents.dailyevents.models.dailyevent.DailyEvent; + +public class DailyEventsRegistry extends Registry + implements KeyedRegistry { + + public final DailyEvent MIRACULOUS_FISHING = register(new MiraculousFishingEvent()); + public final DailyEvent GOLDEN_HARVEST = register(new GoldenHarvestEvent()); + public final DailyEvent BLOODY_NIGHT = register(new BloodyNightEvent()); + + @Override + public String key(DailyEvent registryObject) { + return registryObject.getEventId(); + } +}