Skip to content

Commit b9fbbfa

Browse files
Add options for whether to register a comparator in utility ClassInfos (SkriptLang#7286)
1 parent 537087f commit b9fbbfa

File tree

2 files changed

+59
-5
lines changed

2 files changed

+59
-5
lines changed

src/main/java/ch/njol/skript/classes/EnumClassInfo.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,17 @@ public class EnumClassInfo<T extends Enum<T>> extends ClassInfo<T> {
2525
* @param languageNode The language node of the type
2626
*/
2727
public EnumClassInfo(Class<T> enumClass, String codeName, String languageNode) {
28-
this(enumClass, codeName, languageNode, new EventValueExpression<>(enumClass));
28+
this(enumClass, codeName, languageNode, new EventValueExpression<>(enumClass), true);
29+
}
30+
31+
/**
32+
* @param enumClass The class
33+
* @param codeName The name used in patterns
34+
* @param languageNode The language node of the type
35+
* @param registerComparator Whether a default comparator should be registered for this enum's classinfo
36+
*/
37+
public EnumClassInfo(Class<T> enumClass, String codeName, String languageNode, boolean registerComparator) {
38+
this(enumClass, codeName, languageNode, new EventValueExpression<>(enumClass), registerComparator);
2939
}
3040

3141
/**
@@ -35,6 +45,17 @@ public EnumClassInfo(Class<T> enumClass, String codeName, String languageNode) {
3545
* @param defaultExpression The default expression of the type
3646
*/
3747
public EnumClassInfo(Class<T> enumClass, String codeName, String languageNode, DefaultExpression<T> defaultExpression) {
48+
this(enumClass, codeName, languageNode, defaultExpression, true);
49+
}
50+
51+
/**
52+
* @param enumClass The class
53+
* @param codeName The name used in patterns
54+
* @param languageNode The language node of the type
55+
* @param defaultExpression The default expression of the type
56+
* @param registerComparator Whether a default comparator should be registered for this enum's classinfo
57+
*/
58+
public EnumClassInfo(Class<T> enumClass, String codeName, String languageNode, DefaultExpression<T> defaultExpression, boolean registerComparator) {
3859
super(enumClass, codeName);
3960
EnumUtils<T> enumUtils = new EnumUtils<>(enumClass, languageNode);
4061
usage(enumUtils.getAllNames())
@@ -57,8 +78,8 @@ public EnumClassInfo(Class<T> enumClass, String codeName, String languageNode, D
5778
return enumUtils.toString(constant, StringMode.VARIABLE_NAME);
5879
}
5980
});
60-
61-
Comparators.registerComparator(enumClass, enumClass, (o1, o2) -> Relation.get(o1.ordinal() - o2.ordinal()));
81+
if (registerComparator)
82+
Comparators.registerComparator(enumClass, enumClass, (o1, o2) -> Relation.get(o1.ordinal() - o2.ordinal()));
6283
}
6384

6485
}

src/main/java/ch/njol/skript/classes/registry/RegistryClassInfo.java

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,47 @@
1616
*/
1717
public class RegistryClassInfo<R extends Keyed> extends ClassInfo<R> {
1818

19+
/**
20+
* @param registryClass The registry class
21+
* @param registry The registry
22+
* @param codeName The name used in patterns
23+
* @param languageNode The language node of the type
24+
*/
1925
public RegistryClassInfo(Class<R> registryClass, Registry<R> registry, String codeName, String languageNode) {
20-
this(registryClass, registry, codeName, languageNode, new EventValueExpression<>(registryClass));
26+
this(registryClass, registry, codeName, languageNode, new EventValueExpression<>(registryClass), true);
27+
}
28+
29+
/**
30+
* @param registryClass The registry class
31+
* @param registry The registry
32+
* @param codeName The name used in patterns
33+
* @param languageNode The language node of the type
34+
* @param registerComparator Whether a default comparator should be registered for this registry's classinfo
35+
*/
36+
public RegistryClassInfo(Class<R> registryClass, Registry<R> registry, String codeName, String languageNode, boolean registerComparator) {
37+
this(registryClass, registry, codeName, languageNode, new EventValueExpression<>(registryClass), registerComparator);
2138
}
2239

2340
/**
41+
* @param registryClass The registry class
2442
* @param registry The registry
2543
* @param codeName The name used in patterns
44+
* @param languageNode The language node of the type
45+
* @param defaultExpression The default expression of the type
2646
*/
2747
public RegistryClassInfo(Class<R> registryClass, Registry<R> registry, String codeName, String languageNode, DefaultExpression<R> defaultExpression) {
48+
this(registryClass, registry, codeName, languageNode, defaultExpression, true);
49+
}
50+
51+
/**
52+
* @param registryClass The registry class
53+
* @param registry The registry
54+
* @param codeName The name used in patterns
55+
* @param languageNode The language node of the type
56+
* @param defaultExpression The default expression of the type
57+
* @param registerComparator Whether a default comparator should be registered for this registry's classinfo
58+
*/
59+
public RegistryClassInfo(Class<R> registryClass, Registry<R> registry, String codeName, String languageNode, DefaultExpression<R> defaultExpression, boolean registerComparator) {
2860
super(registryClass, codeName);
2961
RegistryParser<R> registryParser = new RegistryParser<>(registry, languageNode);
3062
usage(registryParser.getAllNames())
@@ -33,7 +65,8 @@ public RegistryClassInfo(Class<R> registryClass, Registry<R> registry, String co
3365
.defaultExpression(defaultExpression)
3466
.parser(registryParser);
3567

36-
Comparators.registerComparator(registryClass, registryClass, (o1, o2) -> Relation.get(o1.getKey() == o2.getKey()));
68+
if (registerComparator)
69+
Comparators.registerComparator(registryClass, registryClass, (o1, o2) -> Relation.get(o1.getKey() == o2.getKey()));
3770
}
3871

3972
}

0 commit comments

Comments
 (0)