33import ch .njol .skript .classes .ClassInfo ;
44import ch .njol .skript .expressions .base .EventValueExpression ;
55import ch .njol .skript .lang .DefaultExpression ;
6+ import io .papermc .paper .registry .RegistryAccess ;
7+ import io .papermc .paper .registry .RegistryKey ;
68import org .bukkit .Keyed ;
79import org .bukkit .Registry ;
10+ import org .jetbrains .annotations .NotNull ;
11+ import org .jetbrains .annotations .Nullable ;
812
13+ import java .util .Iterator ;
914import java .util .function .Consumer ;
15+ import java .util .function .Supplier ;
1016
1117/**
1218 * This class can be used for easily creating ClassInfos for {@link Registry}s.
1622 */
1723public class RegistryClassInfo <R extends Keyed > extends ClassInfo <R > {
1824
25+ private final @ Nullable RegistryKey <R > registryKey ;
26+
27+ /**
28+ * @param registryClass The registry class
29+ * @param registryKey The registry key
30+ * @param codeName The name used in patterns
31+ * @param languageNode The language node of the type
32+ */
33+ public RegistryClassInfo (Class <R > registryClass , RegistryKey <R > registryKey , String codeName , String languageNode ) {
34+ this (registryClass , registryKey , RegistryAccess .registryAccess ().getRegistry (registryKey ), codeName ,
35+ languageNode , null , null );
36+ }
37+
38+ /**
39+ * @param registryClass The registry class
40+ * @param registryKey The registry key
41+ * @param codeName The name used in patterns
42+ * @param languageNode The language node of the type
43+ * @param parseCallback A consumer to run on a successful parse.
44+ */
45+ public RegistryClassInfo (Class <R > registryClass , RegistryKey <R > registryKey , String codeName , String languageNode ,
46+ Consumer <R > parseCallback ) {
47+ this (registryClass , registryKey , RegistryAccess .registryAccess ().getRegistry (registryKey ), codeName ,
48+ languageNode , null , parseCallback );
49+ }
50+
51+ private RegistryClassInfo (Class <R > registryClass , @ Nullable RegistryKey <R > registryKey , Registry <R > registry ,
52+ String codeName , String languageNode , @ Nullable DefaultExpression <R > defaultExpression ,
53+ @ Nullable Consumer <R > parseCallback ) {
54+ super (registryClass , codeName );
55+
56+ if (defaultExpression == null ) {
57+ defaultExpression = new EventValueExpression <>(registryClass );
58+ }
59+ if (parseCallback == null ) {
60+ parseCallback = ignored -> { };
61+ }
62+
63+ this .registryKey = registryKey ;
64+ RegistryParser <R > registryParser = new RegistryParser <>(registry , languageNode , parseCallback );
65+ usage (registryParser .getCombinedPatterns ())
66+ .supplier (registry ::iterator )
67+ .serializer (new RegistrySerializer <>(registry ))
68+ .defaultExpression (defaultExpression )
69+ .parser (registryParser );
70+ }
71+
72+ public @ Nullable RegistryKey <R > registryKey () {
73+ return registryKey ;
74+ }
75+
76+ @ Override
77+ public @ NotNull RegistryParser <R > getParser () {
78+ //noinspection ConstantConditions, unchecked
79+ return (RegistryParser <R >) super .getParser ();
80+ }
81+
82+ @ Override
83+ public @ NotNull RegistrySerializer <R > getSerializer () {
84+ //noinspection ConstantConditions, unchecked
85+ return (RegistrySerializer <R >) super .getSerializer ();
86+ }
87+
88+ @ Override
89+ public @ NotNull Supplier <Iterator <R >> getSupplier () {
90+ //noinspection ConstantConditions
91+ return super .getSupplier ();
92+ }
93+
94+ /*
95+ * Legacy Constructors
96+ */
97+
1998 /**
2099 * @param registryClass The registry class
21100 * @param registry The registry
22101 * @param codeName The name used in patterns
23102 * @param languageNode The language node of the type
103+ * @deprecated Use {@link #RegistryClassInfo(Class, RegistryKey, String, String)}.
24104 */
105+ @ Deprecated (since = "INSERT VERSION" , forRemoval = true )
25106 public RegistryClassInfo (Class <R > registryClass , Registry <R > registry , String codeName , String languageNode ) {
26107 this (registryClass , registry , codeName , languageNode , new EventValueExpression <>(registryClass ));
27108 }
@@ -32,7 +113,9 @@ public RegistryClassInfo(Class<R> registryClass, Registry<R> registry, String co
32113 * @param codeName The name used in patterns
33114 * @param languageNode The language node of the type
34115 * @param parseCallback A consumer to run on a successful parse.
116+ * @deprecated Use {@link #RegistryClassInfo(Class, RegistryKey, String, String, Consumer)}.
35117 */
118+ @ Deprecated (since = "INSERT VERSION" , forRemoval = true )
36119 public RegistryClassInfo (Class <R > registryClass , Registry <R > registry , String codeName , String languageNode , Consumer <R > parseCallback ) {
37120 this (registryClass , registry , codeName , languageNode , new EventValueExpression <>(registryClass ), parseCallback );
38121 }
@@ -43,8 +126,11 @@ public RegistryClassInfo(Class<R> registryClass, Registry<R> registry, String co
43126 * @param codeName The name used in patterns
44127 * @param languageNode The language node of the type
45128 * @param defaultExpression The default expression of the type
129+ * @deprecated Use {@link #RegistryClassInfo(Class, RegistryKey, String, String)} with {@link #defaultExpression(DefaultExpression)}.
46130 */
47- public RegistryClassInfo (Class <R > registryClass , Registry <R > registry , String codeName , String languageNode , DefaultExpression <R > defaultExpression ) {
131+ @ Deprecated (since = "INSERT VERSION" , forRemoval = true )
132+ public RegistryClassInfo (Class <R > registryClass , Registry <R > registry , String codeName , String languageNode ,
133+ DefaultExpression <R > defaultExpression ) {
48134 this (registryClass , registry , codeName , languageNode , defaultExpression , ignored -> {});
49135 }
50136
@@ -55,15 +141,13 @@ public RegistryClassInfo(Class<R> registryClass, Registry<R> registry, String co
55141 * @param languageNode The language node of the type
56142 * @param defaultExpression The default expression of the type
57143 * @param parseCallback A consumer to run on a successful parse.
144+ * @deprecated Use {@link #RegistryClassInfo(Class, RegistryKey, String, String, Consumer)}
145+ * with {@link #defaultExpression(DefaultExpression)}.
58146 */
59- public RegistryClassInfo (Class <R > registryClass , Registry <R > registry , String codeName , String languageNode , DefaultExpression <R > defaultExpression , Consumer <R > parseCallback ) {
60- super (registryClass , codeName );
61- RegistryParser <R > registryParser = new RegistryParser <>(registry , languageNode , parseCallback );
62- usage (registryParser .getCombinedPatterns ())
63- .supplier (registry ::iterator )
64- .serializer (new RegistrySerializer <>(registry ))
65- .defaultExpression (defaultExpression )
66- .parser (registryParser );
147+ @ Deprecated (since = "INSERT VERSION" , forRemoval = true )
148+ public RegistryClassInfo (Class <R > registryClass , Registry <R > registry , String codeName , String languageNode ,
149+ DefaultExpression <R > defaultExpression , Consumer <R > parseCallback ) {
150+ this (registryClass , null , registry , codeName , languageNode , defaultExpression , parseCallback );
67151 }
68152
69153 /**
@@ -89,7 +173,8 @@ public RegistryClassInfo(Class<R> registryClass, Registry<R> registry, String co
89173 * @deprecated {@code registerComparator} is no longer necessary.
90174 */
91175 @ Deprecated (since = "2.16" , forRemoval = true )
92- public RegistryClassInfo (Class <R > registryClass , Registry <R > registry , String codeName , String languageNode , DefaultExpression <R > defaultExpression , boolean registerComparator ) {
176+ public RegistryClassInfo (Class <R > registryClass , Registry <R > registry , String codeName , String languageNode ,
177+ DefaultExpression <R > defaultExpression , boolean registerComparator ) {
93178 this (registryClass , registry , codeName , languageNode , defaultExpression );
94179 }
95180
0 commit comments