mirror of
https://github.com/BentoBoxWorld/Challenges.git
synced 2024-09-25 13:12:57 +02: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,42 +113,29 @@ 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()))
|
|
||||||
{
|
|
||||||
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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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 o1Level = this.getLevel(o1.getLevel());
|
||||||
ChallengeLevel o2Level = this.getLevel(o2.getLevel());
|
ChallengeLevel o2Level = this.getLevel(o2.getLevel());
|
||||||
|
|
||||||
if (o1Level == null || o2Level == null)
|
if (o1Level == null && o2Level == null)
|
||||||
{
|
{
|
||||||
return Boolean.compare(o1Level == null, o2Level == null);
|
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
|
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