package advancedsystemsmanager.flow.setting;
import advancedsystemsmanager.network.ASMPacket;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
import java.util.List;
public abstract class Setting<Type>
{
public static final String NBT_AMOUNT = "Amount";
public static final String NBT_IS_LIMITED = "Limited";
public int id;
public boolean isLimitedByAmount;
protected int amount;
private int count;
public Setting(int id)
{
this.id = id;
clear();
}
public void clear()
{
isLimitedByAmount = false;
}
@SideOnly(Side.CLIENT)
public abstract List<String> getMouseOver();
public int getId()
{
return id;
}
public void setDefaultAmount()
{
setAmount(getDefaultAmount());
}
public abstract int getDefaultAmount();
public abstract Type getContent();
public void resetCount()
{
this.count = this.amount;
}
public int getAmountLeft()
{
return count;
}
public void reduceAmount(int amount)
{
this.count -= amount;
}
public int getAmount()
{
return amount;
}
public void setAmount(int val)
{
this.amount = val;
}
public abstract boolean isValid();
public void setFuzzyType(int id)
{
}
public abstract void copyFrom(Setting setting);
public void load(NBTTagCompound settingTag)
{
if (isAmountSpecific())
{
setLimitedByAmount(settingTag.getBoolean(NBT_IS_LIMITED));
if (isLimitedByAmount())
{
amount = settingTag.getInteger(NBT_AMOUNT);
}
}
}
public boolean isAmountSpecific()
{
return true;
}
public boolean isLimitedByAmount()
{
return isLimitedByAmount;
}
public void setLimitedByAmount(boolean limitedByAmount)
{
isLimitedByAmount = limitedByAmount;
}
public void save(NBTTagCompound settingTag)
{
if (isAmountSpecific())
{
settingTag.setBoolean(NBT_IS_LIMITED, isLimitedByAmount());
if (isLimitedByAmount())
{
settingTag.setInteger(NBT_AMOUNT, amount);
}
}
}
public abstract void setContent(Type obj);
public abstract boolean isContentEqual(Type check);
public void delete()
{
clear();
}
public void writeContentData(ASMPacket packet)
{
if (isAmountSpecific())
{
packet.writeBoolean(isLimitedByAmount());
if (isLimitedByAmount()) packet.writeVarIntToBuffer(amount);
}
}
public void readContentData(ASMPacket packet)
{
if (isAmountSpecific())
{
setLimitedByAmount(packet.readBoolean());
if (isLimitedByAmount())
{
this.amount = packet.readVarIntFromBuffer();
}
}
}
}