package joshie.progression.criteria;
import joshie.progression.ItemProgression.ItemMeta;
import joshie.progression.Progression;
import joshie.progression.api.criteria.ICriteria;
import joshie.progression.api.criteria.IRewardProvider;
import joshie.progression.api.criteria.ITab;
import joshie.progression.api.criteria.ITriggerProvider;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class Criteria implements ICriteria {
/** All the data for this **/
public List<ITriggerProvider> triggers = new ArrayList();
public List<IRewardProvider> rewards = new ArrayList();
public List<ICriteria> prereqs = new ArrayList();
public List<ICriteria> conflicts = new ArrayList();
public ITab tab;
public UUID uuid;
public int isRepeatable = 1;
public boolean infinite = false;
public int tasksRequired = 1;
public boolean allTasks = true;
public int rewardsGiven;
public boolean allRewards = true;
public String displayName = "New Criteria";
public boolean isVisible = true;
public boolean achievement = true;
public ItemStack stack = new ItemStack(Blocks.STONE);
public int x, y;
public Criteria(ITab tab, UUID uuid) {
this.tab = tab;
this.uuid = uuid;
this.isRepeatable = 1;
this.tasksRequired = 1;
this.allTasks = true;
this.allRewards = true;
this.rewardsGiven = 1;
this.displayName = "New Criteria";
}
public void init(ICriteria[] prereqs, ICriteria[] theConflicts, String displayName, boolean isVisible, boolean achievement, int repeatable, ItemStack icon, boolean allRequired, int tasksRequired, boolean infinite, boolean allRewards, int rewardsGiven, int x, int y) {
this.displayName = displayName;
this.isVisible = isVisible;
this.achievement = achievement;
this.isRepeatable = repeatable;
this.stack = icon;
this.tasksRequired = tasksRequired;
this.allTasks = allRequired;
this.infinite = infinite;
this.allRewards = allRewards;
this.rewardsGiven = rewardsGiven;
this.x = x;
this.y = y;
addRequirements(prereqs);
addConflicts(theConflicts);
}
private void addRequirements(ICriteria... prereqs) {
for (ICriteria criteria: prereqs) {
if (criteria == null) continue;
else {
this.prereqs.add(criteria);
}
}
}
private void addConflicts(ICriteria... conflicts) {
for (ICriteria criteria: conflicts) {
if (criteria == null) continue;
else {
this.conflicts.add(criteria);
}
}
}
public void addTooltip(List<String> toolTip) {
toolTip.add("Requires: " + displayName);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Criteria criteria = (Criteria) o;
return uuid != null ? uuid.equals(criteria.uuid) : criteria.uuid == null;
}
@Override
public int hashCode() {
return uuid != null ? uuid.hashCode() : 0;
}
@Override
public List<ITriggerProvider> getTriggers() {
return triggers;
}
@Override
public List<IRewardProvider> getRewards() {
return rewards;
}
@Override
public UUID getUniqueID() {
return uuid;
}
@Override
public int getTasksRequired() {
return tasksRequired;
}
@Override
public boolean getIfRequiresAllTasks() {
return allTasks;
}
@Override
public boolean displayAchievement() {
return achievement;
}
@Override
public String getLocalisedName() {
return displayName;
}
@Override
public ItemStack getIcon() {
return stack;
}
@Override
public boolean canRepeatInfinite() {
return infinite;
}
@Override
public int getRepeatAmount() {
return isRepeatable;
}
@Override
public List<ICriteria> getConflicts() {
return conflicts;
}
@Override
public ITab getTab() {
return tab;
}
@Override
public List<ICriteria> getPreReqs() {
return prereqs;
}
@Override
public int getAmountOfRewards() {
return rewardsGiven;
}
@Override
public boolean givesAllRewards() {
return allRewards;
}
@Override
public int getX() {
return x;
}
@Override
public int getY() {
return y;
}
@Override
public boolean isVisible() {
return isVisible;
}
@Override
public void setVisiblity(boolean b) {
this.isVisible = b;
}
@Override
public void setCoordinates(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public void setIcon(ItemStack icon) {
if (icon.getItem() == Progression.item && icon.getItemDamage() == ItemMeta.criteria.ordinal()) return;
else stack = icon; //Do not permit criteria as an icon of itself, no recursion!!!!!!!!!!!!
}
}