From 1d02db5aadc8d2b7114990565b3f8d3bdfa5203d Mon Sep 17 00:00:00 2001 From: XiaoMoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:56:48 +0800 Subject: [PATCH] Fixed reversed score --- .../competition/FishingCompetition.java | 12 +++++++++++- .../integration/papi/CompetitionPapi.java | 6 ++++-- .../bukkit/competition/Competition.java | 19 ++++++++++++++++++- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/FishingCompetition.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/FishingCompetition.java index 9fae2dd0..d5e09ae9 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/FishingCompetition.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/FishingCompetition.java @@ -54,10 +54,20 @@ public interface FishingCompetition { * actions if it's their first time joining the competition. * * @param player The player whose data needs to be refreshed. - * @param score The player's current score in the competition. + * @param score The score to add or refresh */ + @Deprecated(forRemoval = false) void refreshData(Player player, double score); + /** + * Refreshes the score for a player in the fishing competition, including updating their score and triggering + * actions if it's their first time joining the competition. + * + * @param player The player whose score needs to be refreshed. + * @param score The score to add or refresh + */ + void refreshScore(Player player, double score); + /** * Checks if a player has joined the fishing competition based on their name. * diff --git a/compatibility/src/main/java/net/momirealms/customfishing/bukkit/integration/papi/CompetitionPapi.java b/compatibility/src/main/java/net/momirealms/customfishing/bukkit/integration/papi/CompetitionPapi.java index 4a225c7b..944ffca9 100644 --- a/compatibility/src/main/java/net/momirealms/customfishing/bukkit/integration/papi/CompetitionPapi.java +++ b/compatibility/src/main/java/net/momirealms/customfishing/bukkit/integration/papi/CompetitionPapi.java @@ -129,11 +129,13 @@ public class CompetitionPapi extends PlaceholderExpansion { case "score" -> { FishingCompetition competition = plugin.getCompetitionManager().getOnGoingCompetition(); if (competition == null) return ""; + double score; if (split.length == 1) { - return String.format("%.2f", competition.getRanking().getPlayerScore(player.getName())); + score = competition.getRanking().getPlayerScore(player.getName()); } else { - return String.format("%.2f", competition.getRanking().getScoreAt(Integer.parseInt(split[1]))); + score = competition.getRanking().getScoreAt(Integer.parseInt(split[1])); } + return String.format("%.2f", competition.getGoal().isReversed() ? -score : score); } case "player" -> { FishingCompetition competition = plugin.getCompetitionManager().getOnGoingCompetition(); diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/competition/Competition.java b/core/src/main/java/net/momirealms/customfishing/bukkit/competition/Competition.java index 7d231415..b265ca84 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/competition/Competition.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/competition/Competition.java @@ -39,6 +39,7 @@ import net.momirealms.customfishing.common.util.Pair; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import java.time.Instant; @@ -187,7 +188,7 @@ public class Competition implements FishingCompetition { Optional player = Optional.ofNullable(this.rankingProvider.getPlayerAt(i)); if (player.isPresent()) { this.publicContext.arg(ContextKeys.of(i + "_player", String.class), player.get()); - this.publicContext.arg(ContextKeys.of(i + "_score", String.class), String.format("%.2f", goal.isReversed() ? -this.rankingProvider.getScoreAt(i) : this.rankingProvider.getScoreAt(i))); + this.publicContext.arg(ContextKeys.of(i + "_score", String.class), String.format("%.2f", getScore(i))); } else { this.publicContext.arg(ContextKeys.of(i + "_player", String.class), TranslationManager.miniMessageTranslation(MessageConstants.COMPETITION_NO_PLAYER.build().key())); this.publicContext.arg(ContextKeys.of(i + "_score", String.class), TranslationManager.miniMessageTranslation(MessageConstants.COMPETITION_NO_SCORE.build().key())); @@ -199,6 +200,17 @@ public class Competition implements FishingCompetition { this.publicContext.arg(ContextKeys.SECONDS, remainingTime); } + @ApiStatus.Internal + public double getScore(String player) { + double score = this.rankingProvider.getPlayerScore(player); + return goal.isReversed() ? -score : score; + } + + @ApiStatus.Internal + public double getScore(int rank) { + return goal.isReversed() ? -this.rankingProvider.getScoreAt(rank) : this.rankingProvider.getScoreAt(rank); + } + @Override public boolean isOnGoing() { return remainingTime > 0; @@ -219,6 +231,11 @@ public class Competition implements FishingCompetition { @Override public void refreshData(Player player, double score) { + refreshScore(player, score); + } + + @Override + public void refreshScore(Player player, double score) { // if player join for the first time, trigger join actions if (!hasPlayerJoined(player)) { ActionManager.trigger(Context.player(player).combine(publicContext), config.joinActions());