Search in sources :

Example 1 with EnumStructureBlock

use of forestry.core.utils.Schemata.EnumStructureBlock in project ForestryMC by ForestryMC.

the class StructureLogic method markStructureBlocks.

protected void markStructureBlocks(Schemata schemata) {
    Vect dimensions = schemata.getDimensions(isRotated);
    int offsetX = schemata.getxOffset();
    int offsetZ = schemata.getzOffset();
    if (isRotated) {
        offsetX = schemata.getzOffset();
        offsetZ = schemata.getxOffset();
    }
    for (int i = 0; i < dimensions.x; i++) {
        for (int j = 0; j < schemata.getHeight(); j++) {
            for (int k = 0; k < dimensions.z; k++) {
                int x = structureTile.xCoord + i + offsetX;
                int y = structureTile.yCoord + j + schemata.getyOffset();
                int z = structureTile.zCoord + k + offsetZ;
                TileEntity tile = structureTile.getWorldObj().getTileEntity(x, y, z);
                if (!(tile instanceof ITileStructure)) {
                    continue;
                }
                ITileStructure part = (ITileStructure) tile;
                if (!part.getTypeUID().equals(getTypeUID())) {
                    continue;
                }
                part.setCentralTE((TileEntity) structure);
                EnumStructureBlock type = schemata.getAt(i, j, k, isRotated);
                if (metaOnValid.containsKey(type)) {
                    structureTile.getWorldObj().setBlockMetadataWithNotify(x, y, z, metaOnValid.get(type), Defaults.FLAG_BLOCK_SYNCH);
                    structureTile.getWorldObj().markBlockForUpdate(x, y, z);
                }
            }
        }
    }
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) ITileStructure(forestry.api.core.ITileStructure) Vect(forestry.core.vect.Vect) EnumStructureBlock(forestry.core.utils.Schemata.EnumStructureBlock)

Example 2 with EnumStructureBlock

use of forestry.core.utils.Schemata.EnumStructureBlock in project ForestryMC by ForestryMC.

the class StructureLogicFarm method determineMasterState.

@Override
protected EnumStructureState determineMasterState(Schemata schemata, boolean rotate) {
    Vect dimensions = schemata.getDimensions(rotate);
    int offsetX = schemata.getxOffset();
    int offsetZ = schemata.getzOffset();
    if (rotate) {
        offsetX = schemata.getzOffset();
        offsetZ = schemata.getxOffset();
    }
    for (int i = 0; i < dimensions.x; i++) {
        for (int j = 0; j < schemata.getHeight(); j++) {
            for (int k = 0; k < dimensions.z; k++) {
                int x = structureTile.xCoord + i + offsetX;
                int y = structureTile.yCoord + j + schemata.getyOffset();
                int z = structureTile.zCoord + k + offsetZ;
                if (!structureTile.getWorldObj().blockExists(x, y, z)) {
                    return EnumStructureState.INDETERMINATE;
                }
                EnumStructureBlock required = schemata.getAt(i, j, k, rotate);
                if (required == EnumStructureBlock.ANY) {
                    continue;
                }
                TileEntity tile = structureTile.getWorldObj().getTileEntity(x, y, z);
                Block block = structureTile.getWorldObj().getBlock(x, y, z);
                switch(required) {
                    case AIR:
                        if (!block.isAir(structureTile.getWorldObj(), x, y, z)) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    case BLOCK_A:
                        if (tile == null || !(tile instanceof IFarmComponent)) {
                            return EnumStructureState.INVALID;
                        }
                        if (!((ITileStructure) tile).getTypeUID().equals(UID_FARM)) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    case BLOCK_B:
                    case MASTER:
                        if (tile == null || !(tile instanceof TileFarm)) {
                            return EnumStructureState.INVALID;
                        }
                        if (((TileFarm) tile).hasFunction()) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    case BLOCK_C:
                        if (!bricks.contains(block)) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    case FOREIGN:
                        if (tile instanceof ITileStructure) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    default:
                        return EnumStructureState.INDETERMINATE;
                }
            }
        }
    }
    return EnumStructureState.VALID;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) IFarmComponent(forestry.api.farming.IFarmComponent) ITileStructure(forestry.api.core.ITileStructure) Vect(forestry.core.vect.Vect) Block(net.minecraft.block.Block) EnumStructureBlock(forestry.core.utils.Schemata.EnumStructureBlock) EnumStructureBlock(forestry.core.utils.Schemata.EnumStructureBlock)

Example 3 with EnumStructureBlock

use of forestry.core.utils.Schemata.EnumStructureBlock in project ForestryMC by ForestryMC.

the class StructureLogicAlveary method determineMasterState.

@Override
protected EnumStructureState determineMasterState(Schemata schemata, boolean rotate) {
    Vect dimensions = schemata.getDimensions(rotate);
    int offsetX = schemata.getxOffset();
    int offsetZ = schemata.getzOffset();
    if (rotate) {
        offsetX = schemata.getzOffset();
        offsetZ = schemata.getxOffset();
    }
    for (int i = 0; i < dimensions.x; i++) {
        for (int j = 0; j < schemata.getHeight(); j++) {
            for (int k = 0; k < dimensions.z; k++) {
                int x = structureTile.xCoord + i + offsetX;
                int y = structureTile.yCoord + j + schemata.getyOffset();
                int z = structureTile.zCoord + k + offsetZ;
                if (!structureTile.getWorldObj().blockExists(x, y, z)) {
                    return EnumStructureState.INDETERMINATE;
                }
                EnumStructureBlock required = schemata.getAt(i, j, k, rotate);
                if (required == EnumStructureBlock.ANY) {
                    continue;
                }
                TileEntity tile = structureTile.getWorldObj().getTileEntity(x, y, z);
                Block block = structureTile.getWorldObj().getBlock(x, y, z);
                switch(required) {
                    case AIR:
                        if (!block.isAir(structureTile.getWorldObj(), x, y, z)) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    case BLOCK_A:
                        if (tile == null || !(tile instanceof IAlvearyComponent)) {
                            return EnumStructureState.INVALID;
                        }
                        if (!((ITileStructure) tile).getTypeUID().equals(UID_ALVEARY)) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    case MASTER:
                    case BLOCK_B:
                        if (tile == null || !(tile instanceof TileAlvearyPlain)) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    case BLOCK_C:
                        if (!slabBlocks.contains(block)) {
                            return EnumStructureState.INVALID;
                        }
                        if ((structureTile.getWorldObj().getBlockMetadata(x, y, z) & 8) != 0) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    case BLOCK_D:
                        if (block != Blocks.spruce_stairs) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    case FOREIGN:
                        if (tile instanceof ITileStructure) {
                            return EnumStructureState.INVALID;
                        }
                        break;
                    default:
                        return EnumStructureState.INDETERMINATE;
                }
            }
        }
    }
    return EnumStructureState.VALID;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) ITileStructure(forestry.api.core.ITileStructure) Vect(forestry.core.vect.Vect) Block(net.minecraft.block.Block) ForestryBlock(forestry.core.config.ForestryBlock) EnumStructureBlock(forestry.core.utils.Schemata.EnumStructureBlock) IAlvearyComponent(forestry.api.apiculture.IAlvearyComponent) EnumStructureBlock(forestry.core.utils.Schemata.EnumStructureBlock)

Aggregations

ITileStructure (forestry.api.core.ITileStructure)3 EnumStructureBlock (forestry.core.utils.Schemata.EnumStructureBlock)3 Vect (forestry.core.vect.Vect)3 TileEntity (net.minecraft.tileentity.TileEntity)3 Block (net.minecraft.block.Block)2 IAlvearyComponent (forestry.api.apiculture.IAlvearyComponent)1 IFarmComponent (forestry.api.farming.IFarmComponent)1 ForestryBlock (forestry.core.config.ForestryBlock)1