77 lines
3.7 KiB
Java
77 lines
3.7 KiB
Java
package net.minecraft.world.level.levelgen.feature;
|
|
|
|
import net.minecraft.world.level.levelgen.ChunkGeneratorSettings;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager;
|
|
import net.minecraft.world.level.levelgen.structure.BoundingBox;
|
|
import net.minecraft.world.level.levelgen.structure.BeardedStructureStart;
|
|
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
|
|
import net.minecraft.world.level.biome.Biome;
|
|
import net.minecraft.world.level.biome.BiomeManager;
|
|
import net.minecraft.world.level.levelgen.WorldgenRandom;
|
|
import net.minecraft.world.level.ChunkPos;
|
|
import java.util.Random;
|
|
import net.minecraft.world.level.chunk.ChunkGenerator;
|
|
import com.mojang.datafixers.Dynamic;
|
|
import java.util.function.Function;
|
|
import net.minecraft.world.level.levelgen.feature.configurations.VillageConfiguration;
|
|
|
|
public class VillageFeature extends StructureFeature<VillageConfiguration> {
|
|
public VillageFeature(final Function<Dynamic<?>, ? extends VillageConfiguration> function) {
|
|
super(function);
|
|
}
|
|
|
|
@Override
|
|
protected ChunkPos getPotentialFeatureChunkFromLocationWithOffset(final ChunkGenerator<?> bzx, final Random random, final int integer3, final int integer4, final int integer5, final int integer6) {
|
|
final int integer7 = ((ChunkGeneratorSettings)bzx.getSettings()).getVillagesSpacing();
|
|
final int integer8 = ((ChunkGeneratorSettings)bzx.getSettings()).getVillagesSeparation();
|
|
final int integer9 = integer3 + integer7 * integer5;
|
|
final int integer10 = integer4 + integer7 * integer6;
|
|
final int integer11 = (integer9 < 0) ? (integer9 - integer7 + 1) : integer9;
|
|
final int integer12 = (integer10 < 0) ? (integer10 - integer7 + 1) : integer10;
|
|
int integer13 = integer11 / integer7;
|
|
int integer14 = integer12 / integer7;
|
|
((WorldgenRandom)random).setLargeFeatureWithSalt(bzx.getSeed(), integer13, integer14, 10387312);
|
|
integer13 *= integer7;
|
|
integer14 *= integer7;
|
|
integer13 += random.nextInt(integer7 - integer8);
|
|
integer14 += random.nextInt(integer7 - integer8);
|
|
return new ChunkPos(integer13, integer14);
|
|
}
|
|
|
|
@Override
|
|
public boolean isFeatureChunk(final BiomeManager bks, final ChunkGenerator<?> bzx, final Random random, final int integer4, final int integer5, final Biome bkq) {
|
|
final ChunkPos bje8 = this.getPotentialFeatureChunkFromLocationWithOffset(bzx, random, integer4, integer5, 0, 0);
|
|
return integer4 == bje8.x && integer5 == bje8.z && bzx.isBiomeValidStartForStructure(bkq, this);
|
|
}
|
|
|
|
@Override
|
|
public StructureStartFactory getStartFactory() {
|
|
return FeatureStart::new;
|
|
}
|
|
|
|
@Override
|
|
public String getFeatureName() {
|
|
return "Village";
|
|
}
|
|
|
|
@Override
|
|
public int getLookupRange() {
|
|
return 8;
|
|
}
|
|
|
|
public static class FeatureStart extends BeardedStructureStart {
|
|
public FeatureStart(final StructureFeature<?> cfi, final int integer2, final int integer3, final BoundingBox cky, final int integer5, final long long6) {
|
|
super(cfi, integer2, integer3, cky, integer5, long6);
|
|
}
|
|
|
|
@Override
|
|
public void generatePieces(final ChunkGenerator<?> bzx, final StructureManager cml, final int integer3, final int integer4, final Biome bkq) {
|
|
final VillageConfiguration chj7 = bzx.<VillageConfiguration>getStructureConfiguration(bkq, Feature.VILLAGE);
|
|
final BlockPos fk8 = new BlockPos(integer3 * 16, 0, integer4 * 16);
|
|
VillagePieces.addPieces(bzx, cml, fk8, this.pieces, this.random, chj7);
|
|
this.calculateBoundingBox();
|
|
}
|
|
}
|
|
}
|