use of com.ferreusveritas.dynamictrees.worldgen.json.JsonBiomePropertyApplierChance 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));
});
}
Aggregations