Search in sources :

Example 1 with DelegateGeneratorType

use of org.lanternpowered.server.world.gen.DelegateGeneratorType 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 2 with DelegateGeneratorType

use of org.lanternpowered.server.world.gen.DelegateGeneratorType in project LanternServer by LanternPowered.

the class GeneratorTypeRegistryModule method registerDefaults.

@Override
public void registerDefaults() {
    final FlatOverworldGeneratorType flat = new FlatOverworldGeneratorType("minecraft", "flat");
    final FlatNetherGeneratorType flatNether = new FlatNetherGeneratorType("lantern", "flat_nether");
    final FlatTheEndGeneratorType flatTheEnd = new FlatTheEndGeneratorType("lantern", "flat_the_end");
    // Default inbuilt generator types
    register(flat);
    register(flatNether);
    register(flatTheEnd);
    register(new DebugGeneratorType("minecraft", "debug"));
    // Plugin provided generator types, these will fall back
    // to flat if missing
    register(new DelegateGeneratorType("minecraft", "default", flat));
    register(new DelegateGeneratorType("minecraft", "overworld", flat));
    register(new DelegateGeneratorType("minecraft", "large_biomes", flat));
    register(new DelegateGeneratorType("minecraft", "amplified", flat));
    register(new DelegateGeneratorType("minecraft", "nether", flatNether));
    register(new DelegateGeneratorType("minecraft", "the_end", flatTheEnd));
    // Sponge
    register(new TheVoidGeneratorType("sponge", "void"));
}
Also used : FlatNetherGeneratorType(org.lanternpowered.server.world.gen.flat.FlatNetherGeneratorType) FlatOverworldGeneratorType(org.lanternpowered.server.world.gen.flat.FlatOverworldGeneratorType) FlatTheEndGeneratorType(org.lanternpowered.server.world.gen.flat.FlatTheEndGeneratorType) DebugGeneratorType(org.lanternpowered.server.world.gen.debug.DebugGeneratorType) TheVoidGeneratorType(org.lanternpowered.server.world.gen.thevoid.TheVoidGeneratorType) DelegateGeneratorType(org.lanternpowered.server.world.gen.DelegateGeneratorType)

Aggregations

DelegateGeneratorType (org.lanternpowered.server.world.gen.DelegateGeneratorType)2 DebugGeneratorType (org.lanternpowered.server.world.gen.debug.DebugGeneratorType)2 FlatNetherGeneratorType (org.lanternpowered.server.world.gen.flat.FlatNetherGeneratorType)2 FlatOverworldGeneratorType (org.lanternpowered.server.world.gen.flat.FlatOverworldGeneratorType)2 FlatTheEndGeneratorType (org.lanternpowered.server.world.gen.flat.FlatTheEndGeneratorType)2 TheVoidGeneratorType (org.lanternpowered.server.world.gen.thevoid.TheVoidGeneratorType)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 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