Search in sources :

Example 1 with CustomCatalogRegistration

use of org.spongepowered.api.registry.util.CustomCatalogRegistration in project SpongeCommon by SpongePowered.

the class EntityTypeRegistryModule method registerCatalogs.

@CustomCatalogRegistration
public void registerCatalogs() {
    registerDefaults();
    RegistryHelper.mapFields(EntityTypes.class, fieldName -> {
        if (fieldName.equals("UNKNOWN")) {
            return SpongeEntityType.UNKNOWN;
        }
        EntityType entityType = this.entityTypeMappings.get(fieldName.toLowerCase(Locale.ENGLISH));
        this.entityClassToTypeMappings.put(((SpongeEntityType) entityType).entityClass, entityType);
        // remove old mapping
        this.entityTypeMappings.remove(fieldName.toLowerCase(Locale.ENGLISH));
        // add new mapping with minecraft id
        this.entityTypeMappings.put(entityType.getId(), entityType);
        return entityType;
    });
    this.entityTypeMappings.put("minecraft:ozelot", this.entityTypeMappings.get("minecraft:ocelot"));
}
Also used : SpongeEntityType(org.spongepowered.common.entity.SpongeEntityType) EntityType(org.spongepowered.api.entity.EntityType) CustomCatalogRegistration(org.spongepowered.api.registry.util.CustomCatalogRegistration)

Example 2 with CustomCatalogRegistration

use of org.spongepowered.api.registry.util.CustomCatalogRegistration in project LanternServer by LanternPowered.

the class GeneratorTypeRegistryModule method postInit.

/**
 * Post initialize the {@link GeneratorType}s. All the default world generators
 * here be selected by scanning for 'default-world-gen.json' files.
 */
@CustomCatalogRegistration
@DelayedRegistration(RegistrationPhase.POST_INIT)
public void postInit() {
    final Multimap<String, DefaultEntry> entries = HashMultimap.create();
    final Gson gson = new Gson();
    // Scan every plugin
    for (PluginContainer pluginContainer : Sponge.getPluginManager().getPlugins()) {
        final Optional<Asset> optAsset = pluginContainer.getAsset("default-world-gen.json");
        if (optAsset.isPresent()) {
            try {
                final InputStream is = optAsset.get().getUrl().openStream();
                try (BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
                    final JsonObject json = gson.fromJson(reader, JsonObject.class);
                    for (Map.Entry<String, JsonElement> entry : json.entrySet()) {
                        entries.put(entry.getKey(), new DefaultEntry(pluginContainer, entry.getValue().getAsString()));
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    for (Map.Entry<String, Collection<DefaultEntry>> entry : entries.asMap().entrySet()) {
        final String id = entry.getKey();
        if (!getById(id).map(type -> type instanceof DelegateGeneratorType).orElse(false)) {
            Lantern.getLogger().warn("The plugin(s) ({}) attempted to map an unknown id: {}", Arrays.toString(entry.getValue().stream().map(e -> e.pluginContainer.getId()).toArray()), id);
            continue;
        }
        final List<DefaultEntry> possibleEntries = new ArrayList<>();
        for (DefaultEntry entry1 : entry.getValue()) {
            final Optional<GeneratorType> generatorType = getById(entry1.type);
            if (generatorType.isPresent()) {
                possibleEntries.add(entry1);
            } else {
                Lantern.getLogger().warn("The plugin {} attempted to map a missing generator type {} for {}", entry1.pluginContainer.getId(), entry1.type, id);
            }
        }
        if (!possibleEntries.isEmpty()) {
            final DefaultEntry defaultEntry = possibleEntries.get(0);
            if (possibleEntries.size() > 1) {
                Lantern.getLogger().warn("Multiple plugins are mapping {}: {}", id, Arrays.toString(entry.getValue().stream().map(e -> "\n" + e.pluginContainer.getId() + ": " + e.type).toArray()));
                Lantern.getLogger().warn("The first one will be used.");
            }
            ((DelegateGeneratorType) getById(id).get()).setGeneratorType(getById(defaultEntry.type).get());
            Lantern.getLogger().warn("Successfully registered a generator type mapping: {} from {} for {}", defaultEntry.type, defaultEntry.pluginContainer.getId(), id);
        }
    }
}
Also used : JsonObject(com.google.gson.JsonObject) Arrays(java.util.Arrays) FlatTheEndGeneratorType(org.lanternpowered.server.world.gen.flat.FlatTheEndGeneratorType) Multimap(com.google.common.collect.Multimap) ArrayList(java.util.ArrayList) JsonElement(com.google.gson.JsonElement) HashMultimap(com.google.common.collect.HashMultimap) FlatOverworldGeneratorType(org.lanternpowered.server.world.gen.flat.FlatOverworldGeneratorType) CustomCatalogRegistration(org.spongepowered.api.registry.util.CustomCatalogRegistration) TheVoidGeneratorType(org.lanternpowered.server.world.gen.thevoid.TheVoidGeneratorType) Gson(com.google.gson.Gson) Map(java.util.Map) BlockRegistryModule(org.lanternpowered.server.game.registry.type.block.BlockRegistryModule) RegistrationDependency(org.spongepowered.api.registry.util.RegistrationDependency) PluginContainer(org.spongepowered.api.plugin.PluginContainer) FlatNetherGeneratorType(org.lanternpowered.server.world.gen.flat.FlatNetherGeneratorType) GeneratorTypes(org.spongepowered.api.world.GeneratorTypes) DebugGeneratorType(org.lanternpowered.server.world.gen.debug.DebugGeneratorType) GeneratorType(org.spongepowered.api.world.GeneratorType) Collection(java.util.Collection) RegistrationPhase(org.spongepowered.api.registry.RegistrationPhase) Sponge(org.spongepowered.api.Sponge) IOException(java.io.IOException) InputStreamReader(java.io.InputStreamReader) DelegateGeneratorType(org.lanternpowered.server.world.gen.DelegateGeneratorType) List(java.util.List) DelayedRegistration(org.spongepowered.api.registry.util.DelayedRegistration) Lantern(org.lanternpowered.server.game.Lantern) BlockStateRegistryModule(org.lanternpowered.server.game.registry.type.block.BlockStateRegistryModule) Optional(java.util.Optional) BufferedReader(java.io.BufferedReader) AdditionalPluginCatalogRegistryModule(org.lanternpowered.server.game.registry.AdditionalPluginCatalogRegistryModule) Asset(org.spongepowered.api.asset.Asset) InputStream(java.io.InputStream) PluginContainer(org.spongepowered.api.plugin.PluginContainer) InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) Gson(com.google.gson.Gson) JsonObject(com.google.gson.JsonObject) IOException(java.io.IOException) FlatTheEndGeneratorType(org.lanternpowered.server.world.gen.flat.FlatTheEndGeneratorType) FlatOverworldGeneratorType(org.lanternpowered.server.world.gen.flat.FlatOverworldGeneratorType) TheVoidGeneratorType(org.lanternpowered.server.world.gen.thevoid.TheVoidGeneratorType) FlatNetherGeneratorType(org.lanternpowered.server.world.gen.flat.FlatNetherGeneratorType) DebugGeneratorType(org.lanternpowered.server.world.gen.debug.DebugGeneratorType) GeneratorType(org.spongepowered.api.world.GeneratorType) DelegateGeneratorType(org.lanternpowered.server.world.gen.DelegateGeneratorType) JsonElement(com.google.gson.JsonElement) BufferedReader(java.io.BufferedReader) Asset(org.spongepowered.api.asset.Asset) Collection(java.util.Collection) Map(java.util.Map) DelegateGeneratorType(org.lanternpowered.server.world.gen.DelegateGeneratorType) CustomCatalogRegistration(org.spongepowered.api.registry.util.CustomCatalogRegistration) DelayedRegistration(org.spongepowered.api.registry.util.DelayedRegistration)

Example 3 with CustomCatalogRegistration

use of org.spongepowered.api.registry.util.CustomCatalogRegistration in project SpongeCommon by SpongePowered.

the class RegistryModuleLoader method isCustomProperPhase.

private static boolean isCustomProperPhase(RegistryModule module) {
    for (Method method : module.getClass().getMethods()) {
        CustomCatalogRegistration registration = method.getDeclaredAnnotation(CustomCatalogRegistration.class);
        DelayedRegistration delay = method.getDeclaredAnnotation(DelayedRegistration.class);
        if (registration != null) {
            if (delay == null) {
                return SpongeImpl.getRegistry().getPhase() == RegistrationPhase.PRE_REGISTRY;
            }
            return SpongeImpl.getRegistry().getPhase() == delay.value();
        }
    }
    return false;
}
Also used : CustomCatalogRegistration(org.spongepowered.api.registry.util.CustomCatalogRegistration) DelayedRegistration(org.spongepowered.api.registry.util.DelayedRegistration) Method(java.lang.reflect.Method)

Aggregations

CustomCatalogRegistration (org.spongepowered.api.registry.util.CustomCatalogRegistration)3 DelayedRegistration (org.spongepowered.api.registry.util.DelayedRegistration)2 HashMultimap (com.google.common.collect.HashMultimap)1 Multimap (com.google.common.collect.Multimap)1 Gson (com.google.gson.Gson)1 JsonElement (com.google.gson.JsonElement)1 JsonObject (com.google.gson.JsonObject)1 BufferedReader (java.io.BufferedReader)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 InputStreamReader (java.io.InputStreamReader)1 Method (java.lang.reflect.Method)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 List (java.util.List)1 Map (java.util.Map)1 Optional (java.util.Optional)1 Lantern (org.lanternpowered.server.game.Lantern)1 AdditionalPluginCatalogRegistryModule (org.lanternpowered.server.game.registry.AdditionalPluginCatalogRegistryModule)1