84 lines
4.6 KiB
Java
84 lines
4.6 KiB
Java
|
package net.minecraft.world.level.levelgen.structure.structures;
|
||
|
|
||
|
import net.minecraft.Util;
|
||
|
import net.minecraft.core.BlockPos;
|
||
|
import net.minecraft.nbt.CompoundTag;
|
||
|
import net.minecraft.resources.ResourceLocation;
|
||
|
import net.minecraft.util.RandomSource;
|
||
|
import net.minecraft.world.level.ChunkPos;
|
||
|
import net.minecraft.world.level.ServerLevelAccessor;
|
||
|
import net.minecraft.world.level.StructureManager;
|
||
|
import net.minecraft.world.level.WorldGenLevel;
|
||
|
import net.minecraft.world.level.block.Mirror;
|
||
|
import net.minecraft.world.level.block.Rotation;
|
||
|
import net.minecraft.world.level.chunk.ChunkGenerator;
|
||
|
import net.minecraft.world.level.levelgen.structure.BoundingBox;
|
||
|
import net.minecraft.world.level.levelgen.structure.StructurePieceAccessor;
|
||
|
import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece;
|
||
|
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext;
|
||
|
import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType;
|
||
|
import net.minecraft.world.level.levelgen.structure.templatesystem.BlockIgnoreProcessor;
|
||
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
|
||
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
|
||
|
|
||
|
public class NetherFossilPieces {
|
||
|
private static final ResourceLocation[] FOSSILS = new ResourceLocation[]{
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_1"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_2"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_3"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_4"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_5"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_6"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_7"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_8"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_9"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_10"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_11"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_12"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_13"),
|
||
|
ResourceLocation.withDefaultNamespace("nether_fossils/fossil_14")
|
||
|
};
|
||
|
|
||
|
public static void addPieces(StructureTemplateManager p_228535_, StructurePieceAccessor p_228536_, RandomSource p_228537_, BlockPos p_228538_) {
|
||
|
Rotation rotation = Rotation.getRandom(p_228537_);
|
||
|
p_228536_.addPiece(new NetherFossilPieces.NetherFossilPiece(p_228535_, Util.getRandom(FOSSILS, p_228537_), p_228538_, rotation));
|
||
|
}
|
||
|
|
||
|
public static class NetherFossilPiece extends TemplateStructurePiece {
|
||
|
public NetherFossilPiece(StructureTemplateManager p_228540_, ResourceLocation p_228541_, BlockPos p_228542_, Rotation p_228543_) {
|
||
|
super(StructurePieceType.NETHER_FOSSIL, 0, p_228540_, p_228541_, p_228541_.toString(), makeSettings(p_228543_), p_228542_);
|
||
|
}
|
||
|
|
||
|
public NetherFossilPiece(StructureTemplateManager p_228545_, CompoundTag p_228546_) {
|
||
|
super(StructurePieceType.NETHER_FOSSIL, p_228546_, p_228545_, p_391079_ -> makeSettings(p_228546_.read("Rot", Rotation.LEGACY_CODEC).orElseThrow()));
|
||
|
}
|
||
|
|
||
|
private static StructurePlaceSettings makeSettings(Rotation p_228556_) {
|
||
|
return new StructurePlaceSettings().setRotation(p_228556_).setMirror(Mirror.NONE).addProcessor(BlockIgnoreProcessor.STRUCTURE_AND_AIR);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void addAdditionalSaveData(StructurePieceSerializationContext p_228558_, CompoundTag p_228559_) {
|
||
|
super.addAdditionalSaveData(p_228558_, p_228559_);
|
||
|
p_228559_.store("Rot", Rotation.LEGACY_CODEC, this.placeSettings.getRotation());
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void handleDataMarker(String p_228561_, BlockPos p_228562_, ServerLevelAccessor p_228563_, RandomSource p_228564_, BoundingBox p_228565_) {
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void postProcess(
|
||
|
WorldGenLevel p_228548_,
|
||
|
StructureManager p_228549_,
|
||
|
ChunkGenerator p_228550_,
|
||
|
RandomSource p_228551_,
|
||
|
BoundingBox p_228552_,
|
||
|
ChunkPos p_228553_,
|
||
|
BlockPos p_228554_
|
||
|
) {
|
||
|
p_228552_.encapsulate(this.template.getBoundingBox(this.placeSettings, this.templatePosition));
|
||
|
super.postProcess(p_228548_, p_228549_, p_228550_, p_228551_, p_228552_, p_228553_, p_228554_);
|
||
|
}
|
||
|
}
|
||
|
}
|