diff options
Diffstat (limited to 'api/src/main/java')
| -rw-r--r-- | api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java | 14 | ||||
| -rw-r--r-- | api/src/main/java/me/shedaniel/rei/impl/Internals.java | 14 |
2 files changed, 26 insertions, 2 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java b/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java index 36456399b..0d0fd45f4 100644 --- a/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java +++ b/api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java @@ -53,6 +53,7 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; import java.util.Collection; import java.util.List; import java.util.function.BiConsumer; @@ -84,7 +85,18 @@ public final class ClientInternals { @ApiStatus.Internal public static <T> void attachInstance(T instance, Class<T> clazz) { - attachInstanceSupplier(instance, clazz.getSimpleName()); + try { + for (Field field : ClientInternals.class.getDeclaredFields()) { + if (field.getGenericType() instanceof ParameterizedType && ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0] == clazz) { + field.setAccessible(true); + field.set(null, (Supplier<T>) () -> instance); + return; + } + } + throw new RuntimeException("Failed to attach " + instance + " with field type: " + clazz); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } } @ApiStatus.Internal diff --git a/api/src/main/java/me/shedaniel/rei/impl/Internals.java b/api/src/main/java/me/shedaniel/rei/impl/Internals.java index 1e64c2c57..c191a5b31 100644 --- a/api/src/main/java/me/shedaniel/rei/impl/Internals.java +++ b/api/src/main/java/me/shedaniel/rei/impl/Internals.java @@ -41,6 +41,7 @@ import net.minecraft.util.Unit; import org.jetbrains.annotations.ApiStatus; import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; import java.util.function.Function; import java.util.function.Supplier; @@ -62,7 +63,18 @@ public final class Internals { @ApiStatus.Internal public static <T> void attachInstance(T instance, Class<T> clazz) { - attachInstanceSupplier(instance, clazz.getSimpleName()); + try { + for (Field field : Internals.class.getDeclaredFields()) { + if (field.getGenericType() instanceof ParameterizedType && ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0] == clazz) { + field.setAccessible(true); + field.set(null, (Supplier<T>) () -> instance); + return; + } + } + throw new RuntimeException("Failed to attach " + instance + " with field type: " + clazz); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } } @ApiStatus.Internal |
