2013-08-28 08:32:01 +00:00
|
|
|
package thaumcraft.api.research;
|
|
|
|
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import net.minecraft.util.ResourceLocation;
|
|
|
|
import net.minecraft.util.StatCollector;
|
|
|
|
import thaumcraft.api.aspects.Aspect;
|
|
|
|
import thaumcraft.api.aspects.AspectList;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
|
|
|
|
public class ResearchItem
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* A short string used as a key for this research. Must be unique
|
|
|
|
*/
|
|
|
|
public final String key;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A short string used as a reference to the research category to which this must be added.
|
|
|
|
*/
|
|
|
|
public final String category;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The aspect tags and their values required to complete this research
|
|
|
|
*/
|
|
|
|
public final AspectList tags;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This links to any research that needs to be completed before this research can be discovered or learnt.
|
|
|
|
*/
|
|
|
|
public String[] parents = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Like parent above, but a line will not be displayed in the thaumonomicon linking them. Just used to prevent clutter.
|
|
|
|
*/
|
|
|
|
public String[] parentsHidden = null;
|
|
|
|
/**
|
|
|
|
* any research linked to this that will be unlocked automatically when this research is complete
|
|
|
|
*/
|
|
|
|
public String[] siblings = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the horizontal position of the research icon
|
|
|
|
*/
|
|
|
|
public final int displayColumn;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the vertical position of the research icon
|
|
|
|
*/
|
|
|
|
public final int displayRow;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the icon to be used for this research
|
|
|
|
*/
|
|
|
|
public final ItemStack icon_item;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the icon to be used for this research
|
|
|
|
*/
|
|
|
|
public final ResourceLocation icon_resource;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* How large the research grid is. Valid values are 1 to 5.
|
|
|
|
*/
|
|
|
|
private int complexity;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Special research has a spiky border. Used for important research milestones.
|
|
|
|
*/
|
|
|
|
private boolean isSpecial;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This indicates if the research should use a circular icon border. Usually used for "passive" research
|
|
|
|
* that doesn't have recipes and grants passive effects, or that unlock automatically.
|
|
|
|
*/
|
|
|
|
private boolean isRound;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Stub research cannot be discovered by normal means, but can be unlocked via the sibling system.
|
|
|
|
*/
|
|
|
|
private boolean isStub;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This indicated that the research is completely hidden and cannot be discovered by any
|
|
|
|
* player-controlled means. The recipes will never show up in the thaumonomicon.
|
|
|
|
* Usually used to unlock "hidden" recipes via sibling unlocking, like
|
|
|
|
* the various cap and rod combos for wands.
|
|
|
|
*/
|
|
|
|
private boolean isVirtual;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hidden research does not display in the thaumonomicon until discovered
|
|
|
|
*/
|
|
|
|
private boolean isHidden;
|
|
|
|
|
2013-09-01 09:36:19 +00:00
|
|
|
/**
|
|
|
|
* Concealed research does not display in the thaumonomicon until parent researches are discovered.
|
|
|
|
*/
|
|
|
|
private boolean isConcealed;
|
|
|
|
|
2013-08-28 08:32:01 +00:00
|
|
|
/**
|
|
|
|
* Lost research can only be discovered via knowledge fragments
|
|
|
|
*/
|
|
|
|
private boolean isLost;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* These research items will automatically unlock for all players on game start
|
|
|
|
*/
|
|
|
|
private boolean isAutoUnlock;
|
|
|
|
|
|
|
|
private ResearchPage[] pages = null;
|
|
|
|
|
|
|
|
public ResearchItem(String par1, String par2)
|
|
|
|
{
|
|
|
|
this.key = par1;
|
|
|
|
this.category = par2;
|
|
|
|
this.tags = new AspectList();
|
|
|
|
this.icon_resource = null;
|
|
|
|
this.icon_item = null;
|
|
|
|
this.displayColumn = 0;
|
|
|
|
this.displayRow = 0;
|
|
|
|
this.setVirtual();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem(String par1, String par2, AspectList tags, int par3, int par4, int par5, ResourceLocation icon)
|
|
|
|
{
|
|
|
|
this.key = par1;
|
|
|
|
this.category = par2;
|
|
|
|
this.tags = tags;
|
|
|
|
this.icon_resource = icon;
|
|
|
|
this.icon_item = null;
|
|
|
|
this.displayColumn = par3;
|
|
|
|
this.displayRow = par4;
|
|
|
|
this.complexity = par5;
|
|
|
|
if (complexity < 1) this.complexity = 1;
|
|
|
|
if (complexity > 5) this.complexity = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem(String par1, String par2, AspectList tags, int par3, int par4, int par5, ItemStack icon)
|
|
|
|
{
|
|
|
|
this.key = par1;
|
|
|
|
this.category = par2;
|
|
|
|
this.tags = tags;
|
|
|
|
this.icon_item = icon;
|
|
|
|
this.icon_resource = null;
|
|
|
|
this.displayColumn = par3;
|
|
|
|
this.displayRow = par4;
|
|
|
|
this.complexity = par5;
|
|
|
|
if (complexity <0) this.complexity = 0;
|
|
|
|
if (complexity > 5) this.complexity = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem setSpecial()
|
|
|
|
{
|
|
|
|
this.isSpecial = true;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem setStub()
|
|
|
|
{
|
|
|
|
this.isStub = true;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public ResearchItem setHidden()
|
|
|
|
{
|
|
|
|
this.isHidden = true;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2013-09-01 09:36:19 +00:00
|
|
|
public ResearchItem setConcealed()
|
|
|
|
{
|
|
|
|
this.isConcealed = true;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2013-08-28 08:32:01 +00:00
|
|
|
public ResearchItem setLost()
|
|
|
|
{
|
|
|
|
this.isLost = true;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem setVirtual()
|
|
|
|
{
|
|
|
|
this.isVirtual = true;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem setParents(String... par)
|
|
|
|
{
|
|
|
|
this.parents = par;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public ResearchItem setParentsHidden(String... par)
|
|
|
|
{
|
|
|
|
this.parentsHidden = par;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem setSiblings(String... sib)
|
|
|
|
{
|
|
|
|
this.siblings = sib;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem setPages(ResearchPage... par)
|
|
|
|
{
|
|
|
|
this.pages = par;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchPage[] getPages() {
|
|
|
|
return pages;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem registerResearchItem()
|
|
|
|
{
|
|
|
|
ResearchCategories.addResearch(this);
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
|
|
public String getName()
|
|
|
|
{
|
|
|
|
return StatCollector.translateToLocal("tc.research_name."+key);
|
|
|
|
}
|
|
|
|
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
|
|
public String getText()
|
|
|
|
{
|
|
|
|
return StatCollector.translateToLocal("tc.research_text."+key);
|
|
|
|
}
|
|
|
|
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
|
|
public boolean isSpecial()
|
|
|
|
{
|
|
|
|
return this.isSpecial;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isStub()
|
|
|
|
{
|
|
|
|
return this.isStub;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isHidden()
|
|
|
|
{
|
|
|
|
return this.isHidden;
|
|
|
|
}
|
|
|
|
|
2013-09-01 09:36:19 +00:00
|
|
|
public boolean isConcealed()
|
|
|
|
{
|
|
|
|
return this.isConcealed;
|
|
|
|
}
|
|
|
|
|
2013-08-28 08:32:01 +00:00
|
|
|
public boolean isLost()
|
|
|
|
{
|
|
|
|
return this.isLost;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isVirtual()
|
|
|
|
{
|
|
|
|
return this.isVirtual;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isAutoUnlock() {
|
|
|
|
return isAutoUnlock;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem setAutoUnlock()
|
|
|
|
{
|
|
|
|
this.isAutoUnlock = true;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isRound() {
|
|
|
|
return isRound;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem setRound() {
|
|
|
|
this.isRound = true;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public int getComplexity() {
|
|
|
|
return complexity;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ResearchItem setComplexity(int complexity) {
|
|
|
|
this.complexity = complexity;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the aspect aspects ordinal with the highest value. Used to determine scroll color and similar things
|
|
|
|
*/
|
|
|
|
public Aspect getResearchPrimaryTag() {
|
|
|
|
Aspect aspect=null;
|
|
|
|
int highest=0;
|
|
|
|
if (tags!=null)
|
|
|
|
for (Aspect tag:tags.getAspects()) {
|
|
|
|
if (tags.getAmount(tag)>highest) {
|
|
|
|
aspect=tag;
|
|
|
|
highest=tags.getAmount(tag);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
return aspect;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|