package net.minecraft.world.level.levelgen.structure.templatesystem; import com.mojang.serialization.MapCodec; import java.util.function.Supplier; import net.minecraft.core.BlockPos; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import org.jspecify.annotations.Nullable; public class LavaSubmergedBlockProcessor implements StructureProcessor { public static final MapCodec MAP_CODEC = MapCodec.unit( (Supplier)(() -> LavaSubmergedBlockProcessor.INSTANCE) ); public static final LavaSubmergedBlockProcessor INSTANCE = new LavaSubmergedBlockProcessor(); @Nullable @Override public StructureTemplate.StructureBlockInfo processBlock( final LevelReader level, final BlockPos targetPosition, final BlockPos referencePos, final BlockPos templateRelativePos, final StructureTemplate.StructureBlockInfo processedBlockInfo, final StructurePlaceSettings settings ) { BlockPos pos = processedBlockInfo.pos(); boolean wasLavaBefore = level.getBlockState(pos).is(Blocks.LAVA); return wasLavaBefore && !Block.isShapeFullBlock(processedBlockInfo.state().getShape(level, pos)) ? new StructureTemplate.StructureBlockInfo(pos, Blocks.LAVA.defaultBlockState(), processedBlockInfo.nbt()) : processedBlockInfo; } @Override public MapCodec codec() { return MAP_CODEC; } }