Package buildcraft.core.builders

Examples of buildcraft.core.builders.BuildingSlotBlock


            if (!SchematicRegistry.INSTANCE.isAllowedForBuilding(slot.block, slot.meta)) {
              continue;
            }

            BuildingSlotBlock b = new BuildingSlotBlock();
            b.schematic = slot;
            b.x = xCoord;
            b.y = yCoord;
            b.z = zCoord;
            b.mode = Mode.ClearIfInvalid;
            b.buildStage = 0;

            buildList.add(b);
          }

        }
      }
    }

    LinkedList<BuildingSlotBlock> tmpStandalone = new LinkedList<BuildingSlotBlock>();
    LinkedList<BuildingSlotBlock> tmpSupported = new LinkedList<BuildingSlotBlock>();
    LinkedList<BuildingSlotBlock> tmpExpanding = new LinkedList<BuildingSlotBlock>();

    for (int j = 0; j < blueprint.sizeY; ++j) {
      for (int i = 0; i < blueprint.sizeX; ++i) {
        for (int k = 0; k < blueprint.sizeZ; ++k) {
          int xCoord = i + x - blueprint.anchorX;
          int yCoord = j + y - blueprint.anchorY;
          int zCoord = k + z - blueprint.anchorZ;

          SchematicBlock slot = (SchematicBlock) blueprint.contents[i][j][k];

          if (slot == null || yCoord < 0 || yCoord >= context.world.getHeight()) {
            continue;
          }

          if (!SchematicRegistry.INSTANCE.isAllowedForBuilding(slot.block, slot.meta)) {
            continue;
          }

          BuildingSlotBlock b = new BuildingSlotBlock();
          b.schematic = slot;
          b.x = xCoord;
          b.y = yCoord;
          b.z = zCoord;
          b.mode = Mode.Build;
View Full Code Here


    }

    iterator.startIteration();

    while (iterator.hasNext()) {
      BuildingSlotBlock slot = iterator.next();

      if (slot.buildStage > buildList.getFirst().buildStage) {
        iterator.reset();
        return null;
      }

      if (slot.built) {
        iterator.remove();

        if (slot.mode == Mode.ClearIfInvalid) {
          clearedLocations.add(new BlockIndex(slot.x,
              slot.y, slot.z));
        } else {
          builtLocations.add(new BlockIndex(slot.x,
              slot.y, slot.z));
        }

        postProcessing.add(slot);

        continue;
      }

      if (slot.reserved) {
        continue;
      }

      try {
        if (BlockUtil.isUnbreakableBlock(world, slot.x, slot.y, slot.z)) {
          // if the block can't be broken, just forget this iterator
          iterator.remove();

          if (slot.mode == Mode.ClearIfInvalid) {
            clearedLocations.add(new BlockIndex(slot.x,
                slot.y, slot.z));
          } else {
            builtLocations.add(new BlockIndex(slot.x,
                slot.y, slot.z));
          }
        } else if (!slot.isAlreadyBuilt(context)) {
          if (slot.mode == Mode.ClearIfInvalid) {
            if (BuildCraftAPI.isSoftBlock(world, slot.x, slot.y,
                slot.z)) {
              iterator.remove();
              clearedLocations.add(new BlockIndex(slot.x,
                  slot.y, slot.z));
            } else {
              if (builder == null) {
                createDestroyItems(slot);
                return slot;
              } else if (canDestroy(builder, context, slot)) {
                consumeEnergyToDestroy(builder, slot);
                createDestroyItems(slot);

                iterator.remove();
                clearedLocations.add(new BlockIndex(slot.x,
                    slot.y, slot.z));
                return slot;
              }
            }
          } else if (!slot.schematic.doNotBuild()) {
            if (builder == null) {
              return slot;
            } else if (checkRequirements(builder, slot.schematic)) {
              // At this stage, regardless of the fact that the
              // block can actually be built or not, we'll try.
              // When the item reaches the actual block, we'll
              // verify that the location is indeed clear, and
              // avoid building otherwise.
              builder.consumeEnergy(slot.getEnergyRequirement());
              useRequirements(builder, slot);

              iterator.remove();
              postProcessing.add(slot);
              builtLocations.add(new BlockIndex(slot.x,
View Full Code Here

            SchematicBlockBase slot = blueprint.contents[i][j][k];

            if (slot == null
                && !clearedLocations.contains(new BlockIndex(
                    xCoord, yCoord, zCoord))) {
              BuildingSlotBlock b = new BuildingSlotBlock();

              b.schematic = null;
              b.x = xCoord;
              b.y = yCoord;
              b.z = zCoord;
              b.mode = Mode.ClearIfInvalid;
              b.buildStage = 0;

              buildList.add(b);
            }
          }
        }
      }
    }

    for (int j = 0; j < blueprint.sizeY; ++j) {
      for (int i = 0; i < blueprint.sizeX; ++i) {
        for (int k = 0; k < blueprint.sizeZ; ++k) {
          int xCoord = i + x - blueprint.anchorX;
          int yCoord = j + y - blueprint.anchorY;
          int zCoord = k + z - blueprint.anchorZ;

          if (yCoord < 0 || yCoord >= context.world.getHeight()) {
            continue;
          }

          SchematicBlockBase slot = blueprint.contents[i][j][k];

          if (slot != null && !builtLocations.contains(new BlockIndex(xCoord, yCoord, zCoord))) {
            BuildingSlotBlock b = new BuildingSlotBlock();

            b.schematic = slot;
            b.x = xCoord;
            b.y = yCoord;
            b.z = zCoord;
View Full Code Here

  }

  @Override
  public BuildingSlot getNextBlock(World world, TileAbstractBuilder inv) {
    if (buildList.size() != 0) {
      BuildingSlotBlock slot = internalGetNextBlock(world, inv);
      checkDone();

      if (slot != null) {
        return slot;
      }
View Full Code Here

    return null;
  }

  private BuildingSlotBlock internalGetNextBlock(World world, TileAbstractBuilder builder) {
    BuildingSlotBlock result = null;

    IInvSlot firstSlotToConsume = null;

    for (IInvSlot invSlot : InventoryIterator.getIterable(builder, ForgeDirection.UNKNOWN)) {
      if (!builder.isBuildingMaterialSlot(invSlot.getIndex())) {
        continue;
      }

      ItemStack stack = invSlot.getStackInSlot();

      if (stack != null && stack.stackSize > 0) {
        firstSlotToConsume = invSlot;
        break;
      }
    }

    iterator.startIteration();

    while (iterator.hasNext()) {
      BuildingSlotBlock slot = iterator.next();

      if (slot.buildStage > buildList.getFirst().buildStage) {
        iterator.reset ();
        return null;
      }

      if (BlockUtil.isUnbreakableBlock(world, slot.x, slot.y, slot.z)) {
        iterator.remove();
        if (slot.mode == Mode.ClearIfInvalid) {
          clearedLocations.add(new BlockIndex(slot.x, slot.y, slot.z));
        } else {
          builtLocations.add(new BlockIndex(slot.x, slot.y, slot.z));
        }
      } else if (slot.mode == Mode.ClearIfInvalid) {
        if (BuildCraftAPI.isSoftBlock(world, slot.x, slot.y, slot.z)) {
          iterator.remove();
          clearedLocations.add(new BlockIndex(slot.x, slot.y, slot.z));
        } else {
          if (canDestroy(builder, context, slot)) {
            consumeEnergyToDestroy(builder, slot);
            createDestroyItems(slot);

            result = slot;
            iterator.remove();
            clearedLocations.add(new BlockIndex(slot.x, slot.y, slot.z));

            break;
          }
        }
      } else if (slot.mode == Mode.Build) {
        if (!BuildCraftAPI.isSoftBlock(world, slot.x, slot.y, slot.z)) {
          iterator.remove();
          builtLocations.add(new BlockIndex(slot.x, slot.y, slot.z));
        } else {
          if (builder.consumeEnergy(BuilderAPI.BUILD_ENERGY) && firstSlotToConsume != null) {
            slot.addStackConsumed(firstSlotToConsume.decreaseStackInSlot(1));
            result = slot;
            iterator.remove();
            builtLocations.add(new BlockIndex(slot.x, slot.y, slot.z));

            break;
View Full Code Here

TOP

Related Classes of buildcraft.core.builders.BuildingSlotBlock

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.