Package logisticspipes.modules

Source Code of logisticspipes.modules.ModulePassiveSupplier

package logisticspipes.modules;


import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import logisticspipes.gui.hud.modules.HUDSimpleFilterModule;
import logisticspipes.interfaces.IClientInformationProvider;
import logisticspipes.interfaces.IHUDModuleHandler;
import logisticspipes.interfaces.IHUDModuleRenderer;
import logisticspipes.interfaces.IInventoryUtil;
import logisticspipes.interfaces.IModuleInventoryReceive;
import logisticspipes.interfaces.IModuleWatchReciver;
import logisticspipes.modules.abstractmodules.LogisticsModule;
import logisticspipes.modules.abstractmodules.LogisticsSimpleFilterModule;
import logisticspipes.network.PacketHandler;
import logisticspipes.network.packets.hud.HUDStartModuleWatchingPacket;
import logisticspipes.network.packets.hud.HUDStopModuleWatchingPacket;
import logisticspipes.network.packets.module.ModuleInventory;
import logisticspipes.proxy.MainProxy;
import logisticspipes.utils.ISimpleInventoryEventHandler;
import logisticspipes.utils.PlayerCollectionList;
import logisticspipes.utils.SinkReply;
import logisticspipes.utils.SinkReply.FixedPriority;
import logisticspipes.utils.item.ItemIdentifier;
import logisticspipes.utils.item.ItemIdentifierInventory;
import logisticspipes.utils.item.ItemIdentifierStack;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IIcon;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ModulePassiveSupplier extends LogisticsSimpleFilterModule implements IClientInformationProvider, IHUDModuleHandler, IModuleWatchReciver, IModuleInventoryReceive, ISimpleInventoryEventHandler {

  private final ItemIdentifierInventory _filterInventory = new ItemIdentifierInventory(9, "Requested items", 64);

  private IHUDModuleRenderer HUD = new HUDSimpleFilterModule(this);
 
  private final PlayerCollectionList localModeWatchers = new PlayerCollectionList();
 
  public ModulePassiveSupplier() {
    _filterInventory.addListener(this);
  }

  public IInventory getFilterInventory(){
    return _filterInventory;
  }
 
  private static final SinkReply _sinkReply = new SinkReply(FixedPriority.PassiveSupplier, 0, true, false, 2, 0);
  @Override
  public SinkReply sinksItem(ItemIdentifier item, int bestPriority, int bestCustomPriority, boolean allowDefault, boolean includeInTransit) {
    if(bestPriority > _sinkReply.fixedPriority.ordinal() || (bestPriority == _sinkReply.fixedPriority.ordinal() && bestCustomPriority >= _sinkReply.customPriority)) return null;

    IInventoryUtil targetUtil = _service.getSneakyInventory(false);
    if (targetUtil == null) return null;
   
    if (!_filterInventory.containsItem(item)) return null;
   
    int targetCount = _filterInventory.itemCount(item);
    int haveCount = targetUtil.itemCount(item);
    if (targetCount <= haveCount) return null;
   
    if(_service.canUseEnergy(2)) {
      return new SinkReply(_sinkReply, targetCount - haveCount);
    }
    return null;
  }

  @Override
  public void readFromNBT(NBTTagCompound nbttagcompound) {
    _filterInventory.readFromNBT(nbttagcompound, "");
  }

  @Override
  public void writeToNBT(NBTTagCompound nbttagcompound) {
    _filterInventory.writeToNBT(nbttagcompound, "");
  }

  @Override
  public LogisticsModule getSubModule(int slot) {return null;}

  @Override
  public void tick() {}

  @Override
  public List<String> getClientInformation() {
    List<String> list = new ArrayList<String>();
    list.add("Supplied: ");
    list.add("<inventory>");
    list.add("<that>");
    return list;
  }
 
  @Override
  public void startHUDWatching() {
    MainProxy.sendPacketToServer(PacketHandler.getPacket(HUDStartModuleWatchingPacket.class).setModulePos(this));
  }

  @Override
  public void stopHUDWatching() {
    MainProxy.sendPacketToServer(PacketHandler.getPacket(HUDStopModuleWatchingPacket.class).setModulePos(this));
  }

  @Override
  public void startWatching(EntityPlayer player) {
    localModeWatchers.add(player);
    MainProxy.sendPacketToPlayer(PacketHandler.getPacket(ModuleInventory.class).setIdentList(ItemIdentifierStack.getListFromInventory(_filterInventory)).setModulePos(this), player);
  }

  @Override
  public void stopWatching(EntityPlayer player) {
    localModeWatchers.remove(player);
  }

  @Override
  public IHUDModuleRenderer getHUDRenderer() {
    return HUD;
  }

  @Override
  public void handleInvContent(Collection<ItemIdentifierStack> list) {
    _filterInventory.handleItemIdentifierList(list);
  }

  @Override
  public void InventoryChanged(IInventory inventory) {
    MainProxy.sendToPlayerList(PacketHandler.getPacket(ModuleInventory.class).setIdentList(ItemIdentifierStack.getListFromInventory(_filterInventory)).setModulePos(this), localModeWatchers);
  }

  @Override
  public boolean hasGenericInterests() {
    return false;
  }

  @Override
  public List<ItemIdentifier> getSpecificInterests() {
    Map<ItemIdentifier, Integer> mapIC = _filterInventory.getItemsAndCount();
    List<ItemIdentifier> li= new ArrayList<ItemIdentifier>(mapIC.size());
    li.addAll(mapIC.keySet());
    return li;
  }

  @Override
  public boolean interestedInAttachedInventory() {   
    return false;
  }

  @Override
  public boolean interestedInUndamagedID() {
    return false;
  }

  @Override
  public boolean recievePassive() {
    return true;
  }

  @Override
  @SideOnly(Side.CLIENT)
  public IIcon getIconTexture(IIconRegister register) {
    return register.registerIcon("logisticspipes:itemModule/ModulePassiveSupplier");
  }
}
TOP

Related Classes of logisticspipes.modules.ModulePassiveSupplier

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.