77import net .minecraft .item .Item ;
88import net .minecraft .util .Identifier ;
99import net .minecraft .util .registry .Registry ;
10+ import net .minecraftforge .fml .javafmlmod .FMLJavaModLoadingContext ;
11+ import net .minecraftforge .registries .DeferredRegister ;
12+ import net .minecraftforge .registries .IForgeRegistryEntry ;
1013
1114/**
1215 * An Annotation Based Registration Library.
@@ -28,16 +31,19 @@ public class Matrix {
2831 * @param registry The registry that entries should be registered to.
2932 */
3033 @ SuppressWarnings ({"unchecked" , "rawtypes" })
31- public static void register (Class <?> clazz , Registry <?> registry ) {
32- Registrar registrar = clazz .getAnnotation (Registrar .class );
34+ public static < T extends IForgeRegistryEntry < T >> void register (Class <?> target , Class < T > type ) {
35+ Registrar registrar = target .getAnnotation (Registrar .class );
3336 if (registrar == null ) {
3437 return ;
3538 }
3639
3740 String modid = registrar .modid ();
3841 Class <?> element = registrar .element ();
3942
40- Arrays .stream (clazz .getFields ())
43+ DeferredRegister <T > deferredRegister = DeferredRegister .create (type , modid );
44+ deferredRegister .register (FMLJavaModLoadingContext .get ().getModEventBus ());
45+
46+ Arrays .stream (target .getFields ())
4147 .filter (field -> field .isAnnotationPresent (RegistryEntry .class )
4248 && Modifier .isPublic (field .getModifiers ())
4349 && Modifier .isStatic (field .getModifiers ())
@@ -46,8 +52,8 @@ public static void register(Class<?> clazz, Registry<?> registry) {
4652 )
4753 .forEach (field -> {
4854 try {
49- Object value = field .get (null );
50- Registry .register (( Registry ) registry , new Identifier ( modid , field .getAnnotation (RegistryEntry .class ).value ()), element . cast ( value ) );
55+ T value = ( T ) field .get (null );
56+ deferredRegister .register (field .getAnnotation (RegistryEntry .class ).value (), () -> value );
5157 if (value instanceof BlockItem ) {
5258 Item .BLOCK_ITEMS .put (((BlockItem ) value ).getBlock (), (Item ) value );
5359 }
0 commit comments