Skip to content

Commit

Permalink
Rework Challenge, ChallengeLevel and ChallengesPlayerData classes.
Browse files Browse the repository at this point in the history
Challenge now will not know their world, as it is not necessary.
Remove ICON type, as it is useless.
Rename Level to Other, as under it will be not only level things.
Rename slot to order, as it was weird that users could define slot but not order. Order is easier to understand and use.

ChallengesLevel now knows all their levels.
Each challenge level only will be for single world.
Rename some variables.

ChallengesPlayerData was just adapted with changes in challenges and level classes.
  • Loading branch information
BONNe committed Jan 23, 2019
1 parent dba5a44 commit f75e4e0
Show file tree
Hide file tree
Showing 12 changed files with 1,408 additions and 730 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;

import world.bentobox.bentobox.util.ItemParser;
import world.bentobox.challenges.database.object.ChallengeLevel;
import world.bentobox.challenges.database.object.Challenge;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.util.Util;
import world.bentobox.challenges.utils.GuiUtils;


/**
* Imports challenges
Expand Down Expand Up @@ -64,13 +67,13 @@ public boolean importChallenges(User user, World world, boolean overwrite) {
user.sendMessage("challenges.admin.import.no-load","[message]", e.getMessage());
return false;
}
makeLevels(user);
makeLevels(user, world, overwrite);
makeChallenges(user, world, overwrite);
addon.getChallengesManager().save();
return true;
}

private void makeLevels(User user) {
private void makeLevels(User user, World world, boolean overwrite) {
// Parse the levels
String levels = chal.getString("challenges.levels", "");
if (!levels.isEmpty()) {
Expand All @@ -82,15 +85,16 @@ private void makeLevels(User user) {
challengeLevel.setFriendlyName(level);
challengeLevel.setUniqueId(level);
challengeLevel.setOrder(order++);
challengeLevel.setWaiveramount(chal.getInt("challenges.waiveramount"));
challengeLevel.setWorld(Util.getWorld(world).getName());
challengeLevel.setWaiverAmount(chal.getInt("challenges.waiveramount"));
// Check if there is a level reward
ConfigurationSection unlock = chal.getConfigurationSection("challenges.levelUnlock." + level);
if (unlock != null) {
challengeLevel.setUnlockMessage(unlock.getString("message"));
challengeLevel.setRewardDescription(unlock.getString("rewardDesc",""));
challengeLevel.setRewardText(unlock.getString("rewardDesc",""));
challengeLevel.setRewardItems(parseItems(unlock.getString("itemReward","")));
challengeLevel.setMoneyReward(unlock.getInt("moneyReward"));
challengeLevel.setExpReward(unlock.getInt("expReward"));
challengeLevel.setRewardMoney(unlock.getInt("moneyReward"));
challengeLevel.setRewardExperience(unlock.getInt("expReward"));
challengeLevel.setRewardCommands(unlock.getStringList("commands"));
}
addon.getChallengesManager().storeLevel(challengeLevel);
Expand All @@ -103,7 +107,6 @@ private void makeLevels(User user) {
/**
* Imports challenges
* @param overwrite
* @param args
*/
private void makeChallenges(User user, World world, boolean overwrite) {
int size = 0;
Expand All @@ -115,41 +118,42 @@ private void makeChallenges(User user, World world, boolean overwrite) {
newChallenge.setDeployed(true);
ConfigurationSection details = chals.getConfigurationSection(challenge);
newChallenge.setFriendlyName(details.getString("friendlyname", challenge));
newChallenge.setWorld(Util.getWorld(world).getName());
newChallenge.setDescription(addon.getChallengesManager().stringSplit(details.getString("description", "")));
newChallenge.setIcon(new ParseItem(addon, details.getString("icon") + ":1").getItem());
newChallenge.setLevel(details.getString("level", ChallengesManager.FREE));
newChallenge.setIcon(ItemParser.parse(details.getString("icon") + ":1"));
newChallenge.setChallengeType(Challenge.ChallengeType.valueOf(details.getString("type","INVENTORY").toUpperCase()));
newChallenge.setTakeItems(details.getBoolean("takeItems",true));
newChallenge.setRewardText(details.getString("rewardText", ""));
newChallenge.setRewardCommands(details.getStringList("rewardcommands"));
newChallenge.setRewardMoney(details.getInt("moneyReward",0));
newChallenge.setRewardExp(details.getInt("expReward"));
newChallenge.setRewardExperience(details.getInt("expReward"));
newChallenge.setRepeatable(details.getBoolean("repeatable"));
newChallenge.setRepeatRewardText(details.getString("repeatRewardText",""));
newChallenge.setRepeatMoneyReward(details.getInt("repearMoneyReward"));
newChallenge.setRepeatExpReward(details.getInt("repeatExpReward"));
newChallenge.setRepeatExperienceReward(details.getInt("repeatExpReward"));
newChallenge.setRepeatRewardCommands(details.getStringList("repeatrewardcommands"));
newChallenge.setMaxTimes(details.getInt("maxtimes"));
// TODO reset allowed
newChallenge.setReqMoney(details.getInt("requiredMoney"));
newChallenge.setReqExp(details.getInt("requiredExp"));
newChallenge.setRequiredMoney(details.getInt("requiredMoney"));
newChallenge.setRequiredExperience(details.getInt("requiredExp"));
String reqItems = details.getString("requiredItems","");
if (newChallenge.getChallengeType().equals(Challenge.ChallengeType.INVENTORY)) {
newChallenge.setRequiredItems(parseItems(reqItems));
} else if (newChallenge.getChallengeType().equals(Challenge.ChallengeType.LEVEL)) {
newChallenge.setReqIslandlevel(Long.parseLong(reqItems));
} else if (newChallenge.getChallengeType().equals(Challenge.ChallengeType.OTHER)) {
newChallenge.setRequiredIslandLevel(Long.parseLong(reqItems));
} else if (newChallenge.getChallengeType().equals(Challenge.ChallengeType.ISLAND)) {
parseEntities(newChallenge, reqItems);
}
newChallenge.setRewardItems(parseItems(details.getString("itemReward")));
newChallenge.setRepeatItemReward(parseItems(details.getString("repeatItemReward")));
// Save
this.addon.getChallengesManager().addChallengeToLevel(newChallenge,
addon.getChallengesManager().getLevel(Util.getWorld(world).getName() + "_" + details.getString("level")));

if (addon.getChallengesManager().storeChallenge(newChallenge, overwrite, user, false)) {
size++;
}
}
addon.getChallengesManager().sortChallenges();

user.sendMessage("challenges.admin.import.number", "[number]", String.valueOf(size));
}

Expand Down Expand Up @@ -180,15 +184,12 @@ private List<ItemStack> parseItems(String reqList) {
List<ItemStack> result = new ArrayList<>();
if (!reqList.isEmpty()) {
for (String s : reqList.split(" ")) {
ItemStack item = new ParseItem(addon,s).getItem();
ItemStack item = ItemParser.parse(s);
if (item != null) {
result.add(item);
}
}
}
return result;
}



}
}
32 changes: 22 additions & 10 deletions src/main/java/world/bentobox/challenges/ChallengesManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ private void addPlayer(User user) {
*/
public long checkChallengeTimes(User user, Challenge challenge, World world) {
addPlayer(user);
return playerData.get(user.getUniqueId()).getTimes(world, challenge.getUniqueId());
return playerData.get(user.getUniqueId()).getTimes(challenge.getUniqueId());
}

/**
Expand Down Expand Up @@ -189,7 +189,7 @@ public List<String> getAllChallengesList() {
*/
public List<String> getAllChallengesList(World world) {
List<String> result = new ArrayList<>();
challengeMap.values().forEach(ch -> ch.stream().filter(c -> c.getWorld().equals(Util.getWorld(world).getName())).forEach(c -> result.add(c.getUniqueId())));
challengeMap.values().forEach(ch -> ch.stream().filter(c -> c.getUniqueId().startsWith(Util.getWorld(world).getName())).forEach(c -> result.add(c.getUniqueId())));
return result;
}

Expand Down Expand Up @@ -230,10 +230,10 @@ public List<LevelStatus> getChallengeLevelStatus(User user, World world)
for (Entry<ChallengeLevel, Set<Challenge>> entry : this.challengeMap.entrySet())
{
// Check how much challenges must be done in previous level.
int challengesToDo = Math.max(0, entry.getKey().getWaiveramount() - doneChallengeCount);
int challengesToDo = Math.max(0, entry.getKey().getWaiverAmount() - doneChallengeCount);

doneChallengeCount = (int) entry.getValue().stream().filter(
ch -> playerData.isChallengeDone(world, ch.getUniqueId())).count();
ch -> playerData.isChallengeDone(ch.getUniqueId())).count();

// Create result class with the data
result.add(new LevelStatus(
Expand Down Expand Up @@ -270,7 +270,7 @@ public Set<Challenge> getChallenges(String level, World world) {
Optional<ChallengeLevel> lv = challengeMap.keySet().stream().filter(l -> l.getUniqueId().equalsIgnoreCase(level)).findFirst();
// Get the challenges applicable to this world
return lv.isPresent() ? challengeMap.get(lv.get()).stream()
.filter(c -> c.getWorld().equalsIgnoreCase(worldName) || c.getWorld().isEmpty()).collect(Collectors.toSet())
.filter(c -> c.getUniqueId().startsWith(worldName)).collect(Collectors.toSet())
: new HashSet<>();
}

Expand Down Expand Up @@ -319,7 +319,7 @@ public boolean isChallenge(String name) {
*/
public boolean isChallenge(World world, String name) {
for (Set<Challenge> ch : challengeMap.values()) {
if (ch.stream().filter(c -> c.getWorld().equals(Util.getWorld(world).getName())).anyMatch(c -> c.getUniqueId().equalsIgnoreCase(name))) {
if (ch.stream().filter(c -> c.getUniqueId().startsWith(Util.getWorld(world).getName())).anyMatch(c -> c.getUniqueId().equalsIgnoreCase(name))) {
return true;
}
}
Expand All @@ -328,13 +328,12 @@ public boolean isChallenge(World world, String name) {

/**
* Checks if a challenge is complete or not
* @param uniqueId - unique ID - player's UUID
* @param challengeName - Challenge uniqueId
* @return - true if completed
*/
public boolean isChallengeComplete(User user, String challengeName, World world) {
addPlayer(user);
return playerData.get(user.getUniqueId()).isChallengeDone(world, challengeName);
return playerData.get(user.getUniqueId()).isChallengeDone(challengeName);
}

/**
Expand Down Expand Up @@ -396,7 +395,7 @@ private void savePlayer(UUID playerUUID) {
*/
public void setChallengeComplete(User user, String challengeUniqueId, World world) {
addPlayer(user);
playerData.get(user.getUniqueId()).setChallengeDone(world, challengeUniqueId);
playerData.get(user.getUniqueId()).setChallengeDone(challengeUniqueId);
// Save
savePlayer(user.getUniqueId());
}
Expand All @@ -409,7 +408,7 @@ public void setChallengeComplete(User user, String challengeUniqueId, World worl
*/
public void setResetChallenge(User user, String challengeUniqueId, World world) {
addPlayer(user);
playerData.get(user.getUniqueId()).setChallengeTimes(world, challengeUniqueId, 0);
playerData.get(user.getUniqueId()).setChallengeTimes(challengeUniqueId, 0);
// Save
savePlayer(user.getUniqueId());
}
Expand Down Expand Up @@ -637,4 +636,17 @@ public List<Player> getPlayers(World world)

return playerList;
}



public ChallengeLevel getLevel(String level)
{
return null;
}


public void addChallengeToLevel(Challenge newChallenge, ChallengeLevel level)
{

}
}

0 comments on commit f75e4e0

Please sign in to comment.