Пример #1
0
  private void handleTileReached(TravelingItem item, TileEntity tile) {
    if (passToNextPipe(item, tile)) {
      // NOOP
    } else if (tile instanceof IInventory) {
      if (CoreProxy.proxy.isSimulating(container.worldObj)) {
        if (item.getInsertionHandler().canInsertItem(item, (IInventory) tile)) {
          ItemStack added =
              Transactor.getTransactorFor(tile)
                  .add(item.getItemStack(), item.output.getOpposite(), true);
          item.getItemStack().stackSize -= added.stackSize;
        }

        if (item.getItemStack().stackSize > 0) {
          reverseItem(item);
        }
      }
    } else {
      if (travelHook != null) {
        travelHook.drop(this, item);
      }

      EntityItem dropped = item.toEntityItem(item.output);

      if (dropped != null) {
        // On SMP, the client side doesn't actually drops
        // items
        onDropped(dropped);
      }
    }
  }
Пример #2
0
  private void moveSolids() {
    items.performLoad();
    items.performRemoval();

    for (TravelingItem item : items) {
      if (item.isCorrupted()) {
        items.scheduleRemoval(item);
        continue;
      }

      if (item.getContainer() != this.container) {
        items.scheduleRemoval(item);
        continue;
      }

      Position motion = new Position(0, 0, 0, item.toCenter ? item.input : item.output);
      motion.moveForwards(item.getSpeed());

      item.movePosition(motion.x, motion.y, motion.z);

      if ((item.toCenter && middleReached(item)) || outOfBounds(item)) {
        item.toCenter = false;

        // Reajusting to the middle
        item.setPosition(
            container.xCoord + 0.5,
            container.yCoord + TransportUtils.getPipeFloorOf(item.getItemStack()),
            container.zCoord + 0.5);

        if (item.output == ForgeDirection.UNKNOWN) {
          if (travelHook != null) {
            travelHook.drop(this, item);
          }

          EntityItem dropped = null;

          if (items.scheduleRemoval(item)) {
            dropped = item.toEntityItem(item.input);
          }

          if (dropped != null) {
            onDropped(dropped);
          }
        } else {
          if (travelHook != null) {
            travelHook.centerReached(this, item);
          }
        }

      } else if (!item.toCenter && endReached(item)) {
        TileEntity tile = container.getTile(item.output);

        boolean handleItem = true;
        if (travelHook != null) {
          handleItem = !travelHook.endReached(this, item, tile);
        }

        // If the item has not been scheduled to removal by the hook
        if (handleItem && items.scheduleRemoval(item)) {
          handleTileReached(item, tile);
        }
      }
    }

    items.performRemoval();
  }