Code/net/minecraft/world/level/levelgen/feature/foliageplacers/PineFoliagePlacer.java

67 lines
2.5 KiB
Java

package net.minecraft.world.level.levelgen.feature.foliageplacers;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.mojang.serialization.codecs.RecordCodecBuilder.Instance;
import net.minecraft.util.RandomSource;
import net.minecraft.util.valueproviders.IntProvider;
import net.minecraft.world.level.LevelSimulatedReader;
import net.minecraft.world.level.levelgen.feature.configurations.TreeConfiguration;
public class PineFoliagePlacer extends FoliagePlacer {
public static final MapCodec<PineFoliagePlacer> CODEC = RecordCodecBuilder.mapCodec(
p_68698_ -> foliagePlacerParts(p_68698_)
.and(IntProvider.codec(0, 24).fieldOf("height").forGetter(p_161500_ -> p_161500_.height))
.apply(p_68698_, PineFoliagePlacer::new)
);
private final IntProvider height;
public PineFoliagePlacer(IntProvider p_161486_, IntProvider p_161487_, IntProvider p_161488_) {
super(p_161486_, p_161487_);
this.height = p_161488_;
}
@Override
protected FoliagePlacerType<?> type() {
return FoliagePlacerType.PINE_FOLIAGE_PLACER;
}
@Override
protected void createFoliage(
LevelSimulatedReader p_225702_,
FoliagePlacer.FoliageSetter p_272791_,
RandomSource p_225704_,
TreeConfiguration p_225705_,
int p_225706_,
FoliagePlacer.FoliageAttachment p_225707_,
int p_225708_,
int p_225709_,
int p_225710_
) {
int i = 0;
for (int j = p_225710_; j >= p_225710_ - p_225708_; j--) {
this.placeLeavesRow(p_225702_, p_272791_, p_225704_, p_225705_, p_225707_.pos(), i, j, p_225707_.doubleTrunk());
if (i >= 1 && j == p_225710_ - p_225708_ + 1) {
i--;
} else if (i < p_225709_ + p_225707_.radiusOffset()) {
i++;
}
}
}
@Override
public int foliageRadius(RandomSource p_225688_, int p_225689_) {
return super.foliageRadius(p_225688_, p_225689_) + p_225688_.nextInt(Math.max(p_225689_ + 1, 1));
}
@Override
public int foliageHeight(RandomSource p_225698_, int p_225699_, TreeConfiguration p_225700_) {
return this.height.sample(p_225698_);
}
@Override
protected boolean shouldSkipLocation(RandomSource p_225691_, int p_225692_, int p_225693_, int p_225694_, int p_225695_, boolean p_225696_) {
return p_225692_ == p_225695_ && p_225694_ == p_225695_ && p_225695_ > 0;
}
}