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);
}
}
}
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"));
}
Aggregations