From b5ecffb725d78c154f469d7e2868574ca7ecff30 Mon Sep 17 00:00:00 2001 From: BONNe Date: Mon, 6 Apr 2020 20:14:34 +0300 Subject: [PATCH] Add 2 new placeholders: - `[gamemode]_challenge_latest_level_name` returns latest unlocked challenge level name - `[gamemode]_challenge_latest_level_id` returns latest unlocked challenge level id Fixes #226 --- .../bentobox/challenges/ChallengesAddon.java | 17 +++++++++++++++ .../challenges/ChallengesManager.java | 21 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/main/java/world/bentobox/challenges/ChallengesAddon.java b/src/main/java/world/bentobox/challenges/ChallengesAddon.java index 9c8a3eb..e2fd286 100644 --- a/src/main/java/world/bentobox/challenges/ChallengesAddon.java +++ b/src/main/java/world/bentobox/challenges/ChallengesAddon.java @@ -21,6 +21,7 @@ import world.bentobox.challenges.commands.ChallengesUserCommand; import world.bentobox.challenges.commands.admin.Challenges; import world.bentobox.challenges.commands.admin.ChallengesAdminCommand; import world.bentobox.challenges.config.Settings; +import world.bentobox.challenges.database.object.ChallengeLevel; import world.bentobox.challenges.handlers.ChallengeDataRequestHandler; import world.bentobox.challenges.handlers.ChallengeListRequestHandler; import world.bentobox.challenges.handlers.CompletedChallengesRequestHandler; @@ -361,6 +362,22 @@ public class ChallengesAddon extends Addon { gameMode + "_challenge_locked_level_count", user -> String.valueOf(this.challengesManager.getLevelCount(world) - this.challengesManager.getUnlockedLevelCount(user, world))); + + // Latest challenge level name placeholder + this.getPlugin().getPlaceholdersManager().registerPlaceholder(this, + gameMode + "_challenge_latest_level_name", + user -> { + ChallengeLevel level = this.challengesManager.getLatestUnlockedLevel(user, world); + return level != null ? level.getFriendlyName() : ""; + }); + + // Latest challenge level id placeholder + this.getPlugin().getPlaceholdersManager().registerPlaceholder(this, + gameMode + "_challenge_latest_level_id", + user -> { + ChallengeLevel level = this.challengesManager.getLatestUnlockedLevel(user, world); + return level != null ? level.getUniqueId() : ""; + }); } diff --git a/src/main/java/world/bentobox/challenges/ChallengesManager.java b/src/main/java/world/bentobox/challenges/ChallengesManager.java index 544e8af..26e7653 100644 --- a/src/main/java/world/bentobox/challenges/ChallengesManager.java +++ b/src/main/java/world/bentobox/challenges/ChallengesManager.java @@ -1514,6 +1514,27 @@ public class ChallengesManager } + /** + * This method returns latest ChallengeLevel object that is unlocked. + * @param user user who latest unlocked level must be returned. + * @param world World where level operates. + * @return ChallengeLevel for latest unlocked level. + */ + @Nullable + public ChallengeLevel getLatestUnlockedLevel(User user, World world) + { + LevelStatus lastStatus = null; + + for (Iterator statusIterator = this.getAllChallengeLevelStatus(user, world).iterator(); + statusIterator.hasNext() && (lastStatus == null || !lastStatus.isUnlocked());) + { + lastStatus = statusIterator.next(); + } + + return lastStatus != null ? lastStatus.getLevel() : null; + } + + // --------------------------------------------------------------------- // Section: Challenges related methods // ---------------------------------------------------------------------