-
Notifications
You must be signed in to change notification settings - Fork 0
/
RegistryUtils.java
62 lines (50 loc) · 2.21 KB
/
RegistryUtils.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package org.auioc.mods.arnicalib.utils.game;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import org.auioc.mods.arnicalib.api.game.registry.IHRegistry;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistryEntry;
import net.minecraftforge.registries.IForgeRegistryEntry;
import net.minecraftforge.registries.RegistryObject;
public class RegistryUtils {
public static final Predicate<ForgeRegistryEntry<?>> IS_VANILLA = (entry) -> entry.getRegistryName().getNamespace().equals("minecraft");
public static <T extends IForgeRegistryEntry<T>> List<T> getAllRegistryObjects(DeferredRegister<T> deferredRegister) {
return deferredRegister.getEntries().stream().map(RegistryObject::get).toList();
}
/**
* For special use only, please use {@link org.auioc.mods.arnicalib.utils.game.RegistryUtils#getAllRegistryObjects(DeferredRegister)} instead generally.
*/
@SuppressWarnings("unchecked")
public static <T extends IForgeRegistryEntry<? super T>> List<T> getAllRegistryObjects(Class<? extends IHRegistry> clazz, Class<T> type) {
List<T> list = new ArrayList<T>();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (!(Modifier.isFinal(field.getModifiers()))) {
continue;
}
Type gType = field.getGenericType();
if (!(gType instanceof ParameterizedType)) {
continue;
}
ParameterizedType pType = (ParameterizedType) gType;
if (!pType.getRawType().equals(RegistryObject.class)) {
continue;
}
if (!pType.getActualTypeArguments()[0].equals(type)) {
continue;
}
try {
Object object = field.get(null);
list.add(((RegistryObject<T>) object).get());
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
return list;
}
}