Examples of IInventoryUtil


Examples of logisticspipes.interfaces.IInventoryUtil

      }
    }

    if (bestresult == null) return null;
    //Always deny items when we can't put the item anywhere
    IInventoryUtil invUtil = _parentPipe.getSneakyInventory(false);
    if (invUtil == null) return null;
    int roomForItem = invUtil.roomForItem(item);
    if (roomForItem < 1) return null;
    if(includeInTransit) {
      int onRoute = _parentPipe.countOnRoute(item);
      roomForItem = invUtil.roomForItem(item, onRoute + item.getMaxStackSize());
      roomForItem -= onRoute;
      if (roomForItem < 1) return null;
    }

    if(bestresult.maxNumberOfItems == 0) {
View Full Code Here

Examples of logisticspipes.interfaces.IInventoryUtil

    for (AdjacentTile tile :  worldUtil.getAdjacentTileEntities(true)){
      if (!(tile.tile instanceof IInventory)) continue;
     
      IInventory inv = (IInventory) tile.tile;
      if (inv.getSizeInventory() < 1) continue;
      IInventoryUtil invUtil = SimpleServiceLocator.inventoryUtilFactory.getInventoryUtil(inv);
     
      if(_service.getUpgradeManager().hasPatternUpgrade()) {
        createPatternRequest(invUtil);
      } else {
        createSupplyRequest(invUtil);
View Full Code Here

Examples of logisticspipes.interfaces.IInventoryUtil

    sinkResponses.put(slot, new Pair<Integer, List<CCSinkResponder>>(0, respones));
  }

  @Override
  public void tick() {
    IInventoryUtil invUtil = _service.getPointedInventory(true);
    if (invUtil == null) return;
    handleSinkResponses(invUtil);
    if (--currentTick > 0) return;
    if(stalled)
      currentTick = stalledDelay;
    else
      currentTick = normalDelay;
   
    //Extract Item

    if(!_service.canUseEnergy(500)) {
      stalled = true;
      return;
    }
   
    if((!(invUtil instanceof SpecialInventoryHandler) && invUtil.getSizeInventory() == 0) || !_service.canUseEnergy(500)) {
      stalled = true;
      return;
    }
   
    if(lastSuceededStack >= invUtil.getSizeInventory())
      lastSuceededStack = 0;
   
    //incremented at the end of the previous loop.
    if (lastStackLookedAt >= invUtil.getSizeInventory())
      lastStackLookedAt = 0;
   
    ItemStack slot = invUtil.getStackInSlot(lastStackLookedAt);

    while(slot==null) {
      lastStackLookedAt++;
      if (lastStackLookedAt >= invUtil.getSizeInventory())
        lastStackLookedAt = 0;
      slot = invUtil.getStackInSlot(lastStackLookedAt);
      if(lastStackLookedAt == lastSuceededStack) {
        stalled = true;
        send();
        return; // then we have been around the list without sending, halt for now
      }
View Full Code Here

Examples of logisticspipes.interfaces.IInventoryUtil

    //if we don't have a pointed inventory we can't be interested in anything
    if(getSneakyInventory(false) == null) return l1;
    for (int moduleIndex = 0; moduleIndex < this.getChassiSize(); moduleIndex++){
      LogisticsModule module = _module.getSubModule(moduleIndex);
      if(module!=null && module.interestedInAttachedInventory()) {
        IInventoryUtil inv = getSneakyInventory(false);
        Set<ItemIdentifier> items = inv.getItems();
        l1.addAll(items);

        //also add tag-less variants ... we should probably add a module.interestedIgnoringNBT at some point
        for(ItemIdentifier id:items) {
          l1.add(id.getIgnoringNBT());
View Full Code Here

Examples of logisticspipes.interfaces.IInventoryUtil

  @Override
  public void tick() {
    if (++currentTick  < ticksToAction) return;
    currentTick = 0;

    IInventoryUtil inv = _service.getSneakyInventory(true);
    if(inv == null) return;
    for(int i=0; i < inv.getSizeInventory(); i++) {
      ItemStack stack = inv.getStackInSlot(i);
      if (stack == null) return;
      if (isOfInterest(stack)) {
        //If item set to discharge and its fully discharged, then extract it.
        if (_dischargeMode && SimpleServiceLocator.IC2Proxy.isFullyDischarged(stack)) {
          Triplet<Integer, SinkReply, List<IFilter>> reply = SimpleServiceLocator.logisticsManager.hasDestinationWithMinPriority(ItemIdentifier.get(stack), _service.getSourceID(), true, FixedPriority.ElectricBuffer);
          if(reply == null) continue;
          if(_service.useEnergy(10)) {
            _service.spawnParticle(Particles.OrangeParticle, 2);
            _service.sendStack(inv.decrStackSize(i,1), reply, ItemSendMode.Normal);
            return;
          }
        }
        //If item set to charge  and its fully charged, then extract it.
        if (!_dischargeMode && SimpleServiceLocator.IC2Proxy.isFullyCharged(stack)) {
          Triplet<Integer, SinkReply, List<IFilter>> reply = SimpleServiceLocator.logisticsManager.hasDestinationWithMinPriority(ItemIdentifier.get(stack), _service.getSourceID(), true, FixedPriority.ElectricBuffer);
          if(reply == null) continue;
          if(_service.useEnergy(10)) {
            _service.spawnParticle(Particles.OrangeParticle, 2);
            _service.sendStack(inv.decrStackSize(i,1), reply, ItemSendMode.Normal);
            return;
          }
        }
      }
    }
View Full Code Here

Examples of logisticspipes.interfaces.IInventoryUtil

    ForgeDirection extractOrientation = _sneakyDirection;
    if(extractOrientation == ForgeDirection.UNKNOWN) {
      extractOrientation = _service.inventoryOrientation().getOpposite();
    }

    IInventoryUtil targetUtil = _service.getSneakyInventory(extractOrientation,true);

   
    for (int i = 0; i < targetUtil.getSizeInventory(); i++){
     
      ItemStack slot = targetUtil.getStackInSlot(i);
      if (slot == null) continue;
      ItemIdentifier slotitem = ItemIdentifier.get(slot);
      List<Integer> jamList = new LinkedList<Integer>();
      Pair<Integer, SinkReply> reply = _service.hasDestination(slotitem, true, jamList);
      if (reply == null) continue;

      int itemsleft = itemsToExtract();
      while(reply != null) {
        int count = Math.min(itemsleft, slot.stackSize);
        count = Math.min(count, slotitem.getMaxStackSize());
        if(reply.getValue2().maxNumberOfItems > 0) {
          count = Math.min(count, reply.getValue2().maxNumberOfItems);
        }

        while(!_service.useEnergy(neededEnergy() * count) && count > 0) {
          _service.spawnParticle(Particles.OrangeParticle, 2);
          count--;
        }

        if(count <= 0) {
          break;
        }

        ItemStack stackToSend = targetUtil.decrStackSize(i, count);
        if(stackToSend == null || stackToSend.stackSize == 0) break;
        count = stackToSend.stackSize;
        _service.sendStack(stackToSend, reply, itemSendMode());
        itemsleft -= count;
        if(itemsleft <= 0) break;
        slot = targetUtil.getStackInSlot(i);
        if (slot == null) break;
        jamList.add(reply.getValue1());
        reply = _service.hasDestination(ItemIdentifier.get(slot), true, jamList);
      }
      break;
View Full Code Here

Examples of logisticspipes.interfaces.IInventoryUtil

      currentTick = stalledDelay;
    else
      currentTick = normalDelay;
   
    //Extract Item
    IInventoryUtil invUtil = _service.getPointedInventory(true);
    if (invUtil == null) return;

    if(!_service.canUseEnergy(500)) {
      stalled = true;
      return;
    }
   
    if(invUtil instanceof SpecialInventoryHandler){
      Map<ItemIdentifier, Integer> items = invUtil.getItemsAndCount();
      if(lastSuceededStack >= items.size())
        lastSuceededStack = 0;
      if (lastStackLookedAt >= items.size())
        lastStackLookedAt = 0;
      int lookedAt = 0;
      for (Entry<ItemIdentifier, Integer> item :items.entrySet()) {
        // spool to current place
        lookedAt++;
        if(lookedAt <= lastStackLookedAt)
          continue;
       
        LinkedList<Integer> jamList =  new LinkedList<Integer>();
        Pair<Integer, SinkReply> reply = _service.hasDestination(item.getKey(), false, jamList);
        if (reply == null) {
          if(lastStackLookedAt == lastSuceededStack) {
            stalled = true;
          }
          lastStackLookedAt++;
          return;
        }
        if(!_service.useEnergy(500)) {
          stalled = true;
          lastStackLookedAt++;
          return;
        }
        stalled = false;
   
        //send up to one stack
        int maxItemsToSend = item.getKey().getMaxStackSize();
        int availableItems = Math.min(maxItemsToSend, item.getValue());
        while(reply != null) {
          int count = availableItems;
          if(reply.getValue2().maxNumberOfItems != 0) {
            count = Math.min(count, reply.getValue2().maxNumberOfItems);
          }
          ItemStack stackToSend = invUtil.getMultipleItems(item.getKey(), count);
          if(stackToSend == null || stackToSend.stackSize == 0) break;
   
          availableItems -= stackToSend.stackSize;
          _service.sendStack(stackToSend, reply, ItemSendMode.Fast);
         
          _service.spawnParticle(Particles.OrangeParticle, 8);
   
          if(availableItems <= 0) break;
   
          jamList.add(reply.getValue1());
          reply = _service.hasDestination(item.getKey(), false, jamList);
        }
        if(availableItems > 0) { //if we didn't send maxItemsToSend, try next item next time
          lastSuceededStack = lastStackLookedAt;
          lastStackLookedAt++;
        } else {
          lastSuceededStack = lastStackLookedAt - 1;
          if(lastSuceededStack < 0)
            lastSuceededStack = items.size() - 1;
        }
        return;
      }
    } else {
     
      if((!(invUtil instanceof SpecialInventoryHandler) && invUtil.getSizeInventory() == 0) || !_service.canUseEnergy(500)) {
        stalled = true;
        return;
      }
     
      if(lastSuceededStack >= invUtil.getSizeInventory())
        lastSuceededStack = 0;
     
      //incremented at the end of the previous loop.
      if (lastStackLookedAt >= invUtil.getSizeInventory())
        lastStackLookedAt = 0;
     
      ItemStack slot = invUtil.getStackInSlot(lastStackLookedAt);
 
      while(slot==null) {
        lastStackLookedAt++;
        if (lastStackLookedAt >= invUtil.getSizeInventory())
          lastStackLookedAt = 0;
        slot = invUtil.getStackInSlot(lastStackLookedAt);
        if(lastStackLookedAt == lastSuceededStack) {
          stalled = true;
          send();
          return; // then we have been around the list without sending, halt for now
        }
      }
      send();
 
      // begin duplicate code
      List<Integer> jamList = new LinkedList<Integer>();
      Pair<Integer, SinkReply> reply = _service.hasDestination(ItemIdentifier.get(slot), false, jamList);
      if (reply == null) {
        if(lastStackLookedAt == lastSuceededStack) {
          stalled = true;
        }
        lastStackLookedAt++;
        return;
      }
      if(!_service.useEnergy(500)) {
        stalled = true;
        lastStackLookedAt++;
        return;
      }
     
      stalled = false;
 
      //don't directly modify the stack in the inv
      int sizePrev;
      slot = slot.copy();
      sizePrev = slot.stackSize;
      boolean partialSend=false;
      while(reply != null) {
        int count = slot.stackSize;
        if(reply.getValue2().maxNumberOfItems > 0) {
          count = Math.min(count, reply.getValue2().maxNumberOfItems);
        }
        ItemStack stackToSend = slot.splitStack(count);
 
        _service.sendStack(stackToSend, reply, ItemSendMode.Fast);
        _service.spawnParticle(Particles.OrangeParticle, 8);
 
        if(slot.stackSize == 0) break;
 
        jamList.add(reply.getValue1());
        reply = _service.hasDestination(ItemIdentifier.get(slot), false, jamList);
      }
      ItemStack returned = null;
      int amountToExtract = sizePrev - slot.stackSize;
      if(slot.stackSize > 0) {
        partialSend = true;
      }
      returned = invUtil.decrStackSize(lastStackLookedAt, amountToExtract);
      if(returned.stackSize != amountToExtract) {
        throw new UnsupportedOperationException("Couldn't extract the already sended items from the inventory.");
      }
 
      lastSuceededStack=lastStackLookedAt;
      // end duplicate code
      lastStackLookedAt++;
      if(partialSend){
        if (lastStackLookedAt >= invUtil.getSizeInventory())
          lastStackLookedAt = 0;
        while(lastStackLookedAt != lastSuceededStack) {
          ItemStack tstack = invUtil.getStackInSlot(lastStackLookedAt);
          if(tstack != null && !slot.isItemEqual(tstack))
            break;
          lastStackLookedAt++;
          if (lastStackLookedAt >= invUtil.getSizeInventory())
            lastStackLookedAt = 0;
         
        }
      }
    }
View Full Code Here

Examples of logisticspipes.interfaces.IInventoryUtil

    int count = 0;
    WorldUtil wUtil = new WorldUtil(getWorld(), getX(), getY(), getZ());
    for (AdjacentTile tile : wUtil.getAdjacentTileEntities(true)){
      if (!(tile.tile instanceof IInventory)) continue;
      if (SimpleServiceLocator.pipeInformaitonManager.isPipe(tile.tile)) continue;
      IInventoryUtil inv = this.getAdaptedInventoryUtil(tile);
      count += inv.itemCount(item);
    }
    return count;
  }
View Full Code Here

Examples of logisticspipes.interfaces.IInventoryUtil

    WorldUtil wUtil = new WorldUtil(getWorld(), getX(), getY(), getZ());
    for (AdjacentTile tile : wUtil.getAdjacentTileEntities(true)){
      if (!(tile.tile instanceof IInventory)) continue;
      if (SimpleServiceLocator.pipeInformaitonManager.isPipe(tile.tile)) continue;
     
      IInventoryUtil inv = getAdaptedInventoryUtil(tile);
      int available = inv.itemCount(item);
      if (available == 0) continue;
     
      int wanted = Math.min(available, stack.getStackSize());
      wanted = Math.min(wanted, maxCount);
      wanted = Math.min(wanted, item.getMaxStackSize());
      IRouter dRtr = SimpleServiceLocator.routerManager.getRouterUnsafe(destination,false);
      if(dRtr == null) {
        _orderManager.sendFailed();
        return 0;
      }
      SinkReply reply = LogisticsManager.canSink(dRtr, null, true, stack.getItem(), null, true,false);
      boolean defersend = false;
      if(reply != null) {// some pipes are not aware of the space in the adjacent inventory, so they return null
        if(reply.maxNumberOfItems < wanted) {
          wanted = reply.maxNumberOfItems;
          if(wanted <= 0) {
            _orderManager.deferSend();
            return 0;
          }
          defersend = true;
        }
      }
      if(!canUseEnergy(wanted * neededEnergy())) {
        return -1;
      }
      ItemStack removed = inv.getMultipleItems(item, wanted);
      if(removed == null || removed.stackSize == 0) continue;
      int sent = removed.stackSize;
      useEnergy(sent * neededEnergy());

      IRoutedItem routedItem = SimpleServiceLocator.routedItemHelper.createNewTravelItem(removed);
View Full Code Here

Examples of logisticspipes.interfaces.IInventoryUtil

   
    WorldUtil wUtil = new WorldUtil(getWorld(), getX(), getY(), getZ());
    for (AdjacentTile tile : wUtil.getAdjacentTileEntities(true)){
      if (!(tile.tile instanceof IInventory)) continue;
      if (SimpleServiceLocator.pipeInformaitonManager.isPipe(tile.tile)) continue;
      IInventoryUtil inv = this.getAdaptedInventoryUtil(tile);
     
      Map<ItemIdentifier, Integer> currentInv = inv.getItemsAndCount();
outer:
      for (Entry<ItemIdentifier, Integer> currItem : currentInv.entrySet()) {
        if(items.containsKey(currItem.getKey())) continue;
       
        if(hasFilter() && ((isExcludeFilter() && itemIsFiltered(currItem.getKey()))  || (!isExcludeFilter() && !itemIsFiltered(currItem.getKey())))) continue;
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. 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.