Rework Challenges Level Status checking.

In previous code challenges level status holds information for next level. It is fixed now, and current implementation allows to get everything that is needed.
This commit is contained in:
BONNe 2019-01-22 09:10:13 +02:00
parent 10a5dc1940
commit 8711d7ad08

View File

@ -5,6 +5,7 @@ import org.apache.commons.lang.WordUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.*; import java.util.*;
@ -215,26 +216,37 @@ public class ChallengesManager {
* @param world - world to check * @param world - world to check
* @return Level status - how many challenges still to do on which level * @return Level status - how many challenges still to do on which level
*/ */
public List<LevelStatus> getChallengeLevelStatus(User user, World world) { public List<LevelStatus> getChallengeLevelStatus(User user, World world)
addPlayer(user); {
ChallengesPlayerData pd = playerData.get(user.getUniqueId()); this.addPlayer(user);
ChallengesPlayerData playerData = this.playerData.get(user.getUniqueId());
List<LevelStatus> result = new ArrayList<>(); List<LevelStatus> result = new ArrayList<>();
ChallengeLevels previousLevel = null;
// The first level is always unlocked // The first level is always unlocked
boolean isUnlocked = true; ChallengeLevels previousLevel = null;
int doneChallengeCount = Integer.MAX_VALUE;
// For each challenge level, check how many the user has done // For each challenge level, check how many the user has done
for (Entry<ChallengeLevels, Set<Challenges>> en : challengeMap.entrySet()) { for (Entry<ChallengeLevels, Set<Challenges>> entry : this.challengeMap.entrySet())
int total = challengeMap.values().size(); {
int waiverAmount = en.getKey().getWaiveramount(); // Check how much challenges must be done in previous level.
int challengesDone = (int) en.getValue().stream().filter(ch -> pd.isChallengeDone(world, ch.getUniqueId())).count(); int challengesToDo = Math.max(0, entry.getKey().getWaiveramount() - doneChallengeCount);
int challsToDo = Math.max(0,total - challengesDone - waiverAmount);
boolean complete = challsToDo > 0 ? false : true; doneChallengeCount = (int) entry.getValue().stream().filter(
ch -> playerData.isChallengeDone(world, ch.getUniqueId())).count();
// Create result class with the data // Create result class with the data
result.add(new LevelStatus(en.getKey(), previousLevel, challsToDo, complete, isUnlocked)); result.add(new LevelStatus(
entry.getKey(),
previousLevel,
challengesToDo,
entry.getValue().size() == doneChallengeCount,
challengesToDo <= 0));
// Set up the next level for the next loop // Set up the next level for the next loop
previousLevel = en.getKey(); previousLevel = entry.getKey();
isUnlocked = complete;
} }
return result; return result;
} }
@ -592,4 +604,37 @@ public class ChallengesManager {
{ {
} }
public List<Challenges> getFreeChallenges(User user, World world)
{
return Collections.emptyList();
}
public String getChallengesLevel(Challenges challenge)
{
return "HERE NEED LEVEL NAME";
}
public boolean isChallengeComplete(User user, Challenges challenge)
{
return this.isChallengeComplete(user, challenge.getUniqueId(), user.getWorld());
}
public long checkChallengeTimes(User user, Challenges challenge)
{
return this.checkChallengeTimes(user, challenge, user.getWorld());
}
public List<Player> getPlayers(World world)
{
List<Player> playerList = new ArrayList<>();
return playerList;
}
} }