diff --git a/src/main/java/fr/openmc/core/features/displays/bossbar/BaseBossbar.java b/src/main/java/fr/openmc/core/features/displays/bossbar/BaseBossbar.java index 472a59791..69d34b289 100644 --- a/src/main/java/fr/openmc/core/features/displays/bossbar/BaseBossbar.java +++ b/src/main/java/fr/openmc/core/features/displays/bossbar/BaseBossbar.java @@ -30,6 +30,14 @@ public void init(Player player, BossBar bar) { */ protected abstract void update(Player player, BossBar bar); + /** + * Détermine la complétion de la boss bar. + * + * @param player Le joueur + * @return La complétion de la boss bar + */ + protected abstract Float progress(Player player); + /** * Détermine la couleur de la boss bar. * diff --git a/src/main/java/fr/openmc/core/features/displays/bossbar/BossbarManager.java b/src/main/java/fr/openmc/core/features/displays/bossbar/BossbarManager.java index d4ba8b87b..82a559645 100644 --- a/src/main/java/fr/openmc/core/features/displays/bossbar/BossbarManager.java +++ b/src/main/java/fr/openmc/core/features/displays/bossbar/BossbarManager.java @@ -105,6 +105,7 @@ private static void updatePlayer(Player player) { playerBars.put(id, existing); base.update(player, existing); + existing.progress(base.progress(player)); playerLastUpdate.put(id, now); continue; } @@ -114,6 +115,7 @@ private static void updatePlayer(Player player) { if (now - last >= intervalMillis) { base.update(player, existing); + existing.progress(base.progress(player)); playerLastUpdate.put(id, now); } diff --git a/src/main/java/fr/openmc/core/features/displays/bossbar/contents/MainBossbar.java b/src/main/java/fr/openmc/core/features/displays/bossbar/contents/MainBossbar.java index 925c2a884..de0eff0fa 100644 --- a/src/main/java/fr/openmc/core/features/displays/bossbar/contents/MainBossbar.java +++ b/src/main/java/fr/openmc/core/features/displays/bossbar/contents/MainBossbar.java @@ -33,6 +33,11 @@ protected void update(Player player, BossBar bar) { bar.name(HelpConfigManager.getHelpMessages().get(indexMessage)); } + @Override + protected Float progress(Player player) { + return 0f; + } + /** * @param player Le joueur * @return La couleur de la boss bar diff --git a/src/main/java/fr/openmc/core/features/dream/displays/DreamBossBar.java b/src/main/java/fr/openmc/core/features/dream/displays/DreamBossBar.java index eba1367e7..489d2f537 100644 --- a/src/main/java/fr/openmc/core/features/dream/displays/DreamBossBar.java +++ b/src/main/java/fr/openmc/core/features/dream/displays/DreamBossBar.java @@ -19,14 +19,15 @@ protected String id() { } @Override - protected void update(Player player, BossBar bar) { - DreamPlayer dreamPlayer = DreamManager.getDreamPlayer(player); + protected void update(Player player, BossBar bar) {} - if (dreamPlayer == null) return; + @Override + protected Float progress(Player player) { + DreamPlayer dreamPlayer = DreamManager.getDreamPlayer(player); - float progress = Math.min(1, (float) dreamPlayer.getDreamTime() / dreamPlayer.getMaxDreamTime()); + if (dreamPlayer == null) return null; - bar.progress(progress); + return Math.min(1, (float) dreamPlayer.getDreamTime() / dreamPlayer.getMaxDreamTime()); } @Override diff --git a/src/main/java/fr/openmc/core/features/milestones/bossbar/MilestoneBossBar.java b/src/main/java/fr/openmc/core/features/milestones/bossbar/MilestoneBossBar.java index 90b87a4a4..8f86ab22b 100644 --- a/src/main/java/fr/openmc/core/features/milestones/bossbar/MilestoneBossBar.java +++ b/src/main/java/fr/openmc/core/features/milestones/bossbar/MilestoneBossBar.java @@ -61,6 +61,28 @@ protected void update(Player player, BossBar bar) { } } + @Override + protected Float progress(Player player) { + int currentStep = MilestonesManager.getPlayerStep(milestone.getType(), player); + + MilestoneStep[] steps = milestone.getStepEnum(); + + if (currentStep >= steps.length) return null; + + int maxStep = steps.length; + MilestoneStep step = steps[currentStep]; + MilestoneQuest quest = step.getQuest(); + + int progress = quest.getProgress(player.getUniqueId()); + int goal = quest.getCurrentTarget(player.getUniqueId()); + + if (goal <= 1) { + return (float) currentStep / maxStep; + } else { + return (float) progress / goal; + } + } + @Override protected BossBar.Color color(Player player) { return milestone.getBossBarOptions().color();