package pneumaticCraft.api.client.pneumaticHelmet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.config.Configuration;
import pneumaticCraft.api.client.IGuiAnimatedStat;
/**
* To add upgrades for in the Pneumatic Helmet implement this interface. You can add members to this class, however these can only
* be client sided members as this class will be used as singleton. Therefore, only one of these instances exist at the server side
* so any member that is used server side will affect every player.
*
*/
public interface IUpgradeRenderHandler{
/**
* Return here the name of the upgrade. This is displayed in the formatting [upgradeName] + " " + "found"/"not found" on
* initialization of the helmet.
* @return
*/
public String getUpgradeName();
/**
* Being called from PneumaticCraft's config handler, you can use this method to read settings like stat positions
* @param config PneumaticCraft's config file.
*/
public void initConfig(Configuration config);
/**
* When called this should save the settings to the config file. Called when changed a setting. When you want to use
* PneumaticCraft's config file, save a reference of it somewhere in this class when the config gets passed in the
* initConfig() method (this always will be called first).
*/
public void saveToConfig();
/**
* This method will be called every client tick, and should be used to update logic like the tracking and velocities of stuff.
* @param player
* @param rangeUpgrades amount of range upgrades installed in the helmet.
*/
public void update(EntityPlayer player, int rangeUpgrades);
/**
* Called in the 3D render stage (renderWorldLastEvent)
* @param partialTicks
*/
public void render3D(float partialTicks);
/**
* Called in the 2D render stage (Render Tick Handler)
* @param partialTicks
* @param helmetEnabled is true when isEnabled() returned true earlier. Can be used to close AnimatedStats for instance.
* However this is already handled if you return an AnimatedStat in getAnimatedStat().
*/
public void render2D(float partialTicks, boolean helmetEnabled);
/**
* You can return a GuiAnimatedStat here, that the HUDHandler will pick up and render. It also automatically opens and closes
* the stat when needed. The GuiMoveStat uses this method to retrieve the to be moved stat.
* @return null if no stat used.
*/
public IGuiAnimatedStat getAnimatedStat();
/**
* Should return true if this upgrade handler is enabled for the given stacks placed in the helmet.
* @param upgradeStacks
* @return
*/
public boolean isEnabled(ItemStack[] upgradeStacks);
/**
* Returns the usage in mL/tick when this upgrade handler is enabled.
* @param rangeUpgrades amount of range upgrades installed in the helmet.
* @param player
* @return usage in mL/tick
*/
public float getEnergyUsage(int rangeUpgrades, EntityPlayer player);
/**
* Called when (re-)equipped the helmet this method should be used to clear information like current tracked entities.
* So clearing lists and other references as this handler should re-acquire when reinstalled.
*/
public void reset();
/**
* When you have some options for your upgrade handler you could return a new instance of an IOptionsPage.
* When you do so, it will automatically get picked up by the options handler, and it will be added to the
* options GUI when this upgrade returns true when calling isEnabled(). Returning null is valid.
* @return
*/
public IOptionPage getGuiOptionsPage();
}