2424package org .incendo .cloud .bukkit .internal ;
2525
2626import io .leangen .geantyref .GenericTypeReflector ;
27- import java .lang .reflect .Constructor ;
27+ import java .lang .reflect .Executable ;
2828import java .lang .reflect .Field ;
2929import java .lang .reflect .Method ;
3030import java .lang .reflect .Modifier ;
@@ -51,10 +51,7 @@ public final class RegistryReflection {
5151 "net.minecraft.resources.MinecraftKey" ,
5252 "net.minecraft.resources.ResourceLocation"
5353 );
54- private static final Constructor <?> RESOURCE_LOCATION_CTR = CraftBukkitReflection .needConstructor (
55- RESOURCE_LOCATION_CLASS ,
56- String .class
57- );
54+ private static final Executable NEW_RESOURCE_LOCATION ;
5855
5956 private RegistryReflection () {
6057 }
@@ -65,6 +62,7 @@ private RegistryReflection() {
6562 REGISTRY_REGISTRY = null ;
6663 REGISTRY_GET = null ;
6764 REGISTRY_KEY = null ;
65+ NEW_RESOURCE_LOCATION = null ;
6866 } else {
6967 registryClass = CraftBukkitReflection .firstNonNullOrThrow (
7068 () -> "Registry" ,
@@ -90,6 +88,13 @@ private RegistryReflection() {
9088 .filter (m -> m .getParameterCount () == 0 && m .getReturnType ().equals (resourceKeyClass ))
9189 .findFirst ()
9290 .orElse (null );
91+
92+ NEW_RESOURCE_LOCATION = CraftBukkitReflection .firstNonNullOrThrow (
93+ () -> "Could not find ResourceLocation#parse(String) or ResourceLocation#<init>(String)" ,
94+ CraftBukkitReflection .findConstructor (RESOURCE_LOCATION_CLASS , String .class ), // <= 1.20.6
95+ CraftBukkitReflection .findMethod (RESOURCE_LOCATION_CLASS , "parse" , String .class ), // 1.21+
96+ CraftBukkitReflection .findMethod (RESOURCE_LOCATION_CLASS , "a" , String .class )
97+ );
9398 }
9499 }
95100
@@ -122,7 +127,7 @@ public static Object registryByName(final String name) {
122127
123128 public static Object createResourceLocation (final String str ) {
124129 try {
125- return RESOURCE_LOCATION_CTR . newInstance ( str );
130+ return CraftBukkitReflection . invokeConstructorOrStaticMethod ( NEW_RESOURCE_LOCATION , str );
126131 } catch (final ReflectiveOperationException e ) {
127132 throw new RuntimeException (e );
128133 }
0 commit comments