56 lines
2.8 KiB
Java
56 lines
2.8 KiB
Java
package net.minecraft.world.level.levelgen.feature;
|
|
|
|
import com.mojang.serialization.Codec;
|
|
import it.unimi.dsi.fastutil.ints.IntArrayList;
|
|
import java.util.stream.IntStream;
|
|
import net.minecraft.Util;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.Direction;
|
|
import net.minecraft.util.RandomSource;
|
|
import net.minecraft.world.RandomizableContainer;
|
|
import net.minecraft.world.level.ChunkPos;
|
|
import net.minecraft.world.level.WorldGenLevel;
|
|
import net.minecraft.world.level.block.Blocks;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import net.minecraft.world.level.levelgen.Heightmap;
|
|
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
|
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
|
|
|
|
public class BonusChestFeature extends Feature<NoneFeatureConfiguration> {
|
|
public BonusChestFeature(Codec<NoneFeatureConfiguration> p_65299_) {
|
|
super(p_65299_);
|
|
}
|
|
|
|
@Override
|
|
public boolean place(FeaturePlaceContext<NoneFeatureConfiguration> p_159477_) {
|
|
RandomSource randomsource = p_159477_.random();
|
|
WorldGenLevel worldgenlevel = p_159477_.level();
|
|
ChunkPos chunkpos = new ChunkPos(p_159477_.origin());
|
|
IntArrayList intarraylist = Util.toShuffledList(IntStream.rangeClosed(chunkpos.getMinBlockX(), chunkpos.getMaxBlockX()), randomsource);
|
|
IntArrayList intarraylist1 = Util.toShuffledList(IntStream.rangeClosed(chunkpos.getMinBlockZ(), chunkpos.getMaxBlockZ()), randomsource);
|
|
BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos();
|
|
|
|
for (Integer integer : intarraylist) {
|
|
for (Integer integer1 : intarraylist1) {
|
|
blockpos$mutableblockpos.set(integer, 0, integer1);
|
|
BlockPos blockpos = worldgenlevel.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, blockpos$mutableblockpos);
|
|
if (worldgenlevel.isEmptyBlock(blockpos) || worldgenlevel.getBlockState(blockpos).getCollisionShape(worldgenlevel, blockpos).isEmpty()) {
|
|
worldgenlevel.setBlock(blockpos, Blocks.CHEST.defaultBlockState(), 2);
|
|
RandomizableContainer.setBlockEntityLootTable(worldgenlevel, randomsource, blockpos, BuiltInLootTables.SPAWN_BONUS_CHEST);
|
|
BlockState blockstate = Blocks.TORCH.defaultBlockState();
|
|
|
|
for (Direction direction : Direction.Plane.HORIZONTAL) {
|
|
BlockPos blockpos1 = blockpos.relative(direction);
|
|
if (blockstate.canSurvive(worldgenlevel, blockpos1)) {
|
|
worldgenlevel.setBlock(blockpos1, blockstate, 2);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
} |