From fcfde557ea80e76d6edb16762301d54915093cc8 Mon Sep 17 00:00:00 2001 From: Nocolm Date: Sun, 25 Oct 2026 12:50:31 +0100 Subject: [PATCH 1/4] Add Swapper to the MainScoreBoard --- .../displays/scoreboards/BaseScoreboard.java | 82 +++++++++++++++++++ .../displays/scoreboards/sb/InfoSwapper.java | 11 +++ .../scoreboards/sb/MainScoreboard.java | 41 +++------- .../features/events/sbinfos/ContestInfos.java | 55 +++++++++++++ .../core/features/settings/SettingType.java | 3 + .../settings/values/SwappingValues.java | 22 +++++ 6 files changed, 184 insertions(+), 30 deletions(-) create mode 100644 src/main/java/fr/openmc/core/features/displays/scoreboards/sb/InfoSwapper.java create mode 100644 src/main/java/fr/openmc/core/features/events/sbinfos/ContestInfos.java create mode 100644 src/main/java/fr/openmc/core/features/settings/values/SwappingValues.java diff --git a/src/main/java/fr/openmc/core/features/displays/scoreboards/BaseScoreboard.java b/src/main/java/fr/openmc/core/features/displays/scoreboards/BaseScoreboard.java index 9a79d219a..ce899d33f 100644 --- a/src/main/java/fr/openmc/core/features/displays/scoreboards/BaseScoreboard.java +++ b/src/main/java/fr/openmc/core/features/displays/scoreboards/BaseScoreboard.java @@ -2,6 +2,11 @@ import dev.lone.itemsadder.api.FontImages.FontImageWrapper; import fr.openmc.api.scoreboard.SternalBoard; +import fr.openmc.core.features.displays.scoreboards.sb.InfoSwapper; +import fr.openmc.core.features.settings.PlayerSettings; +import fr.openmc.core.features.settings.PlayerSettingsManager; +import fr.openmc.core.features.settings.SettingType; +import fr.openmc.core.features.settings.values.SwappingValues; import fr.openmc.core.hooks.itemsadder.ItemsAdderHook; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; @@ -10,9 +15,15 @@ import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import org.bukkit.entity.Player; +import java.util.List; + public abstract class BaseScoreboard { protected static final boolean canShowLogo = ItemsAdderHook.isEnable(); + private int currentSwappingTime = 200; // Pour éviter d'attendre XXs au début + private int currentSwappingInfoIndex = 0; + InfoSwapper currentInfo = null; + /** * Initialise le scoreboard pour un joueur * @@ -40,6 +51,58 @@ public void init(Player player, SternalBoard board) { */ protected abstract void update(Player player, SternalBoard board); + /** + * Met à jour les lignes "swap" du scoreboard + * + * @param player Le joueur + * @param lines les lines dont il faut ajouter les éléments du swapping + */ + protected void updateSwapping(Player player, List lines) { + currentSwappingTime += updateInterval(); + + int playerSwappingTime = getSwappingTime(player); + + if (playerSwappingTime == -1) { + List infos = getSwapping(); + + if (infos.isEmpty()) + return; + + infos.forEach(info -> { + if (info.isActive()) + info.addInfosTo(player, lines); + }); + return; + } + + if (playerSwappingTime <= currentSwappingTime) { + currentSwappingTime = 0; + currentInfo = getNextInfo(); + } + + if (currentInfo != null) + currentInfo.addInfosTo(player, lines); + } + + /** + * Récupère la liste des Infos à afficher à tour de role + */ + protected List getSwapping() {return List.of();} + + /** + * Récupère la le temps de "swap" du joueur + */ + protected int getSwappingTime(Player player) { + PlayerSettings settings = PlayerSettingsManager.getPlayerSettings(player); + + if (settings == null) + return SwappingValues.NORMAL.getSwappingTime(); + + SwappingValues value = settings.getSetting(SettingType.SWAPPING_UPDATE_TIME); + + return value == null ? SwappingValues.NORMAL.getSwappingTime() : value.getSwappingTime(); + } + /** * Détermine si le scoreboard doit être affiché pour un joueur * @@ -76,4 +139,23 @@ public static Component getFooter() { Component footerText = TranslationManager.translation("feature.displays.scoreboard.footer.text"); return MiniMessage.miniMessage().deserialize(" ", Placeholder.component("name", footerText)); } + + /** + * Récupère la prochaine info à afficher dans le scoreboard + */ + private InfoSwapper getNextInfo() { + List infos = getSwapping(); + + if (infos.isEmpty()) + return null; + + infos = infos.stream().filter(InfoSwapper::isActive).toList(); + + if (infos.size() <= 1) + return null; + + currentSwappingInfoIndex = (currentSwappingInfoIndex + 1) % infos.size(); + return infos.get(currentSwappingInfoIndex); + + } } diff --git a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/InfoSwapper.java b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/InfoSwapper.java new file mode 100644 index 000000000..c7422ac65 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/InfoSwapper.java @@ -0,0 +1,11 @@ +package fr.openmc.core.features.displays.scoreboards.sb; + +import net.kyori.adventure.text.Component; +import org.bukkit.entity.Player; + +import java.util.List; + +public interface InfoSwapper { + boolean isActive(); + void addInfosTo(Player player, List lines); +} diff --git a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java index f953efcde..21e27ede5 100644 --- a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java +++ b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java @@ -12,17 +12,12 @@ import fr.openmc.core.features.corpse.npc.CorpseNPCManager; import fr.openmc.core.features.displays.scoreboards.BaseScoreboard; import fr.openmc.core.features.economy.EconomyManager; -import fr.openmc.core.features.events.contents.halloween.managers.HalloweenManager; -import fr.openmc.core.features.events.contents.weeklyevents.WeeklyEventsManager; -import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.Contest; -import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.ContestPhase; -import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.managers.ContestManager; -import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.models.ContestData; +import fr.openmc.core.features.events.sbinfos.ContestInfos; +import fr.openmc.core.features.events.contents.halloween.pumpkin.managers.HalloweenManager; import fr.openmc.core.hooks.FancyNpcsHook; import fr.openmc.core.hooks.LuckPermsHook; import fr.openmc.core.hooks.WorldGuardHook; import fr.openmc.core.utils.bedrock.CharRemplacementUtils; -import fr.openmc.core.utils.text.DateUtils; import fr.openmc.core.utils.text.fonts.SmallCapsUtils; import fr.openmc.core.utils.text.messages.TranslationManager; import net.kyori.adventure.text.Component; @@ -33,7 +28,6 @@ import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import org.bukkit.entity.Player; -import java.time.DayOfWeek; import java.util.ArrayList; import java.util.List; @@ -66,28 +60,7 @@ public void update(Player player, SternalBoard board) { ); } - // Contest - if (WeeklyEventsManager.isEventActive() && - WeeklyEventsManager.getCurrentEvent() instanceof Contest) { - ContestData data = ContestManager.data; - if (WeeklyEventsManager.getCurrentPhase() != ContestPhase.VOTE_CAMP.getPhase()) { - lines.add(MiniMessage.miniMessage().deserialize( - "</gradient>", - Placeholder.component("title", TranslationManager.translation("feature.displays.scoreboard.contest.title", true)) - ).decoration(TextDecoration.BOLD, true)); - lines.add(text(" " + CharRemplacementUtils.getPointChar(player) + " ", NamedTextColor.DARK_GRAY) - .append(data.getCamp1ToSmall()) - .appendSpace() - .append(TranslationManager.translation(player, "feature.displays.scoreboard.contest.vs", true).color(NamedTextColor.GRAY)) - .append(data.getCamp2ToSmall()) - ); - lines.add(Component.text(" " + CharRemplacementUtils.getPointChar(player) + " ", NamedTextColor.DARK_GRAY) - .append(TranslationManager.translation(player, "feature.displays.scoreboard.contest.ends", true).color(NamedTextColor.GRAY)) - .appendSpace() - .append(text(DateUtils.getTimeUntilNextDay(DayOfWeek.MONDAY), TextColor.color(0xFF8F06))) - ); - } - } + updateSwapping(player, lines); lines.add(empty()); lines.add(getFooter()); @@ -95,6 +68,14 @@ public void update(Player player, SternalBoard board) { board.updateLines(lines); } + @Override + protected List<InfoSwapper> getSwapping() { + return List.of( + //new HalloweenFestivalInfos(), + new ContestInfos() + ); + } + public static List<Component> getDefaultLines(Player player, boolean inWar) { Component rank = LuckPermsHook.isEnable() ? Component.text(LuckPermsHook.getFormattedPAPIPrefix(player)) diff --git a/src/main/java/fr/openmc/core/features/events/sbinfos/ContestInfos.java b/src/main/java/fr/openmc/core/features/events/sbinfos/ContestInfos.java new file mode 100644 index 000000000..083a7ba61 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/events/sbinfos/ContestInfos.java @@ -0,0 +1,55 @@ +package fr.openmc.core.features.events.sbinfos; + +import fr.openmc.core.features.displays.scoreboards.sb.InfoSwapper; +import fr.openmc.core.features.events.contents.weeklyevents.WeeklyEventsManager; +import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.Contest; +import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.ContestPhase; +import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.managers.ContestManager; +import fr.openmc.core.features.events.contents.weeklyevents.contents.contest.models.ContestData; +import fr.openmc.core.utils.bedrock.CharRemplacementUtils; +import fr.openmc.core.utils.text.DateUtils; +import fr.openmc.core.utils.text.messages.TranslationManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import org.bukkit.entity.Player; + +import java.time.DayOfWeek; +import java.util.List; + +import static net.kyori.adventure.text.Component.text; + +public class ContestInfos implements InfoSwapper { + + @Override + public boolean isActive() { + if (WeeklyEventsManager.isEventActive() && WeeklyEventsManager.getCurrentEvent() instanceof Contest) { + return WeeklyEventsManager.getCurrentPhase() != ContestPhase.VOTE_CAMP.getPhase(); + } + return false; + } + + @Override + public void addInfosTo(Player player, List<Component> lines) { + ContestData data = ContestManager.data; + + lines.add(MiniMessage.miniMessage().deserialize( + "<gradient:#FFB800:#F0DF49><title></gradient>", + Placeholder.component("title", TranslationManager.translation("feature.displays.scoreboard.contest.title", true)) + ).decoration(TextDecoration.BOLD, true)); + lines.add(text(" " + CharRemplacementUtils.getPointChar(player) + " ", NamedTextColor.DARK_GRAY) + .append(data.getCamp1ToSmall()) + .appendSpace() + .append(TranslationManager.translation(player, "feature.displays.scoreboard.contest.vs", true).color(NamedTextColor.GRAY)) + .append(data.getCamp2ToSmall()) + ); + lines.add(Component.text(" " + CharRemplacementUtils.getPointChar(player) + " ", NamedTextColor.DARK_GRAY) + .append(TranslationManager.translation(player, "feature.displays.scoreboard.contest.ends", true).color(NamedTextColor.GRAY)) + .appendSpace() + .append(text(DateUtils.getTimeUntilNextDay(DayOfWeek.MONDAY), TextColor.color(0xFF8F06))) + ); + } +} diff --git a/src/main/java/fr/openmc/core/features/settings/SettingType.java b/src/main/java/fr/openmc/core/features/settings/SettingType.java index 3fdcd5982..5591fcdbb 100644 --- a/src/main/java/fr/openmc/core/features/settings/SettingType.java +++ b/src/main/java/fr/openmc/core/features/settings/SettingType.java @@ -3,6 +3,7 @@ import fr.openmc.core.features.settings.policy.CityPolicy; import fr.openmc.core.features.settings.policy.FriendPolicy; import fr.openmc.core.features.settings.policy.GlobalPolicy; +import fr.openmc.core.features.settings.values.SwappingValues; import io.papermc.paper.datacomponent.DataComponentType; import io.papermc.paper.datacomponent.DataComponentTypes; import lombok.Getter; @@ -34,6 +35,8 @@ public enum SettingType { Material.ENDER_PEARL, Material.GRAY_DYE, "feature.settings.type.teleport_title_fade.description"), JOIN_ANIMATION(ValueType.BOOLEAN, true, "feature.settings.type.join_animation.name", Material.GLOW_INK_SAC, Material.INK_SAC, "feature.settings.type.join_animation.description"), + SWAPPING_UPDATE_TIME(ValueType.ENUM, SwappingValues.NORMAL, "feature.settings.type.private_message.name",//TODO + Material.CLOCK, "feature.settings.type.private_message.description"),//TODO ; diff --git a/src/main/java/fr/openmc/core/features/settings/values/SwappingValues.java b/src/main/java/fr/openmc/core/features/settings/values/SwappingValues.java new file mode 100644 index 000000000..300f3a601 --- /dev/null +++ b/src/main/java/fr/openmc/core/features/settings/values/SwappingValues.java @@ -0,0 +1,22 @@ +package fr.openmc.core.features.settings.values; + +import fr.openmc.core.features.settings.policy.Policy; +import lombok.Getter; + +@Getter +public enum SwappingValues implements Policy { + FULL("feature.settings.policy.city.everyone.name", "feature.settings.policy.city.everyone.description", -1),//TODO + SLOW("feature.settings.policy.city.friends.name", "feature.settings.policy.city.friends.description", 120),//TODO + NORMAL("feature.settings.policy.city.nobody.name", "feature.settings.policy.city.nobody.description", 60),//TODO + FAST("feature.settings.policy.city.nobody.name", "feature.settings.policy.city.nobody.description", 30);//TODO + + private final String displayName; + private final String description; + private final int swappingTime; // En seconds + + SwappingValues(String displayName, String description, int swappingTime) { + this.displayName = displayName; + this.description = description; + this.swappingTime = swappingTime; + } +} \ No newline at end of file From 3120344b03d48322200dea4a0d96b631f5839bb6 Mon Sep 17 00:00:00 2001 From: Nocolm <nocolm77@gmail.com> Date: Sun, 25 Oct 2026 13:06:10 +0100 Subject: [PATCH 2/4] Translation --- .../openmc/core/features/settings/SettingType.java | 4 ++-- .../features/settings/values/SwappingValues.java | 8 ++++---- .../translations/default/settings.properties | 12 ++++++++++++ .../resources/translations/en_GB/settings.properties | 11 +++++++++++ .../resources/translations/en_US/settings.properties | 12 ++++++++++++ 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/main/java/fr/openmc/core/features/settings/SettingType.java b/src/main/java/fr/openmc/core/features/settings/SettingType.java index 5591fcdbb..a6292b232 100644 --- a/src/main/java/fr/openmc/core/features/settings/SettingType.java +++ b/src/main/java/fr/openmc/core/features/settings/SettingType.java @@ -35,8 +35,8 @@ public enum SettingType { Material.ENDER_PEARL, Material.GRAY_DYE, "feature.settings.type.teleport_title_fade.description"), JOIN_ANIMATION(ValueType.BOOLEAN, true, "feature.settings.type.join_animation.name", Material.GLOW_INK_SAC, Material.INK_SAC, "feature.settings.type.join_animation.description"), - SWAPPING_UPDATE_TIME(ValueType.ENUM, SwappingValues.NORMAL, "feature.settings.type.private_message.name",//TODO - Material.CLOCK, "feature.settings.type.private_message.description"),//TODO + SWAPPING_UPDATE_TIME(ValueType.ENUM, SwappingValues.NORMAL, "feature.settings.type.swapping_update_time.name", + Material.CLOCK, "feature.settings.type.swapping_update_time.description"), ; diff --git a/src/main/java/fr/openmc/core/features/settings/values/SwappingValues.java b/src/main/java/fr/openmc/core/features/settings/values/SwappingValues.java index 300f3a601..3fa02cf1f 100644 --- a/src/main/java/fr/openmc/core/features/settings/values/SwappingValues.java +++ b/src/main/java/fr/openmc/core/features/settings/values/SwappingValues.java @@ -5,10 +5,10 @@ @Getter public enum SwappingValues implements Policy { - FULL("feature.settings.policy.city.everyone.name", "feature.settings.policy.city.everyone.description", -1),//TODO - SLOW("feature.settings.policy.city.friends.name", "feature.settings.policy.city.friends.description", 120),//TODO - NORMAL("feature.settings.policy.city.nobody.name", "feature.settings.policy.city.nobody.description", 60),//TODO - FAST("feature.settings.policy.city.nobody.name", "feature.settings.policy.city.nobody.description", 30);//TODO + FULL("feature.settings.values.swapping.full.name", "feature.settings.values.swapping.full.description", -1), + SLOW("feature.settings.values.swapping.slow.name", "feature.settings.values.swapping.slow.description", 120), + NORMAL("feature.settings.values.swapping.normal.name", "feature.settings.values.swapping.normal.description", 60), + FAST("feature.settings.values.swapping.fast.name", "feature.settings.values.swapping.fast.description", 30); private final String displayName; private final String description; diff --git a/src/main/resources/translations/default/settings.properties b/src/main/resources/translations/default/settings.properties index d26eb181d..1f2e70a1a 100644 --- a/src/main/resources/translations/default/settings.properties +++ b/src/main/resources/translations/default/settings.properties @@ -30,6 +30,8 @@ feature.settings.type.teleport_title_fade.name=Fondu du titre lors des télépor feature.settings.type.teleport_title_fade.description=Activer ou désactiver le fondu du titre lors des téléportations feature.settings.type.join_animation.name=Animation de connexion feature.settings.type.join_animation.description=Activer ou désactiver l'animation de connexion +feature.settings.type.swapping_update_time.name=Information Dynamique du Scoreboard +feature.settings.type.swapping_update_time.description=Modifier le mode de roulement actuel, Tous affichera tous feature.settings.policy.global.everyone.name=<green>Tout le monde</green> feature.settings.policy.global.everyone.description=Visible par tous les joueurs @@ -53,3 +55,13 @@ feature.settings.policy.city.friends.name=<light_purple>Amis uniquement</light_p feature.settings.policy.city.friends.description=Accepter uniquement les demandes de mes amis feature.settings.policy.city.nobody.name=<red>Personne</red> feature.settings.policy.city.nobody.description=Refuser toutes les demandes + +feature.settings.values.swapping.full.name=<green>Tous</green> +feature.settings.values.swapping.full.description=Afficher toutes les informations +feature.settings.values.swapping.slow.name=<green>Lent</green> +feature.settings.values.swapping.slow.description=Prend 120s entre chaque changement +feature.settings.values.swapping.normal.name=<yellow>Normale</yellow> +feature.settings.values.swapping.normal.description=Prend 60s entre chaque changement +feature.settings.values.swapping.fast.name=<red>Rapide</red> +feature.settings.values.swapping.fast.description=Prend 30s entre chaque changement + diff --git a/src/main/resources/translations/en_GB/settings.properties b/src/main/resources/translations/en_GB/settings.properties index be0352128..1b3050bf3 100644 --- a/src/main/resources/translations/en_GB/settings.properties +++ b/src/main/resources/translations/en_GB/settings.properties @@ -30,6 +30,8 @@ feature.settings.type.teleport_title_fade.name=Title fade during teleports feature.settings.type.teleport_title_fade.description=Enable or disable title fading during teleports feature.settings.type.join_animation.name=Connection animation feature.settings.type.join_animation.description=Enable or disable login animation +feature.settings.type.swapping_update_time.name=Dynamic Scoreboard Information +feature.settings.type.swapping_update_time.description=Change the mode of the current swapping, Full will show everything feature.settings.policy.global.everyone.name=<green>Everyone</green> feature.settings.policy.global.everyone.description=Visible to all players @@ -53,3 +55,12 @@ feature.settings.policy.city.friends.name=<light_purple>Friends only</light_purp feature.settings.policy.city.friends.description=Only accept requests from my friends feature.settings.policy.city.nobody.name=<red>Person</red> feature.settings.policy.city.nobody.description=Refuse all requests + +feature.settings.values.swapping.full.name=<green>Full</green> +feature.settings.values.swapping.full.description=Show all the information +feature.settings.values.swapping.slow.name=<green>Slow</green> +feature.settings.values.swapping.slow.description=Take 120s between each swap +feature.settings.values.swapping.normal.name=<yellow>Normal</yellow> +feature.settings.values.swapping.normal.description=Take 60s between each swap +feature.settings.values.swapping.fast.name=<red>Fast</red> +feature.settings.values.swapping.fast.description=Take 30s between each swap diff --git a/src/main/resources/translations/en_US/settings.properties b/src/main/resources/translations/en_US/settings.properties index be0352128..2e6bfd0ca 100644 --- a/src/main/resources/translations/en_US/settings.properties +++ b/src/main/resources/translations/en_US/settings.properties @@ -30,6 +30,8 @@ feature.settings.type.teleport_title_fade.name=Title fade during teleports feature.settings.type.teleport_title_fade.description=Enable or disable title fading during teleports feature.settings.type.join_animation.name=Connection animation feature.settings.type.join_animation.description=Enable or disable login animation +feature.settings.type.swapping_update_time.name=Dynamic Scoreboard Information +feature.settings.type.swapping_update_time.description=Change the mode of the current swapping, Full will show everything feature.settings.policy.global.everyone.name=<green>Everyone</green> feature.settings.policy.global.everyone.description=Visible to all players @@ -53,3 +55,13 @@ feature.settings.policy.city.friends.name=<light_purple>Friends only</light_purp feature.settings.policy.city.friends.description=Only accept requests from my friends feature.settings.policy.city.nobody.name=<red>Person</red> feature.settings.policy.city.nobody.description=Refuse all requests + +feature.settings.values.swapping.full.name=<green>Full</green> +feature.settings.values.swapping.full.description=Show all the information +feature.settings.values.swapping.slow.name=<green>Slow</green> +feature.settings.values.swapping.slow.description=Take 120s between each swap +feature.settings.values.swapping.normal.name=<yellow>Normal</yellow> +feature.settings.values.swapping.normal.description=Take 60s between each swap +feature.settings.values.swapping.fast.name=<red>Fast</red> +feature.settings.values.swapping.fast.description=Take 30s between each swap + From 46c4a9fe915d60e44393944fb4dfb0cc6a0b2b64 Mon Sep 17 00:00:00 2001 From: Nocolm <nocolm77@gmail.com> Date: Sun, 25 Oct 2026 13:26:31 +0100 Subject: [PATCH 3/4] Remove unused import for HalloweenManager Removed unused HalloweenManager import. --- .../core/features/displays/scoreboards/sb/MainScoreboard.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java index 21e27ede5..1ab34a009 100644 --- a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java +++ b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java @@ -13,7 +13,6 @@ import fr.openmc.core.features.displays.scoreboards.BaseScoreboard; import fr.openmc.core.features.economy.EconomyManager; import fr.openmc.core.features.events.sbinfos.ContestInfos; -import fr.openmc.core.features.events.contents.halloween.pumpkin.managers.HalloweenManager; import fr.openmc.core.hooks.FancyNpcsHook; import fr.openmc.core.hooks.LuckPermsHook; import fr.openmc.core.hooks.WorldGuardHook; From 9a7985184f16879400c56e0e9f78be5c0c760c22 Mon Sep 17 00:00:00 2001 From: Nocolm <nocolm77@gmail.com> Date: Sun, 25 Oct 2026 13:45:50 +0100 Subject: [PATCH 4/4] Fix --- .../core/features/displays/scoreboards/sb/MainScoreboard.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java index 21e27ede5..697df1ab3 100644 --- a/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java +++ b/src/main/java/fr/openmc/core/features/displays/scoreboards/sb/MainScoreboard.java @@ -12,8 +12,8 @@ import fr.openmc.core.features.corpse.npc.CorpseNPCManager; import fr.openmc.core.features.displays.scoreboards.BaseScoreboard; import fr.openmc.core.features.economy.EconomyManager; +import fr.openmc.core.features.events.contents.halloween.managers.HalloweenManager; import fr.openmc.core.features.events.sbinfos.ContestInfos; -import fr.openmc.core.features.events.contents.halloween.pumpkin.managers.HalloweenManager; import fr.openmc.core.hooks.FancyNpcsHook; import fr.openmc.core.hooks.LuckPermsHook; import fr.openmc.core.hooks.WorldGuardHook;