| 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; |
| } |
| } |