use of org.spongepowered.api.registry.util.RegisterCatalog in project SpongeCommon by SpongePowered.
the class RegistryModuleLoader method tryModulePhaseRegistration.
public static void tryModulePhaseRegistration(RegistryModule module) {
try {
if (requiresCustomRegistration(module)) {
if (isCustomProperPhase(module)) {
Method method = getCustomRegistration(module);
invokeCustomRegistration(module, checkNotNull(method, "Custom registration module was null!"));
}
} else if (isDefaultProperPhase(module)) {
module.registerDefaults();
if (hasCatalogRegistration(module)) {
Map<String, ?> map = getCatalogMap(module);
if (map.isEmpty()) {
return;
}
RegisterCatalog regAnnot = getRegisterCatalogAnnot(module);
Set<String> ignored = regAnnot.ignoredFields().length == 0 ? null : Sets.newHashSet(regAnnot.ignoredFields());
RegistryHelper.mapFields(regAnnot.value(), map, ignored);
}
}
} catch (Exception e) {
throw new RuntimeException("Error trying to initialize module: " + module.getClass().getCanonicalName(), e);
}
}
use of org.spongepowered.api.registry.util.RegisterCatalog in project LanternServer by LanternPowered.
the class LanternGameRegistry method getCatalogMappingData.
@SuppressWarnings("unchecked")
private List<CatalogMappingData> getCatalogMappingData(RegistryModule module) {
Map<String, ?> mappings = null;
if (module instanceof AlternateCatalogRegistryModule) {
mappings = checkNotNull(((AlternateCatalogRegistryModule) module).provideCatalogMap());
}
final List<CatalogMappingData> data = new ArrayList<>();
for (Field field : module.getClass().getDeclaredFields()) {
RegisterCatalog annotation = field.getAnnotation(RegisterCatalog.class);
if (annotation != null) {
if (mappings == null) {
try {
field.setAccessible(true);
mappings = (Map<String, ?>) field.get(module);
checkState(!mappings.isEmpty(), "The registered module: " + module.getClass().getSimpleName() + " cannot have an empty mapping during registration!");
} catch (Exception e) {
this.game.getLogger().error("Failed to retrieve a registry field from module: " + module.getClass().getCanonicalName(), e);
}
}
data.add(new CatalogMappingData(annotation, mappings));
}
}
if (module instanceof CatalogMappingDataHolder) {
data.addAll(((CatalogMappingDataHolder) module).getCatalogMappings());
}
return data;
}
use of org.spongepowered.api.registry.util.RegisterCatalog in project SpongeCommon by SpongePowered.
the class RegistryModuleLoader method getCatalogMap.
@SuppressWarnings({ "unchecked", "rawtypes" })
private static Map<String, ?> getCatalogMap(RegistryModule module) {
if (module instanceof AlternateCatalogRegistryModule) {
return checkNotNull(((AlternateCatalogRegistryModule) module).provideCatalogMap());
}
for (Field field : module.getClass().getDeclaredFields()) {
RegisterCatalog annotation = field.getAnnotation(RegisterCatalog.class);
if (annotation != null) {
try {
field.setAccessible(true);
Map<String, ?> map = (Map<String, ?>) field.get(module);
checkState(!map.isEmpty(), "The registered module: " + module.getClass().getSimpleName() + " cannot have an empty mapping during registration!");
return checkNotNull(map);
} catch (Exception e) {
SpongeImpl.getLogger().error("Failed to retrieve a registry field from module: " + module.getClass().getCanonicalName());
}
}
}
throw new IllegalStateException("Registry module does not have a catalog map! Registry: " + module.getClass().getCanonicalName());
}
Aggregations