Search in sources :

Example 1 with BiomeDataBaseJsonCapabilityRegistryEvent

use of com.ferreusveritas.dynamictrees.api.WorldGenRegistry.BiomeDataBaseJsonCapabilityRegistryEvent in project DynamicTrees by DynamicTreesTeam.

the class BiomeDataBasePopulatorJson method registerJsonCapabilities.

public static void registerJsonCapabilities(BiomeDataBaseJsonCapabilityRegistryEvent event) {
    event.register(NAME, jsonElement -> {
        if (jsonElement == null) {
            return b -> false;
        }
        if (jsonElement.isJsonPrimitive() && jsonElement.getAsJsonPrimitive().isString()) {
            return readNameSelector(jsonElement.getAsString());
        } else if (jsonElement.isJsonArray()) {
            return readArrayNameSelector(jsonElement.getAsJsonArray());
        }
        return b -> false;
    });
    event.register(TYPE, jsonElement -> {
        if (jsonElement != null) {
            List<BiomeDictionary.Type> typesWhitelist = new ArrayList<>();
            List<BiomeDictionary.Type> typesBlacklist = new ArrayList<>();
            if (jsonElement.isJsonPrimitive() && jsonElement.getAsJsonPrimitive().isString()) {
                readTypeSelector(jsonElement.getAsString(), typesWhitelist, typesBlacklist);
            } else if (jsonElement.isJsonArray()) {
                readArrayTypeSelector(jsonElement.getAsJsonArray(), typesWhitelist, typesBlacklist);
            }
            // Accept if the biome has any types from the whitelist and no types from the blacklist.
            return b -> biomeHasTypes(b, typesWhitelist) && (typesBlacklist.size() == 0 || !biomeHasAnyType(b, typesBlacklist));
        }
        return b -> false;
    });
    event.register(SPECIES, new JsonBiomePropertyApplierSpecies());
    event.register(DENSITY, new JsonBiomePropertyApplierDensity());
    event.register(CHANCE, new JsonBiomePropertyApplierChance());
    event.register(CANCELVANILLA, (dbase, element, biome) -> {
        if (element.isJsonPrimitive()) {
            boolean cancel = element.getAsBoolean();
            // System.out.println("Biome " + (cancel ? "cancelled" : "uncancelled") + " for vanilla: " + biome);
            dbase.setCancelVanillaTreeGen(biome, cancel);
        }
    });
    event.register(MULTIPASS, (dbase, element, biome) -> {
        if (element.isJsonPrimitive()) {
            boolean multipass = element.getAsBoolean();
            if (multipass) {
                // System.out.println("Biome set for multipass: " + biome);
                // Enable poisson disc multipass of roofed forests to ensure maximum density even with large trees
                // by filling in gaps in the generation with smaller trees
                dbase.setMultipass(biome, pass -> {
                    switch(pass) {
                        case 0:
                            // Zero means to run as normal
                            return 0;
                        case 1:
                            // Return only radius 5 on pass 1
                            return 5;
                        case 2:
                            // Return only radius 3 on pass 2
                            return 3;
                        default:
                            // A negative number means to terminate
                            return -1;
                    }
                });
            }
        }
    });
    event.register(SUBTERRANEAN, (dbase, element, biome) -> {
        if (element.isJsonPrimitive()) {
            boolean subterranean = element.getAsBoolean();
            // System.out.println("Biome set to subterranean: " + biome);
            dbase.setIsSubterranean(biome, subterranean);
        }
    });
    event.register(FORESTNESS, (dbase, element, biome) -> {
        if (element.isJsonPrimitive()) {
            float forestness = element.getAsFloat();
            // System.out.println("Forestness set for biome: " + biome + " at " + forestness);
            dbase.setForestness(biome, forestness);
        }
    });
    event.register(BLACKLIST, (dbase, element, biome) -> {
        if (element.isJsonPrimitive()) {
            boolean blacklist = element.getAsBoolean();
            if (blacklist) {
                // System.out.println("Blacklisted biome: " + biome);
                blacklistedBiomes.add(biome);
            } else {
                blacklistedBiomes.remove(biome);
            }
        }
    });
    event.register(RESET, (dbase, element, biome) -> {
        dbase.setCancelVanillaTreeGen(biome, false);
        dbase.setSpeciesSelector(biome, (pos, dirt, rnd) -> new SpeciesSelection(), Operation.REPLACE);
        dbase.setDensitySelector(biome, (rnd, nd) -> -1, Operation.REPLACE);
        dbase.setChanceSelector(biome, (rnd, spc, rad) -> EnumChance.UNHANDLED, Operation.REPLACE);
        dbase.setForestness(biome, 0.0f);
        dbase.setIsSubterranean(biome, false);
        dbase.setMultipass(biome, pass -> (pass == 0 ? 0 : -1));
    });
}
Also used : JsonObject(com.google.gson.JsonObject) Arrays(java.util.Arrays) HashMap(java.util.HashMap) Operation(com.ferreusveritas.dynamictrees.worldgen.BiomeDataBase.Operation) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) JsonElement(com.google.gson.JsonElement) IJsonBiomeSelector(com.ferreusveritas.dynamictrees.worldgen.json.IJsonBiomeSelector) Lists(com.google.common.collect.Lists) JsonBiomePropertyApplierChance(com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierChance) BiomeDictionary(net.minecraftforge.common.BiomeDictionary) Map(java.util.Map) EnumChance(com.ferreusveritas.dynamictrees.api.worldgen.BiomePropertySelectors.EnumChance) JsonHelper(com.ferreusveritas.dynamictrees.util.JsonHelper) JsonPrimitive(com.google.gson.JsonPrimitive) LinkedList(java.util.LinkedList) Predicate(java.util.function.Predicate) JsonBiomePropertyApplierSpecies(com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierSpecies) Set(java.util.Set) Collectors(java.util.stream.Collectors) BiomeDataBaseJsonCapabilityRegistryEvent(com.ferreusveritas.dynamictrees.api.WorldGenRegistry.BiomeDataBaseJsonCapabilityRegistryEvent) IBiomeDataBasePopulator(com.ferreusveritas.dynamictrees.api.worldgen.IBiomeDataBasePopulator) List(java.util.List) JsonArray(com.google.gson.JsonArray) Stream(java.util.stream.Stream) SpeciesSelection(com.ferreusveritas.dynamictrees.api.worldgen.BiomePropertySelectors.SpeciesSelection) JsonBiomePropertyApplierDensity(com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierDensity) Entry(java.util.Map.Entry) ResourceLocation(net.minecraft.util.ResourceLocation) IJsonBiomeApplier(com.ferreusveritas.dynamictrees.worldgen.json.IJsonBiomeApplier) Biome(net.minecraft.world.biome.Biome) JsonBiomePropertyApplierChance(com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierChance) SpeciesSelection(com.ferreusveritas.dynamictrees.api.worldgen.BiomePropertySelectors.SpeciesSelection) ArrayList(java.util.ArrayList) JsonBiomePropertyApplierDensity(com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierDensity) JsonBiomePropertyApplierSpecies(com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierSpecies)

Aggregations

BiomeDataBaseJsonCapabilityRegistryEvent (com.ferreusveritas.dynamictrees.api.WorldGenRegistry.BiomeDataBaseJsonCapabilityRegistryEvent)1 EnumChance (com.ferreusveritas.dynamictrees.api.worldgen.BiomePropertySelectors.EnumChance)1 SpeciesSelection (com.ferreusveritas.dynamictrees.api.worldgen.BiomePropertySelectors.SpeciesSelection)1 IBiomeDataBasePopulator (com.ferreusveritas.dynamictrees.api.worldgen.IBiomeDataBasePopulator)1 JsonHelper (com.ferreusveritas.dynamictrees.util.JsonHelper)1 Operation (com.ferreusveritas.dynamictrees.worldgen.BiomeDataBase.Operation)1 IJsonBiomeApplier (com.ferreusveritas.dynamictrees.worldgen.json.IJsonBiomeApplier)1 IJsonBiomeSelector (com.ferreusveritas.dynamictrees.worldgen.json.IJsonBiomeSelector)1 JsonBiomePropertyApplierChance (com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierChance)1 JsonBiomePropertyApplierDensity (com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierDensity)1 JsonBiomePropertyApplierSpecies (com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierSpecies)1 Lists (com.google.common.collect.Lists)1 JsonArray (com.google.gson.JsonArray)1 JsonElement (com.google.gson.JsonElement)1 JsonObject (com.google.gson.JsonObject)1 JsonPrimitive (com.google.gson.JsonPrimitive)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1