Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

prívate ? public ? Généralement vaut mieux préciser et au moins on se pose pas la question 👍

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a oui bien vu


/**
* Initialise le scoreboard pour un joueur
*
Expand Down Expand Up @@ -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<Component> lines) {
currentSwappingTime += updateInterval();

int playerSwappingTime = getSwappingTime(player);

if (playerSwappingTime == -1) {
List<InfoSwapper> 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<InfoSwapper> 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
*
Expand Down Expand Up @@ -76,4 +139,23 @@ public static Component getFooter() {
Component footerText = TranslationManager.translation("feature.displays.scoreboard.footer.text");
return MiniMessage.miniMessage().deserialize(" <gradient:#FF18DD:#FF80F6><name></gradient>", Placeholder.component("name", footerText));
}

/**
* Récupère la prochaine info à afficher dans le scoreboard
*/
private InfoSwapper getNextInfo() {
List<InfoSwapper> 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);

}
}
Original file line number Diff line number Diff line change
@@ -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<Component> lines);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,11 @@
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.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;
Expand All @@ -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;

Expand Down Expand Up @@ -66,35 +60,22 @@ 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:#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)))
);
}
}
updateSwapping(player, lines);

lines.add(empty());
lines.add(getFooter());

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))
Expand Down
Original file line number Diff line number Diff line change
@@ -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)))
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.swapping_update_time.name",
Material.CLOCK, "feature.settings.type.swapping_update_time.description"),

;

Expand Down
Original file line number Diff line number Diff line change
@@ -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.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;
private final int swappingTime; // En seconds

SwappingValues(String displayName, String description, int swappingTime) {
this.displayName = displayName;
this.description = description;
this.swappingTime = swappingTime;
}
}
12 changes: 12 additions & 0 deletions src/main/resources/translations/default/settings.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

11 changes: 11 additions & 0 deletions src/main/resources/translations/en_GB/settings.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
12 changes: 12 additions & 0 deletions src/main/resources/translations/en_US/settings.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Loading