package advancedsystemsmanager.compatibility.thaumcraft.commands; import advancedsystemsmanager.api.execution.IBuffer; import advancedsystemsmanager.api.execution.IBufferElement; import advancedsystemsmanager.api.execution.Key; import advancedsystemsmanager.compatibility.thaumcraft.TCCompat; import advancedsystemsmanager.flow.FlowComponent; import advancedsystemsmanager.flow.execution.commands.CommandOutput; import advancedsystemsmanager.flow.menus.Menu; import advancedsystemsmanager.compatibility.thaumcraft.menus.MenuAspect; import advancedsystemsmanager.flow.menus.MenuContainer; import advancedsystemsmanager.flow.setting.Setting; import advancedsystemsmanager.reference.Names; import advancedsystemsmanager.util.SystemCoord; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.aspects.IAspectContainer; import java.util.Iterator; import java.util.List; import java.util.Map; public class CommandAspectOutput extends CommandOutput<Aspect> { public CommandAspectOutput() { super(ASPECT_OUTPUT, Names.ASPECT_OUTPUT, IBuffer.ASPECT); } @Override protected void outputFromBuffer(FlowComponent component, IBuffer<Aspect> buffer) { MenuAspect menuAspect = (MenuAspect)component.menus.get(1); List<Setting<Aspect>> validSettings = getValidSettings(menuAspect.getSettings()); for (SystemCoord block : getContainers(component.manager, (MenuContainer)component.menus.get(0))) { IAspectContainer aspectContainer = (IAspectContainer)block.getTileEntity(); Iterator<Map.Entry<Key<Aspect>, IBufferElement<Aspect>>> itr = buffer.getOrderedIterator(); while (itr.hasNext()) { IBufferElement<Aspect> aspectBufferElement = itr.next().getValue(); Setting<Aspect> setting = isValid(validSettings, aspectBufferElement.getContent()); boolean whitelist = menuAspect.useWhiteList(); if ((setting == null) == whitelist) continue; if (aspectContainer.doesContainerAccept(aspectBufferElement.getContent())) { int amount = aspectBufferElement.getSizeLeft(); int leftOver = aspectContainer.addToContainer(aspectBufferElement.getContent(), amount); aspectBufferElement.reduceBufferAmount(amount - leftOver); if (aspectBufferElement.getSizeLeft() == 0) aspectBufferElement.remove(); } } } } @Override public void getMenus(FlowComponent component, List<Menu> menus) { menus.add(new MenuContainer(component, TCCompat.ASPECT_CONTAINER)); menus.add(new MenuAspect(component, false)); } }