]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blobdiff - src/main/java/com/irtimaled/bbor/common/ReflectionHelper.java
Setup for 1.15.2-Fabric
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / common / ReflectionHelper.java
index 29117518e6ff45919db043726dd898fed48eb022..a350d459ba9814dcecd6ea43a369cbaf5f42ae03 100644 (file)
@@ -1,5 +1,6 @@
 package com.irtimaled.bbor.common;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
@@ -50,4 +51,26 @@ public class ReflectionHelper {
         }
         return true;
     }
+
+    public static <T, R> Function<T, R> getPrivateInstanceBuilder(Class<R> clazz, Class<T> parameter) {
+        Constructor<R> constructor = findConstructor(clazz, parameter);
+        if (constructor == null) return obj -> null;
+
+        constructor.setAccessible(true);
+        return obj -> {
+            try {
+                return (R) constructor.newInstance(obj);
+            } catch (Exception ignored) {
+                return null;
+            }
+        };
+    }
+
+    private static <T> Constructor<T> findConstructor(Class<T> clazz, Class<?>... parameters) {
+        try {
+            return clazz.getDeclaredConstructor(parameters);
+        } catch (NoSuchMethodException ignored) {
+            return null;
+        }
+    }
 }