minecraft-src/net/minecraft/world/level/levelgen/feature/foliageplacers/BushFoliagePlacer.java
2025-07-04 01:41:11 +03:00

44 lines
1.6 KiB
Java

package net.minecraft.world.level.levelgen.feature.foliageplacers;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
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 BushFoliagePlacer extends BlobFoliagePlacer {
public static final MapCodec<BushFoliagePlacer> CODEC = RecordCodecBuilder.mapCodec(instance -> blobParts(instance).apply(instance, BushFoliagePlacer::new));
public BushFoliagePlacer(IntProvider intProvider, IntProvider intProvider2, int i) {
super(intProvider, intProvider2, i);
}
@Override
protected FoliagePlacerType<?> type() {
return FoliagePlacerType.BUSH_FOLIAGE_PLACER;
}
@Override
protected void createFoliage(
LevelSimulatedReader level,
FoliagePlacer.FoliageSetter blockSetter,
RandomSource random,
TreeConfiguration config,
int maxFreeTreeHeight,
FoliagePlacer.FoliageAttachment attachment,
int foliageHeight,
int foliageRadius,
int offset
) {
for (int i = offset; i >= offset - foliageHeight; i--) {
int j = foliageRadius + attachment.radiusOffset() - 1 - i;
this.placeLeavesRow(level, blockSetter, random, config, attachment.pos(), j, i, attachment.doubleTrunk());
}
}
@Override
protected boolean shouldSkipLocation(RandomSource random, int localX, int localY, int localZ, int range, boolean large) {
return localX == range && localZ == range && random.nextInt(2) == 0;
}
}