package joshie.progression.gui.fields;
import joshie.progression.api.criteria.IField;
import joshie.progression.api.criteria.IRuleProvider;
import joshie.progression.api.gui.IDrawHelper;
import joshie.progression.api.special.IAdditionalTooltip;
import joshie.progression.api.special.IClickable;
import joshie.progression.api.special.IStackSizeable;
import joshie.progression.helpers.ItemHelper;
import joshie.progression.helpers.MCClientHelper;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
import static joshie.progression.api.special.DisplayMode.DISPLAY;
import static joshie.progression.gui.core.GuiList.MODE;
import static joshie.progression.gui.core.GuiList.TOOLTIP;
public class ItemFilterFieldPreview extends ItemFilterField implements IField {
private final int x;
private final int y;
private final float scale;
protected final int mouseX1;
protected final int mouseX2;
protected final int mouseY1;
protected final int mouseY2;
private ItemStack stack;
private int ticker;
public ItemFilterFieldPreview(String fieldName, Object object, int x, int y, float scale) {
super(fieldName, object);
this.x = x;
this.y = y;
this.scale = scale;
this.mouseX1 = x;
this.mouseX2 = (int) (x + 14 * scale);
this.mouseY1 = y - 2;
this.mouseY2 = (int) (y + 15 * scale);
}
private static final ItemStack BROKEN = new ItemStack(Items.BAKED_POTATO);
public ItemStack getStack(boolean hovered) {
if (ticker >= 200 || ticker == 0) {
stack = ItemHelper.getRandomItemFromFilters(getFilters(), MCClientHelper.getPlayer());
if (stack != null) {
stack = stack.copy();
if (object instanceof IStackSizeable) {
stack.stackSize = ((IStackSizeable) object).getStackSize();
} else stack.stackSize = 1;
}
ticker = 1;
}
if (!hovered) ticker++;
else if (!GuiScreen.isShiftKeyDown()) ticker += 2;
return stack != null ? stack : BROKEN;
}
@Override
public void draw(IRuleProvider provider, IDrawHelper helper, int renderX, int renderY, int color, int yPos, int mouseX, int mouseY) {
try {
boolean hovered = mouseX >= mouseX1 && mouseX <= mouseX2 && mouseY >= mouseY1 && mouseY <= mouseY2;
if (hovered) {
List<String> tooltip = new ArrayList();
ItemStack stack = getStack(hovered);
tooltip.addAll(stack.getTooltip(MCClientHelper.getPlayer(), false));
if (object instanceof IAdditionalTooltip) {
((IAdditionalTooltip)object).addHoverTooltip(getFieldName(), stack, tooltip);
}
TOOLTIP.add(tooltip);
}
helper.drawStack(renderX, renderY, getStack(hovered), x, y, scale);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean attemptClick(int mouseX, int mouseY) {
boolean clicked = mouseX >= mouseX1 && mouseX <= mouseX2 && mouseY >= mouseY1 && mouseY <= mouseY2;
if (clicked) {
if (MODE == DISPLAY) {
if (object instanceof IClickable) {
if(((IClickable)object).onClicked(stack)) return true;
}
} else return super.click();
}
return false;
}
}