package greymerk.roguelike.worldgen.blocks.door; import com.google.gson.JsonElement; import greymerk.roguelike.worldgen.Cardinal; import greymerk.roguelike.worldgen.Coord; import greymerk.roguelike.worldgen.IWorldEditor; import greymerk.roguelike.worldgen.MetaBlock; import net.minecraft.block.BlockDoor; import net.minecraft.block.state.IBlockState; public class Door implements IDoor { MetaBlock block; public Door(MetaBlock block){ this.block = block; } public Door(DoorType type){ this.block = DoorType.get(type); } public Door(JsonElement e) throws Exception{ this.block = new MetaBlock(e); } @Override public void generate(IWorldEditor editor, Coord pos, Cardinal dir) { Door.generate(editor, this.block, pos, dir, false); } @Override public void generate(IWorldEditor editor, Coord pos, Cardinal dir, boolean open) { Door.generate(editor, this.block, pos, dir, open); } public static void generate(IWorldEditor editor, Coord pos, Cardinal dir, DoorType type){ MetaBlock door = DoorType.get(type); generate(editor, door, pos, dir, false); } public static void generate(IWorldEditor editor, MetaBlock door, Coord pos, Cardinal dir, boolean open){ Coord cursor = new Coord(pos); MetaBlock doorBase = setProperties(door, false, dir, open, false); doorBase.set(editor, cursor); cursor.add(Cardinal.UP); MetaBlock doorTop = setProperties(door, true, dir, open, false); doorTop.set(editor, cursor); } private static MetaBlock setProperties(MetaBlock doorblock, boolean top, Cardinal dir, boolean open, boolean hingeLeft){ IBlockState door = doorblock.getBlock().getDefaultState(); door = door.withProperty(BlockDoor.HALF, top ? BlockDoor.EnumDoorHalf.UPPER : BlockDoor.EnumDoorHalf.LOWER); door = door.withProperty(BlockDoor.FACING, Cardinal.facing(dir)); door = door.withProperty(BlockDoor.OPEN, open); door = door.withProperty(BlockDoor.HINGE, hingeLeft ? BlockDoor.EnumHingePosition.LEFT : BlockDoor.EnumHingePosition.RIGHT); return new MetaBlock(door); } }