aboutsummaryrefslogtreecommitdiff
path: root/api/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/main/java')
-rw-r--r--api/src/main/java/me/shedaniel/rei/impl/ClientInternals.java14
-rw-r--r--api/src/main/java/me/shedaniel/rei/impl/Internals.java14
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