Search in sources :

Example 11 with ITileStructure

use of forestry.api.core.ITileStructure in project ForestryMC by ForestryMC.

the class TriggerLowSoil method isTriggerActive.

/**
 * Return true if the tile given in parameter activates the trigger, given
 * the parameters.
 */
@Override
public boolean isTriggerActive(TileEntity tile, ForgeDirection side, IStatementContainer source, IStatementParameter[] parameters) {
    IStatementParameter parameter = null;
    if (parameters.length > 0) {
        parameter = parameters[0];
    }
    if (!(tile instanceof TileHatch)) {
        return false;
    }
    ITileStructure central = ((TileHatch) tile).getCentralTE();
    if (central == null || !(central instanceof TileFarmPlain)) {
        return false;
    }
    if (parameter == null || parameter.getItemStack() == null) {
        return !((TileFarmPlain) central).hasResourcesAmount(threshold);
    } else {
        ItemStack filter = parameter.getItemStack().copy();
        filter.stackSize = threshold;
        return !((TileFarmPlain) central).hasResources(new ItemStack[] { filter });
    }
}
Also used : ITileStructure(forestry.api.core.ITileStructure) IStatementParameter(buildcraft.api.statements.IStatementParameter) TileHatch(forestry.farming.gadgets.TileHatch) ItemStack(net.minecraft.item.ItemStack) TileFarmPlain(forestry.farming.gadgets.TileFarmPlain)

Example 12 with ITileStructure

use of forestry.api.core.ITileStructure 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)12 TileEntity (net.minecraft.tileentity.TileEntity)6 Vect (forestry.core.vect.Vect)4 EnumStructureBlock (forestry.core.utils.Schemata.EnumStructureBlock)3 IFarmComponent (forestry.api.farming.IFarmComponent)2 TileFarmPlain (forestry.farming.gadgets.TileFarmPlain)2 TileHatch (forestry.farming.gadgets.TileHatch)2 Block (net.minecraft.block.Block)2 ItemStack (net.minecraft.item.ItemStack)2 IStatementParameter (buildcraft.api.statements.IStatementParameter)1 IAlvearyComponent (forestry.api.apiculture.IAlvearyComponent)1 IFarmHousing (forestry.api.farming.IFarmHousing)1 ForestryBlock (forestry.core.config.ForestryBlock)1 TankManager (forestry.core.fluids.TankManager)1 EnumStructureState (forestry.core.gadgets.BlockStructure.EnumStructureState)1 TileForestry (forestry.core.gadgets.TileForestry)1 EntityItem (net.minecraft.entity.item.EntityItem)1 IInventory (net.minecraft.inventory.IInventory)1 FluidTankInfo (net.minecraftforge.fluids.FluidTankInfo)1