package advancedsystemsmanager.flow.menus;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.elements.TextBoxNumber;
import advancedsystemsmanager.flow.setting.LiquidSetting;
import advancedsystemsmanager.flow.setting.Setting;
import advancedsystemsmanager.client.gui.GuiManager;
import advancedsystemsmanager.network.ASMPacket;
import advancedsystemsmanager.reference.Names;
import advancedsystemsmanager.reference.Null;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
public class MenuLiquid extends MenuStuff<Fluid>
{
public TextBoxNumber amountTextBoxBuckets;
public TextBoxNumber amountTextBoxMilli;
public MenuLiquid(FlowComponent parent)
{
this(parent, true);
}
public MenuLiquid(FlowComponent parent, boolean whitelist)
{
super(parent);
numberTextBoxes.addTextBox(amountTextBoxBuckets = new TextBoxNumber(Null.NULL_PACKET, 10, 50, 3, true)
{
@Override
public void setNumber(int number)
{
super.setNumber(number);
selectedSetting.setAmount(selectedSetting.getAmount() % 1000 + number * 1000);
} @Override
public boolean isVisible()
{
return selectedSetting.isLimitedByAmount();
}
});
numberTextBoxes.addTextBox(amountTextBoxMilli = new TextBoxNumber(Null.NULL_PACKET, 60, 50, 3, true)
{
@Override
public boolean isVisible()
{
return selectedSetting.isLimitedByAmount();
}
@Override
public void setNumber(int number)
{
super.setNumber(number);
selectedSetting.setAmount((selectedSetting.getAmount() / 1000) * 1000 + number);
}
});
setFirstRadioButtonSelected(whitelist);
}
@Override
public Setting<Fluid> getSetting(int id)
{
return new LiquidSetting(id);
}
@SideOnly(Side.CLIENT)
@Override
public List<Fluid> updateSearch(String search, boolean showAll)
{
List<Fluid> ret = new ArrayList<Fluid>(FluidRegistry.getRegisteredFluids().values());
Iterator<Fluid> itr = ret.iterator();
Pattern pattern = Pattern.compile(search, Pattern.CASE_INSENSITIVE);
if (!showAll)
{
while (itr.hasNext())
{
Fluid fluid = itr.next();
if (!pattern.matcher(getDisplayName(fluid)).find())
{
itr.remove();
}
}
}
return ret;
}
@SideOnly(Side.CLIENT)
@Override
public void drawResultObject(GuiManager gui, Fluid obj, int x, int y)
{
gui.drawFluid(obj, x, y);
}
@Override
public List<String> getResultObjectMouseOver(Fluid obj)
{
List<String> ret = new ArrayList<String>();
ret.add(getDisplayName(obj));
return ret;
}
@Override
public void updateTextBoxes()
{
int amount = selectedSetting.getAmount();
amountTextBoxBuckets.setNumber(amount / 1000);
amountTextBoxMilli.setNumber(amount % 1000);
}
@SideOnly(Side.CLIENT)
@Override
public void drawSettingObject(GuiManager gui, Setting setting, int x, int y)
{
drawResultObject(gui, ((LiquidSetting)setting).getFluid(), x, y);
}
@Override
public List<String> getSettingObjectMouseOver(Setting setting)
{
return getResultObjectMouseOver(((LiquidSetting)setting).getFluid());
}
@Override
protected boolean readSpecificData(ASMPacket packet, int action, Setting<Fluid> setting)
{
return false;
}
@SideOnly(Side.CLIENT)
@Override
public void drawInfoMenuContent(GuiManager gui, int mX, int mY)
{
if (selectedSetting.isLimitedByAmount())
{
gui.drawCenteredString(Names.BUCKETS, amountTextBoxBuckets.getX(), amountTextBoxBuckets.getY() - 7, 0.7F, amountTextBoxBuckets.getWidth(), 0x404040);
gui.drawCenteredString(Names.MILLI_BUCKETS, amountTextBoxMilli.getX(), amountTextBoxMilli.getY() - 7, 0.55F, amountTextBoxMilli.getWidth(), 0x404040);
}
}
public static String getDisplayName(Fluid fluid)
{
String name = fluid.getLocalizedName(null);
if (name.contains("."))
{
name = FluidRegistry.getFluidName(fluid);
}
return name;
}
@Override
public String getName()
{
return Names.LIQUIDS_MENU;
}
}