From c5f181ad5c9a486470a041ca66801389d583b96d Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Sat, 7 Oct 2023 15:30:30 +0800 Subject: [PATCH] add new api method --- .../api/mechanic/competition/Ranking.java | 10 ++++++++++ .../competition/ranking/LocalRankingImpl.java | 15 +++++++++++++++ .../competition/ranking/RedisRankingImpl.java | 10 ++++++++++ 3 files changed, 35 insertions(+) diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/Ranking.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/Ranking.java index 59772026..728ac725 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/Ranking.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/Ranking.java @@ -35,8 +35,18 @@ public interface Ranking { * @param player The name of the player to retrieve. * @return The CompetitionPlayer object if found, or null if not found. */ + @Nullable CompetitionPlayer getCompetitionPlayer(String player); + /** + * Retrieves a competition player by rank. + * + * @param rank The rank of the player. + * @return The CompetitionPlayer object if found, or null if not found. + */ + @Nullable + CompetitionPlayer getCompetitionPlayer(int rank); + /** * Add a player to ranking * diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/competition/ranking/LocalRankingImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/competition/ranking/LocalRankingImpl.java index 2fff1a47..c7905b8f 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/competition/ranking/LocalRankingImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/competition/ranking/LocalRankingImpl.java @@ -20,6 +20,7 @@ package net.momirealms.customfishing.mechanic.competition.ranking; import net.momirealms.customfishing.api.common.Pair; import net.momirealms.customfishing.api.mechanic.competition.CompetitionPlayer; import net.momirealms.customfishing.api.mechanic.competition.Ranking; +import org.jetbrains.annotations.Nullable; import java.util.*; @@ -87,6 +88,20 @@ public class LocalRankingImpl implements Ranking { return null; } + @Override + public CompetitionPlayer getCompetitionPlayer(int rank) { + int i = 1; + int size = getSize(); + if (rank > size) return null; + for (CompetitionPlayer player : competitionPlayers) { + if (rank == i) { + return player; + } + i++; + } + return null; + } + /** * Returns an iterator for iterating over pairs of player names and scores. * diff --git a/plugin/src/main/java/net/momirealms/customfishing/mechanic/competition/ranking/RedisRankingImpl.java b/plugin/src/main/java/net/momirealms/customfishing/mechanic/competition/ranking/RedisRankingImpl.java index acc80f8e..e8b628ea 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/mechanic/competition/ranking/RedisRankingImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/mechanic/competition/ranking/RedisRankingImpl.java @@ -21,6 +21,7 @@ import net.momirealms.customfishing.api.common.Pair; import net.momirealms.customfishing.api.mechanic.competition.CompetitionPlayer; import net.momirealms.customfishing.api.mechanic.competition.Ranking; import net.momirealms.customfishing.storage.method.database.nosql.RedisManager; +import org.jetbrains.annotations.Nullable; import redis.clients.jedis.Jedis; import redis.clients.jedis.resps.Tuple; @@ -54,6 +55,15 @@ public class RedisRankingImpl implements Ranking { } } + @Override + public CompetitionPlayer getCompetitionPlayer(int rank) { + try (Jedis jedis = RedisManager.getInstance().getJedis()) { + List player = jedis.zrevrangeWithScores("cf_competition", rank - 1, rank -1); + if (player == null || player.size() == 0) return null; + return new CompetitionPlayer(player.get(0).getElement(), player.get(0).getScore()); + } + } + @Override public void addPlayer(CompetitionPlayer competitionPlayer) { try (Jedis jedis = RedisManager.getInstance().getJedis()) {