Wolfizen

"Enhanced" CatalogType code

Apr 22nd, 2016
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.45 KB | None | 0 0
  1.         ReflectionUtil.performGlobalReflection(reflections -> reflections.getTypesAnnotatedWith(Catalog.class), catalogClass -> {
  2.             Catalog annotation = catalogClass.getAnnotation(Catalog.class);
  3.             String registryModuleMethod = annotation.registryModuleMethod();
  4.             AdditionalCatalogRegistryModule<?> registryModule;
  5.             if (!registryModuleMethod.isEmpty()) {
  6.                 registryModule = ReflectionUtil.callMethodChecked(catalogClass, registryModuleMethod, AdditionalCatalogRegistryModule.class, null);
  7.             } else {
  8.                 registryModule = new DynamicCatalogRegistryModule<>();
  9.             }
  10.             Method registerAdditionalCatalog = ReflectionUtil.getMethod(AdditionalCatalogRegistryModule.class, "registerAdditionalCatalog", catalogClass);
  11.             for (Field field : ReflectionUtil.getFieldsOfType(catalogClass, catalogClass)) {
  12.                 if (!Modifier.isStatic(field.getModifiers()) || !Modifier.isPublic(field.getModifiers())) continue;
  13.                 if (!Modifier.isFinal(field.getModifiers())) log(catalogClass).warn("The field \"" + field.getName() + "\" is not final");
  14.                 Object type = ReflectionUtil.fieldValueChecked(field, catalogClass, null);
  15.                 registerAdditionalCatalog.invoke(registryModule, type);
  16.             }
  17.             ReflectionUtil.callMethod(GameRegistry.class, "registerModule", Sponge.getRegistry(), catalogClass, registryModule);
  18.         });
Advertisement
Add Comment
Please, Sign In to add comment