package micdoodle8.mods.galacticraft.core.world.gen.dungeon; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.world.gen.structure.StructureBoundingBox; import java.util.Random; public abstract class DirectionalPiece extends Piece { private EnumFacing direction; public DirectionalPiece() { } public DirectionalPiece(DungeonConfiguration configuration, EnumFacing direction) { super(configuration); this.direction = direction; } public EnumFacing getDirection() { return direction; } public void setDirection(EnumFacing direction) { this.direction = direction; } @Override protected void writeStructureToNBT(NBTTagCompound tagCompound) { super.writeStructureToNBT(tagCompound); tagCompound.setInteger("direction", this.direction.ordinal()); } @Override protected void readStructureFromNBT(NBTTagCompound tagCompound) { super.readStructureFromNBT(tagCompound); if (tagCompound.hasKey("direction")) { this.direction = EnumFacing.getFront(tagCompound.getInteger("direction")); } else { this.direction = EnumFacing.NORTH; } } public Piece getCorridor(Random rand, DungeonStart startPiece, int maxAttempts, boolean small) { EnumFacing randomDir; int blockX; int blockZ; int sizeX; int sizeZ; boolean valid; int attempts = maxAttempts; do { int randDir = rand.nextInt(4); randomDir = EnumFacing.getHorizontal((randDir == getDirection().getOpposite().getHorizontalIndex() ? randDir + 1 : randDir) % 4); StructureBoundingBox extension = getExtension(randomDir, this.configuration.getHallwayLengthMin() + rand.nextInt(this.configuration.getHallwayLengthMax() - this.configuration.getHallwayLengthMin()), 3); blockX = extension.minX; blockZ = extension.minZ; sizeX = extension.maxX - extension.minX; sizeZ = extension.maxZ - extension.minZ; valid = !startPiece.checkIntersection(extension); attempts--; } while (!valid && attempts > 0); if (!valid) { return null; } return new Corridor(this.configuration, rand, blockX, blockZ, sizeX, small ? 3 : this.configuration.getHallwayHeight(), sizeZ, randomDir); } }