mirror of
https://github.com/BentoBoxWorld/Challenges.git
synced 2025-02-07 16:02:29 +01:00
Solves "Comparison method violates its general contract!" crash.
I reworked a comparator for challenges a bit. I did not find the reason why previous was wrong, as it should return the same result as the new one, but for some reason this works, and previous do not. Fixes #296
This commit is contained in:
parent
218e5fc6c4
commit
26fb55748f
@ -113,41 +113,28 @@ public class ChallengesManager
|
||||
* This comparator orders challenges by their level, order and name.
|
||||
*/
|
||||
private final Comparator<Challenge> challengeComparator = (o1, o2) -> {
|
||||
if (o1.getLevel().equals(o2.getLevel()))
|
||||
ChallengeLevel o1Level = this.getLevel(o1.getLevel());
|
||||
ChallengeLevel o2Level = this.getLevel(o2.getLevel());
|
||||
|
||||
if (o1Level == null && o2Level == null)
|
||||
{
|
||||
if (o1.getOrder() == o2.getOrder())
|
||||
{
|
||||
// If orders are equal, sort by unique id
|
||||
return o1.getUniqueId().compareToIgnoreCase(o2.getUniqueId());
|
||||
}
|
||||
else
|
||||
{
|
||||
// If levels are equal, sort them by order numbers.
|
||||
return Integer.compare(o1.getOrder(), o2.getOrder());
|
||||
}
|
||||
return Integer.compare(o1.getOrder(), o2.getOrder());
|
||||
}
|
||||
else if (o1Level == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (o2Level == null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if (o1Level.equals(o2Level))
|
||||
{
|
||||
return Integer.compare(o1.getOrder(), o2.getOrder());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (o1.getLevel().isEmpty() || o2.getLevel().isEmpty())
|
||||
{
|
||||
// If exist free level challenge, then it should be at the start.
|
||||
return Boolean.compare(o2.getLevel().isEmpty(), o1.getLevel().isEmpty());
|
||||
}
|
||||
else
|
||||
{
|
||||
ChallengeLevel o1Level = this.getLevel(o1.getLevel());
|
||||
ChallengeLevel o2Level = this.getLevel(o2.getLevel());
|
||||
|
||||
if (o1Level == null || o2Level == null)
|
||||
{
|
||||
return Boolean.compare(o1Level == null, o2Level == null);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Sort by challenges level order numbers
|
||||
return Integer.compare(o1Level.getOrder(), o2Level.getOrder());
|
||||
}
|
||||
}
|
||||
return Integer.compare(o1Level.getOrder(), o2Level.getOrder());
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user