blob: 7ef23db57a9cb5ae66f3d13eea5fb16d945923c7 [file] [log] [blame] [raw]
package mekanism.common;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import mekanism.api.Coord4D;
import mekanism.api.EnumColor;
import mekanism.api.transmitters.DynamicNetwork;
import mekanism.api.transmitters.IGridTransmitter;
import mekanism.common.content.transporter.TransporterManager;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.common.FMLCommonHandler;
public class InventoryNetwork extends DynamicNetwork<IInventory, InventoryNetwork>
{
public InventoryNetwork() {}
public InventoryNetwork(Collection<InventoryNetwork> networks)
{
for(InventoryNetwork net : networks)
{
if(net != null)
{
adoptTransmittersAndAcceptorsFrom(net);
net.deregister();
}
}
register();
}
public List<AcceptorData> calculateAcceptors(ItemStack stack, EnumColor color)
{
List<AcceptorData> toReturn = new ArrayList<AcceptorData>();
for(Coord4D coord : possibleAcceptors.keySet())
{
if(coord == null)
{
continue;
}
EnumSet<ForgeDirection> sides = acceptorDirections.get(coord);
IInventory acceptor = (IInventory)coord.getTileEntity(getWorld());
if(sides == null || sides.isEmpty())
{
continue;
}
AcceptorData data = null;
for(ForgeDirection side : sides)
{
ItemStack returned = TransporterManager.getPredictedInsert((TileEntity)acceptor, color, stack, side.getOpposite().ordinal());
if(TransporterManager.didEmit(stack, returned))
{
if(data == null)
{
data = new AcceptorData(coord, returned, side.getOpposite());
}
else {
data.sides.add(side.getOpposite());
}
}
}
if(data != null)
{
toReturn.add(data);
}
}
return toReturn;
}
public static class AcceptorData
{
public Coord4D location;
public ItemStack rejected;
public EnumSet<ForgeDirection> sides = EnumSet.noneOf(ForgeDirection.class);
public AcceptorData(Coord4D coord, ItemStack stack, ForgeDirection side)
{
location = coord;
rejected = stack;
sides.add(side);
}
}
@Override
public void onUpdate()
{
super.onUpdate();
if(FMLCommonHandler.instance().getEffectiveSide().isServer())
{
//Future!
}
}
@Override
public void absorbBuffer(IGridTransmitter<IInventory, InventoryNetwork> transmitter) {}
@Override
public void clampBuffer() {}
@Override
public Set<IInventory> getAcceptors(Object data)
{
Set<IInventory> toReturn = new HashSet<IInventory>();
if(FMLCommonHandler.instance().getEffectiveSide().isClient())
{
return toReturn;
}
return toReturn;
}
@Override
public String toString()
{
return "[InventoryNetwork] " + transmitters.size() + " transmitters, " + possibleAcceptors.size() + " acceptors.";
}
@Override
public String getNeededInfo()
{
return null;
}
@Override
public String getStoredInfo()
{
return null;
}
@Override
public String getFlowInfo()
{
return null;
}
}