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.
|
* This comparator orders challenges by their level, order and name.
|
||||||
*/
|
*/
|
||||||
private final Comparator<Challenge> challengeComparator = (o1, o2) -> {
|
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())
|
return Integer.compare(o1.getOrder(), o2.getOrder());
|
||||||
{
|
}
|
||||||
// If orders are equal, sort by unique id
|
else if (o1Level == null)
|
||||||
return o1.getUniqueId().compareToIgnoreCase(o2.getUniqueId());
|
{
|
||||||
}
|
return -1;
|
||||||
else
|
}
|
||||||
{
|
else if (o2Level == null)
|
||||||
// If levels are equal, sort them by order numbers.
|
{
|
||||||
return Integer.compare(o1.getOrder(), o2.getOrder());
|
return 1;
|
||||||
}
|
}
|
||||||
|
else if (o1Level.equals(o2Level))
|
||||||
|
{
|
||||||
|
return Integer.compare(o1.getOrder(), o2.getOrder());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (o1.getLevel().isEmpty() || o2.getLevel().isEmpty())
|
return Integer.compare(o1Level.getOrder(), o2Level.getOrder());
|
||||||
{
|
|
||||||
// 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user