package advancedsystemsmanager.flow.menus;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.elements.TextBoxNumber;
import advancedsystemsmanager.flow.setting.FuzzyMode;
import advancedsystemsmanager.flow.setting.ItemSetting;
import advancedsystemsmanager.flow.setting.Setting;
import advancedsystemsmanager.client.gui.GuiManager;
import advancedsystemsmanager.helpers.CollisionHelper;
import advancedsystemsmanager.network.ASMPacket;
import advancedsystemsmanager.reference.Names;
import advancedsystemsmanager.registry.ThemeHandler;
import advancedsystemsmanager.threading.SearchItems;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
public class MenuItem extends MenuStuff<ItemStack>
{
public static final int DMG_VAL_TEXT_X = 15;
public static final int DMG_VAL_TEXT_Y = 55;
public static final int ARROW_SRC_X = 72;
public static final int ARROW_SRC_Y = 18;
public static final int ARROW_WIDTH = 9;
public static final int ARROW_HEIGHT = 12;
public static final int ARROW_X_LEFT = 5;
public static final int ARROW_X_RIGHT = 109;
public static final int ARROW_Y = 37;
public static final int ARROW_TEXT_Y = 40;
public TextBoxNumber damageValueTextBox;
public TextBoxNumber amountTextBox;
public MenuItem(FlowComponent parent)
{
this(parent, true);
}
public MenuItem(FlowComponent parent, boolean whitelist)
{
super(parent);
if (settings.get(0).isAmountSpecific())
{
numberTextBoxes.addTextBox(amountTextBox = new TextBoxNumber(getParent(), 80, 24, 3, true)
{
@Override
public boolean isVisible()
{
return selectedSetting.isLimitedByAmount();
}
@Override
public boolean readData(ASMPacket packet)
{
Setting<ItemStack> setting = settings.get(packet.readByte());
super.readData(packet);
setting.setAmount(number);
return false;
}
@Override
public boolean writeData(ASMPacket packet)
{
packet.writeByte(selectedSetting.getId());
selectedSetting.setAmount(number);
return super.writeData(packet);
}
});
}
numberTextBoxes.addTextBox(damageValueTextBox = new TextBoxNumber(getParent(), 70, 52, 5, true)
{
@Override
public boolean isVisible()
{
return getSelectedSetting().canChangeMetaData() && getSelectedSetting().getFuzzyMode().requiresMetaData();
}
@Override
public boolean readData(ASMPacket packet)
{
Setting<ItemStack> setting = settings.get(packet.readByte());
super.readData(packet);
setting.getContent().setItemDamage(number);
return false;
}
@Override
public boolean writeData(ASMPacket packet)
{
packet.writeByte(selectedSetting.getId());
selectedSetting.getContent().setItemDamage(number);
return super.writeData(packet);
}
});
setFirstRadioButtonSelected(whitelist);
}
public ItemSetting getSelectedSetting()
{
return (ItemSetting)selectedSetting;
}
@SideOnly(Side.CLIENT)
public static List<String> getToolTip(ItemStack itemStack)
{
try
{
return itemStack.getTooltip(Minecraft.getMinecraft().thePlayer, Minecraft.getMinecraft().gameSettings.advancedItemTooltips);
} catch (Exception ex)
{
if (itemStack.getItemDamage() == 0)
{
return new ArrayList<String>();
} else
{
ItemStack newItem = itemStack.copy();
newItem.setItemDamage(0);
return getToolTip(newItem);
}
}
}
@SideOnly(Side.CLIENT)
public static String getDisplayName(ItemStack itemStack)
{
try
{
return itemStack.getDisplayName();
} catch (Exception ex)
{
if (itemStack.getItemDamage() == 0)
{
return "";
} else
{
ItemStack newItem = itemStack.copy();
newItem.setItemDamage(0);
return getDisplayName(newItem);
}
}
}
@Override
protected boolean readSpecificData(ASMPacket packet, int action, Setting<ItemStack> setting)
{
switch (action)
{
case 3:
setting.setFuzzyType(packet.readByte());
break;
}
return false;
}
@Override
public Setting<ItemStack> getSetting(int id)
{
return new ItemSetting(id);
}
@SideOnly(Side.CLIENT)
@Override
public void drawResultObject(GuiManager gui, ItemStack obj, int x, int y)
{
gui.drawItemStack(obj, x, y);
// gui.drawItemAmount(obj, x, y);
}
@SideOnly(Side.CLIENT)
@Override
public void drawSettingObject(GuiManager gui, Setting<ItemStack> setting, int x, int y)
{
drawResultObject(gui, setting.getContent(), x, y);
}
@SideOnly(Side.CLIENT)
@Override
public List<String> getResultObjectMouseOver(ItemStack o)
{
return getToolTip(o);
}
@SideOnly(Side.CLIENT)
@Override
public List<String> getSettingObjectMouseOver(Setting<ItemStack> setting)
{
return getResultObjectMouseOver(setting.getContent());
}
@Override
public void updateTextBoxes()
{
if (amountTextBox != null)
{
amountTextBox.setNumber(selectedSetting.getAmount());
}
damageValueTextBox.setNumber(getSelectedSetting().getItem().getItemDamage());
}
@SideOnly(Side.CLIENT)
@Override
public List<ItemStack> updateSearch(String search, boolean showAll)
{
Thread thread = new Thread(new SearchItems(search, scrollControllerSearch, showAll));
thread.start();
return scrollControllerSearch.getResult();
}
@SideOnly(Side.CLIENT)
@Override
public void drawInfoMenuContent(GuiManager gui, int mX, int mY)
{
if (damageValueTextBox.isVisible())
{
gui.drawString(Names.DAMAGE_VALUE, DMG_VAL_TEXT_X, DMG_VAL_TEXT_Y, 0.7F, 0x404040);
}
for (int i = 0; i < 2; i++)
{
int x = i == 0 ? ARROW_X_LEFT : ARROW_X_RIGHT;
int y = ARROW_Y;
gui.drawColouredTexture(x, y, ARROW_SRC_X + i * ARROW_WIDTH, ARROW_SRC_Y, ARROW_WIDTH, ARROW_HEIGHT, 0.7f, ThemeHandler.theme.menus.radioButtons.getColour(true, CollisionHelper.inBounds(x, y, ARROW_WIDTH, ARROW_HEIGHT, mX, mY)));
}
gui.drawCenteredString(getSelectedSetting().getFuzzyMode().toString(), ARROW_X_LEFT, ARROW_TEXT_Y, 0.7F, ARROW_X_RIGHT - ARROW_X_LEFT + ARROW_WIDTH, 0x404040);
}
@Override
public void onClick(int mX, int mY, int button)
{
super.onClick(mX, mY, button);
if (isEditing())
{
for (int i = -1; i <= 1; i += 2)
{
int x = i == 1 ? ARROW_X_RIGHT : ARROW_X_LEFT;
int y = ARROW_Y;
if (CollisionHelper.inBounds(x, y, ARROW_WIDTH, ARROW_HEIGHT, mX, mY))
{
int id = getSelectedSetting().getFuzzyMode().ordinal();
id += i;
if (id < 0)
{
id = FuzzyMode.values().length - 1;
} else if (id == FuzzyMode.values().length)
{
id = 0;
}
getSelectedSetting().setFuzzyType(id);
ASMPacket packet = getSyncPacket();
packet.writeByte(3);
packet.writeByte(id);
packet.sendServerPacket();
break;
}
}
/*if (CollisionHelper.inBounds(EDIT_ITEM_X, EDIT_ITEM_Y, ITEM_SIZE, ITEM_SIZE, mX, mY) && getSelectedSetting().getItem().hasTagCompound()) {
getParent().getManager().specialRenderer = new NBTRenderer(getSelectedSetting().getItem().getTagCompound());
}*/
}
}
@Override
public String getName()
{
return Names.ITEM_MENU;
}
}