mirror of
https://github.com/BentoBoxWorld/Challenges.git
synced 2024-11-28 13:36:06 +01:00
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:
parent
10a5dc1940
commit
8711d7ad08
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user