95 lines
3.8 KiB
Java
95 lines
3.8 KiB
Java
package net.minecraft.world.level.levelgen;
|
|
|
|
import net.minecraft.world.level.block.Blocks;
|
|
import java.util.stream.Collector;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.StreamSupport;
|
|
import net.minecraft.core.Registry;
|
|
import java.util.stream.Stream;
|
|
import net.minecraft.world.level.block.Block;
|
|
import net.minecraft.util.Mth;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.world.level.biome.BiomeManager;
|
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
|
import net.minecraft.server.level.WorldGenRegion;
|
|
import net.minecraft.world.level.biome.BiomeSource;
|
|
import net.minecraft.world.level.LevelAccessor;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import java.util.List;
|
|
import net.minecraft.world.level.chunk.ChunkGenerator;
|
|
|
|
public class DebugLevelSource extends ChunkGenerator<DebugGeneratorSettings> {
|
|
private static final List<BlockState> ALL_BLOCKS;
|
|
private static final int GRID_WIDTH;
|
|
private static final int GRID_HEIGHT;
|
|
protected static final BlockState AIR;
|
|
protected static final BlockState BARRIER;
|
|
|
|
public DebugLevelSource(final LevelAccessor bju, final BiomeSource bkt, final DebugGeneratorSettings cbo) {
|
|
super(bju, bkt, cbo);
|
|
}
|
|
|
|
@Override
|
|
public void buildSurfaceAndBedrock(final WorldGenRegion xj, final ChunkAccess bzv) {
|
|
}
|
|
|
|
@Override
|
|
public void applyCarvers(final BiomeManager bks, final ChunkAccess bzv, final GenerationStep.Carving a) {
|
|
}
|
|
|
|
@Override
|
|
public int getSpawnHeight() {
|
|
return this.level.getSeaLevel() + 1;
|
|
}
|
|
|
|
@Override
|
|
public void applyBiomeDecoration(final WorldGenRegion xj) {
|
|
final BlockPos.MutableBlockPos a3 = new BlockPos.MutableBlockPos();
|
|
final int integer4 = xj.getCenterX();
|
|
final int integer5 = xj.getCenterZ();
|
|
for (int integer6 = 0; integer6 < 16; ++integer6) {
|
|
for (int integer7 = 0; integer7 < 16; ++integer7) {
|
|
final int integer8 = (integer4 << 4) + integer6;
|
|
final int integer9 = (integer5 << 4) + integer7;
|
|
xj.setBlock(a3.set(integer8, 60, integer9), DebugLevelSource.BARRIER, 2);
|
|
final BlockState byg10 = getBlockStateFor(integer8, integer9);
|
|
if (byg10 != null) {
|
|
xj.setBlock(a3.set(integer8, 70, integer9), byg10, 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void fillFromNoise(final LevelAccessor bju, final ChunkAccess bzv) {
|
|
}
|
|
|
|
@Override
|
|
public int getBaseHeight(final int integer1, final int integer2, final Heightmap.Types a) {
|
|
return 0;
|
|
}
|
|
|
|
public static BlockState getBlockStateFor(int integer1, int integer2) {
|
|
BlockState byg3 = DebugLevelSource.AIR;
|
|
if (integer1 > 0 && integer2 > 0 && integer1 % 2 != 0 && integer2 % 2 != 0) {
|
|
integer1 /= 2;
|
|
integer2 /= 2;
|
|
if (integer1 <= DebugLevelSource.GRID_WIDTH && integer2 <= DebugLevelSource.GRID_HEIGHT) {
|
|
final int integer3 = Mth.abs(integer1 * DebugLevelSource.GRID_WIDTH + integer2);
|
|
if (integer3 < DebugLevelSource.ALL_BLOCKS.size()) {
|
|
byg3 = DebugLevelSource.ALL_BLOCKS.get(integer3);
|
|
}
|
|
}
|
|
}
|
|
return byg3;
|
|
}
|
|
|
|
static {
|
|
ALL_BLOCKS = StreamSupport.<Block>stream(Registry.BLOCK.spliterator(), false).flatMap(bpe -> bpe.getStateDefinition().getPossibleStates().stream()).collect(Collectors.toList());
|
|
GRID_WIDTH = Mth.ceil(Mth.sqrt((float)DebugLevelSource.ALL_BLOCKS.size()));
|
|
GRID_HEIGHT = Mth.ceil(DebugLevelSource.ALL_BLOCKS.size() / (float)DebugLevelSource.GRID_WIDTH);
|
|
AIR = Blocks.AIR.defaultBlockState();
|
|
BARRIER = Blocks.BARRIER.defaultBlockState();
|
|
}
|
|
}
|