package joshie.progression.gui.fields;
import joshie.progression.api.criteria.IField;
import joshie.progression.api.criteria.IFilter;
import joshie.progression.api.criteria.IRuleProvider;
import joshie.progression.api.gui.IDrawHelper;
import joshie.progression.api.special.IAdditionalTooltip;
import joshie.progression.helpers.EntityHelper;
import joshie.progression.helpers.MCClientHelper;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.inventory.GuiInventory;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IEntityLivingData;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.math.BlockPos;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import static joshie.progression.api.special.DisplayMode.EDIT;
import static joshie.progression.gui.core.GuiList.*;
public class EntityFilterFieldPreview 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 EntityLivingBase entity;
private int ticker;
public EntityFilterFieldPreview(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 + 5;
this.mouseX2 = (int) (x + 14 * scale);
this.mouseY1 = y - (int)(14.2 * scale);
this.mouseY2 = y;
}
public EntityLivingBase getEntity() {
return entity != null ? entity : MCClientHelper.getPlayer();
}
public EntityLivingBase getEntity(boolean hovered) {
try {
if (ticker >= 200 || ticker == 0) {
EntityPlayer player = MCClientHelper.getPlayer();
IFilter filter = EntityHelper.getFilter(getFilters(), player);
List<EntityLivingBase> entities = (List<EntityLivingBase>) filter.getRandom(player);
if (entities.size() > 0) {
entity = (EntityLivingBase) EntityList.createEntityByName(EntityHelper.getNameForEntity(entities.get(player.worldObj.rand.nextInt(entities.size()))), player.worldObj);
if (entity instanceof EntityLiving) {
((EntityLiving) entity).onInitialSpawn(player.worldObj.getDifficultyForLocation(new BlockPos(entity)), (IEntityLivingData) null);
}
filter.apply(entity);
ticker = 1;
}
}
if (!hovered) ticker++;
else if (!GuiScreen.isShiftKeyDown()) ticker += 2;
} catch (Exception e) {}
return entity != null ? entity : MCClientHelper.getPlayer();
}
@Override
public void draw(final IRuleProvider provider, final IDrawHelper helper, final int renderX, final int renderY, final int color, final int yPos, final int mouseX, final int mouseY) {
try {
boolean hovered = mouseX >= mouseX1 && mouseX <= mouseX2 && mouseY >= mouseY1 && mouseY <= mouseY2;
EntityLivingBase entity = getEntity(hovered);
if (hovered) {
List<String> tooltip = new ArrayList();
tooltip.add(entity.getName());
if (object instanceof IAdditionalTooltip) {
((IAdditionalTooltip)object).addHoverTooltip(getFieldName(), entity, tooltip);
}
TOOLTIP.add(tooltip);
}
final EntityLivingBase entityLivingBase = entity;
LAST.add(new Callable() {
@Override
public Object call() throws Exception {
GuiInventory.drawEntityOnScreen(CORE.getOffsetX() + renderX + 24 + x, CORE.screenTop + renderY + y + EntityHelper.getOffsetForEntity(entityLivingBase), EntityHelper.getSizeForEntity(entityLivingBase), 25F, -5F, entityLivingBase);
return null;
}
});
//helper.drawStack(renderX, renderY, getEntity(hovered), x, y, scale);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean attemptClick(int mouseX, int mouseY) {
if (MODE != EDIT) return false;
boolean clicked = mouseX >= mouseX1 && mouseX <= mouseX2 && mouseY >= mouseY1 && mouseY <= mouseY2;
if (clicked) {
return super.click();
} else return false;
}
}