Code/net/minecraft/world/level/levelgen/feature/configurations/TreeConfiguration.java

138 lines
5.9 KiB
Java

package net.minecraft.world.level.levelgen.feature.configurations;
import com.google.common.collect.ImmutableList;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.mojang.serialization.codecs.RecordCodecBuilder.Instance;
import java.util.List;
import java.util.Optional;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.levelgen.feature.featuresize.FeatureSize;
import net.minecraft.world.level.levelgen.feature.foliageplacers.FoliagePlacer;
import net.minecraft.world.level.levelgen.feature.rootplacers.RootPlacer;
import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider;
import net.minecraft.world.level.levelgen.feature.treedecorators.TreeDecorator;
import net.minecraft.world.level.levelgen.feature.trunkplacers.TrunkPlacer;
public class TreeConfiguration implements FeatureConfiguration {
public static final Codec<TreeConfiguration> CODEC = RecordCodecBuilder.create(
p_225468_ -> p_225468_.group(
BlockStateProvider.CODEC.fieldOf("trunk_provider").forGetter(p_161248_ -> p_161248_.trunkProvider),
TrunkPlacer.CODEC.fieldOf("trunk_placer").forGetter(p_161246_ -> p_161246_.trunkPlacer),
BlockStateProvider.CODEC.fieldOf("foliage_provider").forGetter(p_161244_ -> p_161244_.foliageProvider),
FoliagePlacer.CODEC.fieldOf("foliage_placer").forGetter(p_191357_ -> p_191357_.foliagePlacer),
RootPlacer.CODEC.optionalFieldOf("root_placer").forGetter(p_225478_ -> p_225478_.rootPlacer),
BlockStateProvider.CODEC.fieldOf("dirt_provider").forGetter(p_225476_ -> p_225476_.dirtProvider),
FeatureSize.CODEC.fieldOf("minimum_size").forGetter(p_225474_ -> p_225474_.minimumSize),
TreeDecorator.CODEC.listOf().fieldOf("decorators").forGetter(p_225472_ -> p_225472_.decorators),
Codec.BOOL.fieldOf("ignore_vines").orElse(false).forGetter(p_161232_ -> p_161232_.ignoreVines),
Codec.BOOL.fieldOf("force_dirt").orElse(false).forGetter(p_225470_ -> p_225470_.forceDirt)
)
.apply(p_225468_, TreeConfiguration::new)
);
public final BlockStateProvider trunkProvider;
public final BlockStateProvider dirtProvider;
public final TrunkPlacer trunkPlacer;
public final BlockStateProvider foliageProvider;
public final FoliagePlacer foliagePlacer;
public final Optional<RootPlacer> rootPlacer;
public final FeatureSize minimumSize;
public final List<TreeDecorator> decorators;
public final boolean ignoreVines;
public final boolean forceDirt;
protected TreeConfiguration(
BlockStateProvider p_225457_,
TrunkPlacer p_225458_,
BlockStateProvider p_225459_,
FoliagePlacer p_225460_,
Optional<RootPlacer> p_225461_,
BlockStateProvider p_225462_,
FeatureSize p_225463_,
List<TreeDecorator> p_225464_,
boolean p_225465_,
boolean p_225466_
) {
this.trunkProvider = p_225457_;
this.trunkPlacer = p_225458_;
this.foliageProvider = p_225459_;
this.foliagePlacer = p_225460_;
this.rootPlacer = p_225461_;
this.dirtProvider = p_225462_;
this.minimumSize = p_225463_;
this.decorators = p_225464_;
this.ignoreVines = p_225465_;
this.forceDirt = p_225466_;
}
public static class TreeConfigurationBuilder {
public final BlockStateProvider trunkProvider;
private final TrunkPlacer trunkPlacer;
public final BlockStateProvider foliageProvider;
private final FoliagePlacer foliagePlacer;
private final Optional<RootPlacer> rootPlacer;
private BlockStateProvider dirtProvider;
private final FeatureSize minimumSize;
private List<TreeDecorator> decorators = ImmutableList.of();
private boolean ignoreVines;
private boolean forceDirt;
public TreeConfigurationBuilder(
BlockStateProvider p_225481_,
TrunkPlacer p_225482_,
BlockStateProvider p_225483_,
FoliagePlacer p_225484_,
Optional<RootPlacer> p_225485_,
FeatureSize p_225486_
) {
this.trunkProvider = p_225481_;
this.trunkPlacer = p_225482_;
this.foliageProvider = p_225483_;
this.dirtProvider = BlockStateProvider.simple(Blocks.DIRT);
this.foliagePlacer = p_225484_;
this.rootPlacer = p_225485_;
this.minimumSize = p_225486_;
}
public TreeConfigurationBuilder(
BlockStateProvider p_191359_, TrunkPlacer p_191360_, BlockStateProvider p_191361_, FoliagePlacer p_191362_, FeatureSize p_191363_
) {
this(p_191359_, p_191360_, p_191361_, p_191362_, Optional.empty(), p_191363_);
}
public TreeConfiguration.TreeConfigurationBuilder dirt(BlockStateProvider p_161261_) {
this.dirtProvider = p_161261_;
return this;
}
public TreeConfiguration.TreeConfigurationBuilder decorators(List<TreeDecorator> p_68250_) {
this.decorators = p_68250_;
return this;
}
public TreeConfiguration.TreeConfigurationBuilder ignoreVines() {
this.ignoreVines = true;
return this;
}
public TreeConfiguration.TreeConfigurationBuilder forceDirt() {
this.forceDirt = true;
return this;
}
public TreeConfiguration build() {
return new TreeConfiguration(
this.trunkProvider,
this.trunkPlacer,
this.foliageProvider,
this.foliagePlacer,
this.rootPlacer,
this.dirtProvider,
this.minimumSize,
this.decorators,
this.ignoreVines,
this.forceDirt
);
}
}
}