84 lines
4.2 KiB
Java
84 lines
4.2 KiB
Java
|
package net.minecraft.world.level.levelgen.structure.structures;
|
||
|
|
||
|
import net.minecraft.core.BlockPos;
|
||
|
import net.minecraft.core.Direction;
|
||
|
import net.minecraft.nbt.CompoundTag;
|
||
|
import net.minecraft.util.RandomSource;
|
||
|
import net.minecraft.world.level.ChunkPos;
|
||
|
import net.minecraft.world.level.StructureManager;
|
||
|
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.chunk.ChunkGenerator;
|
||
|
import net.minecraft.world.level.levelgen.Heightmap;
|
||
|
import net.minecraft.world.level.levelgen.structure.BoundingBox;
|
||
|
import net.minecraft.world.level.levelgen.structure.StructurePiece;
|
||
|
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext;
|
||
|
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType;
|
||
|
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
|
||
|
|
||
|
public class BuriedTreasurePieces {
|
||
|
public static class BuriedTreasurePiece extends StructurePiece {
|
||
|
public BuriedTreasurePiece(BlockPos p_227366_) {
|
||
|
super(StructurePieceType.BURIED_TREASURE_PIECE, 0, new BoundingBox(p_227366_));
|
||
|
}
|
||
|
|
||
|
public BuriedTreasurePiece(CompoundTag p_227368_) {
|
||
|
super(StructurePieceType.BURIED_TREASURE_PIECE, p_227368_);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void addAdditionalSaveData(StructurePieceSerializationContext p_227378_, CompoundTag p_227379_) {
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void postProcess(
|
||
|
WorldGenLevel p_227370_,
|
||
|
StructureManager p_227371_,
|
||
|
ChunkGenerator p_227372_,
|
||
|
RandomSource p_227373_,
|
||
|
BoundingBox p_227374_,
|
||
|
ChunkPos p_227375_,
|
||
|
BlockPos p_227376_
|
||
|
) {
|
||
|
int i = p_227370_.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, this.boundingBox.minX(), this.boundingBox.minZ());
|
||
|
BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(this.boundingBox.minX(), i, this.boundingBox.minZ());
|
||
|
|
||
|
while (blockpos$mutableblockpos.getY() > p_227370_.getMinY()) {
|
||
|
BlockState blockstate = p_227370_.getBlockState(blockpos$mutableblockpos);
|
||
|
BlockState blockstate1 = p_227370_.getBlockState(blockpos$mutableblockpos.below());
|
||
|
if (blockstate1 == Blocks.SANDSTONE.defaultBlockState()
|
||
|
|| blockstate1 == Blocks.STONE.defaultBlockState()
|
||
|
|| blockstate1 == Blocks.ANDESITE.defaultBlockState()
|
||
|
|| blockstate1 == Blocks.GRANITE.defaultBlockState()
|
||
|
|| blockstate1 == Blocks.DIORITE.defaultBlockState()) {
|
||
|
BlockState blockstate2 = !blockstate.isAir() && !this.isLiquid(blockstate) ? blockstate : Blocks.SAND.defaultBlockState();
|
||
|
|
||
|
for (Direction direction : Direction.values()) {
|
||
|
BlockPos blockpos = blockpos$mutableblockpos.relative(direction);
|
||
|
BlockState blockstate3 = p_227370_.getBlockState(blockpos);
|
||
|
if (blockstate3.isAir() || this.isLiquid(blockstate3)) {
|
||
|
BlockPos blockpos1 = blockpos.below();
|
||
|
BlockState blockstate4 = p_227370_.getBlockState(blockpos1);
|
||
|
if ((blockstate4.isAir() || this.isLiquid(blockstate4)) && direction != Direction.UP) {
|
||
|
p_227370_.setBlock(blockpos, blockstate1, 3);
|
||
|
} else {
|
||
|
p_227370_.setBlock(blockpos, blockstate2, 3);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.boundingBox = new BoundingBox(blockpos$mutableblockpos);
|
||
|
this.createChest(p_227370_, p_227374_, p_227373_, blockpos$mutableblockpos, BuiltInLootTables.BURIED_TREASURE, null);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
blockpos$mutableblockpos.move(0, -1, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private boolean isLiquid(BlockState p_227381_) {
|
||
|
return p_227381_ == Blocks.WATER.defaultBlockState() || p_227381_ == Blocks.LAVA.defaultBlockState();
|
||
|
}
|
||
|
}
|
||
|
}
|