Wolfizen icon

"Enhanced" CatalogType code

Wolfizen | PRO | 04/22/16 06:23:13 AM UTC | 0 ⭐ | 245 👁️ | Never ⏰ | []
Java |

1.45 KB

|

None

|

0 👍

/

0 👎

        ReflectionUtil.performGlobalReflection(reflections -> reflections.getTypesAnnotatedWith(Catalog.class), catalogClass -> {
            Catalog annotation = catalogClass.getAnnotation(Catalog.class);
            String registryModuleMethod = annotation.registryModuleMethod();
            AdditionalCatalogRegistryModule<?> registryModule;
            if (!registryModuleMethod.isEmpty()) {
                registryModule = ReflectionUtil.callMethodChecked(catalogClass, registryModuleMethod, AdditionalCatalogRegistryModule.class, null);
            } else {
                registryModule = new DynamicCatalogRegistryModule<>();
            }
            Method registerAdditionalCatalog = ReflectionUtil.getMethod(AdditionalCatalogRegistryModule.class, "registerAdditionalCatalog", catalogClass);
            for (Field field : ReflectionUtil.getFieldsOfType(catalogClass, catalogClass)) {
                if (!Modifier.isStatic(field.getModifiers()) || !Modifier.isPublic(field.getModifiers())) continue;
                if (!Modifier.isFinal(field.getModifiers())) log(catalogClass).warn("The field \"" + field.getName() + "\" is not final");
                Object type = ReflectionUtil.fieldValueChecked(field, catalogClass, null);
                registerAdditionalCatalog.invoke(registryModule, type);
            }
            ReflectionUtil.callMethod(GameRegistry.class, "registerModule", Sponge.getRegistry(), catalogClass, registryModule);
        });

Comments