Feature API usage
This commit is contained in:
parent
823108aa62
commit
6a6f29bf99
9 changed files with 62 additions and 170 deletions
|
@ -1,21 +1,20 @@
|
|||
package ru.betterend.registry;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.levelgen.GenerationStep;
|
||||
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.Feature;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.CountConfiguration;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
||||
import net.minecraft.world.level.levelgen.placement.FeatureDecorator;
|
||||
import ru.bclib.api.BiomeAPI;
|
||||
import net.minecraft.world.level.levelgen.placement.CountPlacement;
|
||||
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
||||
import net.minecraft.world.level.levelgen.placement.PlacementModifier;
|
||||
import ru.bclib.api.biomes.BCLBiomeBuilder;
|
||||
import ru.bclib.api.biomes.BiomeAPI;
|
||||
import ru.bclib.world.biomes.BCLBiome;
|
||||
import ru.bclib.world.biomes.BCLBiomeDef;
|
||||
import ru.bclib.world.features.BCLFeature;
|
||||
import ru.bclib.world.features.DefaultFeature;
|
||||
import ru.betterend.BetterEnd;
|
||||
|
@ -81,12 +80,8 @@ import ru.betterend.world.features.trees.MossyGlowshroomFeature;
|
|||
import ru.betterend.world.features.trees.PythadendronTreeFeature;
|
||||
import ru.betterend.world.features.trees.TenaneaFeature;
|
||||
import ru.betterend.world.features.trees.UmbrellaTreeFeature;
|
||||
import ru.betterend.world.generator.GeneratorOptions;
|
||||
import ru.betterend.world.surface.UmbraSurfaceBuilder;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class EndFeatures {
|
||||
// Trees //
|
||||
public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3);
|
||||
|
@ -295,9 +290,7 @@ public class EndFeatures {
|
|||
|
||||
private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) {
|
||||
OreLayerFeature layer = new OreLayerFeature(block.defaultBlockState(), radius, minY, maxY);
|
||||
ConfiguredFeature<?, ?> configured = layer
|
||||
.configured(FeatureConfiguration.NONE)
|
||||
.decorated(FeatureDecorator.COUNT.configured(new CountConfiguration(count)));
|
||||
PlacedFeature configured = layer.configured(FeatureConfiguration.NONE).placed(new PlacementModifier[]{CountPlacement.of(count)});
|
||||
return new BCLFeature(BetterEnd.makeID(name), layer, GenerationStep.Decoration.UNDERGROUND_ORES, configured);
|
||||
}
|
||||
|
||||
|
@ -305,75 +298,46 @@ public class EndFeatures {
|
|||
return registerLayer(name, material.stone, radius, minY, maxY, count);
|
||||
}
|
||||
|
||||
public static void registerBiomeFeatures(ResourceLocation id, Biome biome, List<List<Supplier<ConfiguredFeature<?, ?>>>> features) {
|
||||
public static void addBiomeFeatures(ResourceLocation id, Biome biome) {
|
||||
if (id.getNamespace().equals(BetterEnd.MOD_ID)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (GeneratorOptions.removeChorusFromVanillaBiomes()) {
|
||||
if (id.getNamespace().equals("minecraft")) {
|
||||
String path = id.getPath();
|
||||
if (path.equals("end_highlands") || path.equals("end_midlands") || path.equals("small_end_islands")) {
|
||||
int pos = GenerationStep.Decoration.VEGETAL_DECORATION.ordinal();
|
||||
if (pos < features.size()) {
|
||||
List<Supplier<ConfiguredFeature<?, ?>>> list = features.get(pos);
|
||||
// If only chorus plants are enabled
|
||||
if (list.size() == 1) {
|
||||
features.get(pos).clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
addFeature(FLAVOLITE_LAYER, features);
|
||||
addFeature(THALLASIUM_ORE, features);
|
||||
addFeature(ENDER_ORE, features);
|
||||
addFeature(CRASHED_SHIP, features);
|
||||
BiomeAPI.addBiomeFeatures(biome, FLAVOLITE_LAYER, THALLASIUM_ORE, ENDER_ORE, CRASHED_SHIP);
|
||||
|
||||
BCLBiome bclbiome = BiomeAPI.getBiome(id);
|
||||
boolean hasCaves = bclbiome.getCustomData("has_caves", true) && !(bclbiome instanceof EndCaveBiome);
|
||||
if (hasCaves && !BiomeAPI.END_VOID_BIOME_PICKER.containsImmutable(id)) {
|
||||
if (Configs.BIOME_CONFIG.getBoolean(id, "hasCaves", true)) {
|
||||
addFeature(ROUND_CAVE, features);
|
||||
addFeature(TUNEL_CAVE, features);
|
||||
// TODO replace caves with carvers
|
||||
BiomeAPI.addBiomeFeatures(biome, ROUND_CAVE, TUNEL_CAVE);
|
||||
}
|
||||
}
|
||||
|
||||
BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature();
|
||||
// TODO restore biome structures
|
||||
/*BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature();
|
||||
if (feature != null) {
|
||||
addFeature(feature, features);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public static void addDefaultFeatures(BCLBiomeDef def) {
|
||||
def.addFeature(FLAVOLITE_LAYER);
|
||||
def.addFeature(THALLASIUM_ORE);
|
||||
def.addFeature(ENDER_ORE);
|
||||
def.addFeature(CRASHED_SHIP);
|
||||
public static BCLBiomeBuilder addDefaultFeatures(ResourceLocation biomeID, BCLBiomeBuilder builder, boolean hasCaves) {
|
||||
builder.feature(FLAVOLITE_LAYER);
|
||||
builder.feature(THALLASIUM_ORE);
|
||||
builder.feature(ENDER_ORE);
|
||||
builder.feature(CRASHED_SHIP);
|
||||
|
||||
if (def.getID().getPath().endsWith("_cave")) {
|
||||
return;
|
||||
if (biomeID.getPath().endsWith("_cave")) {
|
||||
return builder;
|
||||
}
|
||||
|
||||
boolean hasCaves = def.getCustomData("has_caves", true);
|
||||
hasCaves = Configs.BIOME_CONFIG.getBoolean(def.getID(), "hasCaves", hasCaves);
|
||||
// TODO replace cave features with carvers
|
||||
if (hasCaves) {
|
||||
def.addFeature(ROUND_CAVE);
|
||||
def.addFeature(TUNEL_CAVE);
|
||||
}
|
||||
}
|
||||
|
||||
private static void addFeature(BCLFeature feature, List<List<Supplier<ConfiguredFeature<?, ?>>>> features) {
|
||||
int index = feature.getFeatureStep().ordinal();
|
||||
if (features.size() > index) {
|
||||
features.get(index).add(() -> feature.getFeatureConfigured());
|
||||
}
|
||||
else {
|
||||
List<Supplier<ConfiguredFeature<?, ?>>> newFeature = Lists.newArrayList();
|
||||
newFeature.add(() -> feature.getFeatureConfigured());
|
||||
features.add(newFeature);
|
||||
builder.feature(ROUND_CAVE);
|
||||
builder.feature(TUNEL_CAVE);
|
||||
}
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static void register() {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue