package advancedsystemsmanager.compatibility.rf.commands; import advancedsystemsmanager.api.execution.IBuffer; import advancedsystemsmanager.api.execution.IBufferElement; import advancedsystemsmanager.compatibility.rf.RFCompat; import advancedsystemsmanager.compatibility.rf.buffer.RFBufferElement; import advancedsystemsmanager.compatibility.rf.menus.MenuRFAmount; import advancedsystemsmanager.compatibility.rf.menus.MenuRFTarget; import advancedsystemsmanager.flow.FlowComponent; import advancedsystemsmanager.flow.execution.buffers.Buffer; import advancedsystemsmanager.flow.execution.commands.CommandInput; import advancedsystemsmanager.flow.menus.Menu; import advancedsystemsmanager.flow.menus.MenuContainer; import advancedsystemsmanager.reference.Names; import advancedsystemsmanager.util.SystemCoord; import cofh.api.energy.IEnergyProvider; import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.List; public class CommandRFInput extends CommandInput<Integer> { public CommandRFInput() { super(RF_INPUT, Names.RF_INPUT, Buffer.RF); } @Override public void getMenus(FlowComponent component, List<Menu> menus) { menus.add(new MenuContainer(component, RFCompat.RF_PROVIDER)); menus.add(new MenuRFTarget(component)); menus.add(new MenuRFAmount(component)); } @Override protected IBuffer getNewBuffer() { return new Buffer<Integer>(); } @Override protected List<IBufferElement<Integer>> getBufferSubElements(int id, List<SystemCoord> blocks, List<Menu> menus) { List<IBufferElement<Integer>> rfBufferElements = new ArrayList<IBufferElement<Integer>>(); MenuRFTarget targets = (MenuRFTarget) menus.get(1); int maxAmount = ((MenuRFAmount) menus.get(2)).getAmount(); maxAmount = maxAmount == 0 ? Integer.MAX_VALUE : maxAmount; for (SystemCoord block : blocks) { IEnergyProvider provider = (IEnergyProvider)block.getTileEntity(); for (int side = 0; side < 6; side++) { if (targets.isActive(side)) { int extractAmount = provider.extractEnergy(ForgeDirection.VALID_DIRECTIONS[side], maxAmount, true); if (extractAmount > 0) { rfBufferElements.add(new RFBufferElement(id, provider, ForgeDirection.VALID_DIRECTIONS[side], extractAmount)); break; } } } } return rfBufferElements; } }