Skip to content

Commit

Permalink
Fix NPE when opening ChallengesGUI (#116).
Browse files Browse the repository at this point in the history
Add code that removes challenges level from all its challenges, if level is deleted.
Add protection code that shows admins that something is not correct if challenge level is not in database.
  • Loading branch information
BONNe committed May 9, 2019
1 parent dd56842 commit 6c10fcd
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 5 deletions.
14 changes: 14 additions & 0 deletions src/main/java/world/bentobox/challenges/ChallengesManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -1462,6 +1462,20 @@ public void deleteChallengeLevel(ChallengeLevel challengeLevel)
if (this.levelCacheData.containsKey(challengeLevel.getUniqueId()))
{
this.levelCacheData.remove(challengeLevel.getUniqueId());

// Remove challenge level from challenges object.
if (!challengeLevel.getChallenges().isEmpty())
{
challengeLevel.getChallenges().forEach(challengeID -> {
Challenge challenge = this.getChallenge(challengeID);

if (challenge != null)
{
challenge.setLevel(ChallengesManager.FREE);
}
});
}

this.levelDatabase.deleteObject(challengeLevel);
}
}
Expand Down
15 changes: 13 additions & 2 deletions src/main/java/world/bentobox/challenges/panel/CommonGUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -298,8 +298,19 @@ protected List<String> generateChallengeDescription(Challenge challenge, Player
{
case 'l':
{
result.add(this.user.getTranslation("challenges.gui.challenge-description.level",
"[level]", manager.getLevel(challenge).getFriendlyName()));
ChallengeLevel level = manager.getLevel(challenge);

if (level == null)
{
result.add(this.user.getTranslation("challenges.errors.missing-level",
"[level]", challenge.getLevel()));
}
else
{
result.add(this.user.getTranslation("challenges.gui.challenge-description.level",
"[level]", level.getFriendlyName()));
}

break;
}
case 's':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -359,12 +359,13 @@ public ChallengeResult build(int maxTimes)
// Mark as complete
this.manager.setChallengeComplete(this.user, this.world, this.challenge, result.getFactor());

// Check level completion.
if (!result.wasCompleted())
// Check level completion for non-free challenges
if (!result.wasCompleted() &&
!this.challenge.getLevel().equals(ChallengesManager.FREE))
{
ChallengeLevel level = this.manager.getLevel(this.challenge);

if (!this.manager.isLevelCompleted(this.user, this.world, level))
if (level != null && !this.manager.isLevelCompleted(this.user, this.world, level))
{
if (this.manager.validateLevelCompletion(this.user, this.world, level))
{
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/locales/en-US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,7 @@ challenges:
defaults-file-exist: '&cdefault.json already exists. Use overwrite mode to replace it!'
defaults-file-error: '&cThere was an error while creating default.json file! Check console!'
no-challenges: '&cChallenges are not implemented in current world!'
missing-level: '&cChallenge Level [level] is not defined in database. It may case some errors!'
protection:
flags:
CHALLENGES_ISLAND_PROTECTION:
Expand Down

0 comments on commit 6c10fcd

Please sign in to comment.