minecraft-source/src/net/minecraft/world/level/levelgen/feature/structures/StructurePoolElement.java

65 lines
3.0 KiB
Java

package net.minecraft.world.level.levelgen.feature.structures;
import net.minecraft.core.Registry;
import com.mojang.datafixers.types.DynamicOps;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.levelgen.structure.BoundingBox;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
import java.util.List;
import java.util.Random;
import net.minecraft.world.level.block.Rotation;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager;
import com.mojang.datafixers.Dynamic;
import javax.annotation.Nullable;
public abstract class StructurePoolElement {
@Nullable
private volatile StructureTemplatePool.Projection projection;
protected StructurePoolElement(final StructureTemplatePool.Projection a) {
this.projection = a;
}
protected StructurePoolElement(final Dynamic<?> dynamic) {
this.projection = StructureTemplatePool.Projection.byName(dynamic.get("projection").asString(StructureTemplatePool.Projection.RIGID.getName()));
}
public abstract List<StructureTemplate.StructureBlockInfo> getShuffledJigsawBlocks(final StructureManager cml, final BlockPos fk, final Rotation btr, final Random random);
public abstract BoundingBox getBoundingBox(final StructureManager cml, final BlockPos fk, final Rotation btr);
public abstract boolean place(final StructureManager cml, final LevelAccessor bju, final ChunkGenerator<?> bzx, final BlockPos fk, final Rotation btr, final BoundingBox cky, final Random random);
public abstract StructurePoolElementType getType();
public void handleDataMarker(final LevelAccessor bju, final StructureTemplate.StructureBlockInfo b, final BlockPos fk, final Rotation btr, final Random random, final BoundingBox cky) {
}
public StructurePoolElement setProjection(final StructureTemplatePool.Projection a) {
this.projection = a;
return this;
}
public StructureTemplatePool.Projection getProjection() {
final StructureTemplatePool.Projection a2 = this.projection;
if (a2 == null) {
throw new IllegalStateException();
}
return a2;
}
protected abstract <T> Dynamic<T> getDynamic(final DynamicOps<T> dynamicOps);
public <T> Dynamic<T> serialize(final DynamicOps<T> dynamicOps) {
final T object3 = (T)this.getDynamic((com.mojang.datafixers.types.DynamicOps<Object>)dynamicOps).getValue();
final T object4 = (T)dynamicOps.mergeInto(object3, dynamicOps.createString("element_type"), dynamicOps.createString(Registry.STRUCTURE_POOL_ELEMENT.getKey(this.getType()).toString()));
return (Dynamic<T>)new Dynamic((DynamicOps)dynamicOps, dynamicOps.mergeInto(object4, dynamicOps.createString("projection"), dynamicOps.createString(this.projection.getName())));
}
public int getGroundLevelDelta() {
return 1;
}
}