use of forestry.core.vect.Vect in project ForestryMC by ForestryMC.
the class FarmHelper method getFarmMultiblockEdge.
private static Vect getFarmMultiblockEdge(World world, Vect start, ForgeDirection direction) {
MutableVect edge = new MutableVect(start);
while (VectUtil.getTile(world, edge) instanceof IFarmComponent) {
edge.add(direction);
}
edge.add(direction.getOpposite());
return new Vect(edge);
}
use of forestry.core.vect.Vect in project ForestryMC by ForestryMC.
the class FarmHelper method getFarmSizeNorthSouth.
public static int getFarmSizeNorthSouth(World world, Vect start) {
ForgeDirection farmSide = ForgeDirection.NORTH;
ForgeDirection startSide = ForgeDirection.EAST;
Vect corner = getFarmMultiblockCorner(world, start, farmSide, startSide);
return getFarmSizeInDirection(world, corner, farmSide, startSide.getOpposite());
}
use of forestry.core.vect.Vect in project ForestryMC by ForestryMC.
the class FarmHelper method getFarmSizeEastWest.
public static int getFarmSizeEastWest(World world, Vect start) {
ForgeDirection farmSide = ForgeDirection.EAST;
ForgeDirection startSide = ForgeDirection.NORTH;
Vect corner = getFarmMultiblockCorner(world, start, farmSide, startSide);
return getFarmSizeInDirection(world, corner, farmSide, startSide.getOpposite());
}
use of forestry.core.vect.Vect 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;
}
use of forestry.core.vect.Vect in project ForestryMC by ForestryMC.
the class FarmLogicArboreal method maintainGermlings.
@Override
protected boolean maintainGermlings(int x, int ySaplings, int z, ForgeDirection direction, int extent) {
World world = getWorld();
for (int i = 0; i < extent; i++) {
Vect position = translateWithOffset(x, ySaplings, z, direction, i);
if (VectUtil.isAirBlock(world, position)) {
Vect soilBelowPosition = new Vect(position.x, position.y - 1, position.z);
ItemStack soilBelow = VectUtil.getAsItemStack(world, soilBelowPosition);
if (isAcceptedSoil(soilBelow)) {
return plantSapling(position);
}
}
}
return false;
}
Aggregations