package advancedsystemsmanager.tileentities.manager;
import advancedsystemsmanager.api.execution.ICommand;
import advancedsystemsmanager.api.gui.IManagerButton;
import advancedsystemsmanager.api.gui.IManagerButtonProvider;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.helpers.CopyHelper;
import advancedsystemsmanager.network.ASMPacket;
import advancedsystemsmanager.reference.Names;
import advancedsystemsmanager.registry.CommandRegistry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class DefaultButtonProvider implements IManagerButtonProvider
{
private static final int DELETE_POSITION_X = 18;
private static final int DELETE_POSITION_Y = 126;
private static final int COPY_POSITION_Y = 144;
@Override
public List<IManagerButton> getButtons(TileEntityManager manager)
{
List<IManagerButton> buttons = new ArrayList<IManagerButton>();
for (ICommand command : CommandRegistry.getCommands())
{
if (command != null)
{
buttons.add(new ManagerButtonCreate(manager, command));
}
}
buttons.add(new ManagerButton(manager, Names.DELETE_COMMAND, DELETE_POSITION_X, DELETE_POSITION_Y)
{
int moved;
@Override
public boolean readData(ASMPacket packet)
{
int idToRemove = packet.readVarIntFromBuffer();
if (idToRemove != -1)
{
manager.removeFlowComponent(idToRemove, packet.readBoolean());
return true;
}
return false;
}
@Override
public boolean validClick()
{
for (FlowComponent item : manager.getFlowItems())
{
if (item.isBeingMoved())
{
moved = item.getId();
return true;
}
}
return false;
}
@Override
public boolean writeData(ASMPacket packet)
{
manager.serverPacket = true;
packet.writeVarIntToBuffer(moved);
packet.writeBoolean(clicked == 2 && Settings.getSetting(Settings.MIDDLE_CLICK));
return true;
}
@Override
public boolean activateOnRelease()
{
return true;
}
});
buttons.add(new ManagerButton(manager, Names.COPY_COMMAND, DELETE_POSITION_X, COPY_POSITION_Y)
{
int moved;
@Override
public String getMouseOver()
{
return !Settings.isLimitless(manager) && manager.getFlowItems().size() >= 511 ? Names.MAXIMUM_COMPONENT_ERROR : super.getMouseOver();
}
@Override
public boolean readData(ASMPacket packet)
{
if (Settings.isLimitless(manager) || manager.components.size() < 511)
{
int id = packet.readVarIntFromBuffer();
if (id != -1)
{
FlowComponent item = manager.getFlowItem(id);
Collection<FlowComponent> added = CopyHelper.copyCommandsWithChildren(manager, item, Settings.isLimitless(manager), packet.readBoolean());
for (FlowComponent add : added)
{
manager.addNewComponent(add);
}
}
}
return true;
}
@Override
public boolean validClick()
{
for (FlowComponent item : manager.getZLevelRenderingList())
{
if (item.isBeingMoved())
{
moved = item.getId();
return true;
}
}
return false;
}
@Override
public boolean activateOnRelease()
{
return true;
}
@Override
public boolean writeData(ASMPacket packet)
{
packet.writeVarIntToBuffer(moved);
packet.writeBoolean(clicked == 2 && Settings.getSetting(Settings.MIDDLE_CLICK));
return true;
}
});
return buttons;
}
}