This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
EnergonRelics/src/main/java/com/thebrokenrail/energonrelics/structure/researchcomplex/ResearchComplexHallwayPart....

103 lines
4.3 KiB
Java

package com.thebrokenrail.energonrelics.structure.researchcomplex;
import com.thebrokenrail.energonrelics.EnergonRelics;
import com.thebrokenrail.energonrelics.config.HardcodedConfig;
import com.thebrokenrail.energonrelics.structure.StructureContext;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.StairsBlock;
import net.minecraft.block.enums.BlockHalf;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import java.util.ArrayList;
import java.util.List;
public class ResearchComplexHallwayPart extends BaseResearchComplexPart {
private final boolean hasLight;
private int rightRoomPadding;
private int leftRoomPadding;
private static final float ROOM_CHANCE = 0.45f;
public ResearchComplexHallwayPart(ResearchComplexState state, List<Transformation> list, boolean hasLight, int rightRoomPadding, int leftRoomPadding) {
super(state, list);
this.hasLight = hasLight;
this.rightRoomPadding = rightRoomPadding;
this.leftRoomPadding = leftRoomPadding;
}
private static final int HEIGHT = 6;
private static final int DEPTH = 3;
@Override
protected void build(StructureContext context) {
BlockState bricks = Blocks.QUARTZ_BRICKS.getDefaultState();
if (!hasLight || getState().hasEnergy(HardcodedConfig.ENERGON_LIGHT_ENERGY_REQUIRED, getPosFromOrigin(new BlockPos(3, 5, 1)))) {
BlockState air = Blocks.AIR.getDefaultState();
BlockState stairs = Blocks.QUARTZ_STAIRS.getDefaultState();
BlockState westStairs = stairs.with(StairsBlock.FACING, Direction.WEST);
BlockState eastStairs = stairs.with(StairsBlock.FACING, Direction.EAST);
for (int y = 0; y < HEIGHT; y++) {
BlockState state = y == 0 || y == HEIGHT - 1 ? bricks : air;
if (y > 1 && y < HEIGHT - 2) {
rect(new BlockPos(1, y, 0), 5, 1, DEPTH, air);
rect(new BlockPos(0, y, 0), 1, 1, DEPTH, bricks);
rect(new BlockPos(6, y, 0), 1, 1, DEPTH, bricks);
} else {
rect(new BlockPos(2, y, 0), 3, 1, DEPTH, state);
}
if (y == 1 || y == HEIGHT - 2) {
if (y == HEIGHT - 2) {
eastStairs = eastStairs.with(StairsBlock.HALF, BlockHalf.TOP);
westStairs = westStairs.with(StairsBlock.HALF, BlockHalf.TOP);
}
rect(new BlockPos(1, y, 0), 1, 1, DEPTH, westStairs);
rect(new BlockPos(5, y, 0), 1, 1, DEPTH, eastStairs);
}
}
if (hasLight) {
set(new BlockPos(3, 5, 1), EnergonRelics.Blocks.ENERGON_LIGHT.getDefaultState());
}
if (leftRoomPadding == 0) {
if (getState().random.nextFloat() <= ROOM_CHANCE) {
AbstractResearchComplexRoomPart room = AbstractResearchComplexRoomPart.get(getState(), getRoomTransformation(true));
part(context, new BlockPos(5, 1, 1), room);
leftRoomPadding = room.getWidth();
}
} else {
leftRoomPadding = leftRoomPadding - 1;
}
if (rightRoomPadding == 0) {
if (getState().random.nextFloat() <= ROOM_CHANCE) {
AbstractResearchComplexRoomPart room = AbstractResearchComplexRoomPart.get(getState(), getRoomTransformation(false));
part(context, new BlockPos(1, 1, 1), room);
rightRoomPadding = room.getWidth();
}
} else {
rightRoomPadding = rightRoomPadding - 1;
}
part(context, new BlockPos(0, 0, DEPTH), new ResearchComplexHallwayPart(getState(), getTransformations(), !hasLight, rightRoomPadding, leftRoomPadding));
} else {
rect(new BlockPos(1, 1, 0), 5, 4, 1, bricks);
}
}
private List<Transformation> getRoomTransformation(boolean mirror) {
List<Transformation> list = new ArrayList<>();
if (mirror) {
list.add(MIRROR_DEPTH);
}
list.addAll(getTransformations());
list.add(com.thebrokenrail.energonrelics.structure.StructurePart.CLOCKWISE_90);
return list;
}
}