package ic2.api.crops; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChunkCoordinates; import net.minecraft.world.World; /** * Interface implemented by the crop tile entity. */ public interface ICropTile { /** * Get the crop's plant ID. * * @return Plant ID, or -1 if there is no plant currently on the crop */ public short getID(); /** * Set the crop's plant ID. * * @param id Plant ID, or -1 for no plant */ public void setID(short id); /** * Get the crop's plant size. * * @return Plant size, starting with 1 and maximum varies depending on plant */ public byte getSize(); /** * Set the crop's plant size. * * @param size Plant size */ public void setSize(byte size); /** * Get the crop's plant growth stat. * Higher values indicate faster growth. * * @return Plant growth stat */ public byte getGrowth(); /** * Set the crop's plant growth stat. * * @param growth Plant growth stat */ public void setGrowth(byte growth); /** * Get the crop's plant gain stat. * Higher values indicate more drops. * * @return Plant gain stat */ public byte getGain(); /** * Set the crop's plant gain stat. * * @param gain Plant gain stat */ public void setGain(byte gain); /** * Get the crop's plant resistance stat. * Higher values indicate more resistance against trampling. * * @return Plant resistance stat */ public byte getResistance(); /** * Set the crop's plant resistance stat. * * @param resistance Plant resistance stat */ public void setResistance(byte resistance); /** * Get the crop's plant scan level. * Increases every time the seed is analyzed. * * @return Plant scan level */ public byte getScanLevel(); /** * Set the crop's plant scan level. * * @param scanLevel Plant scan level */ public void setScanLevel(byte scanLevel); /** * Get the crop's plant custom data, stored alongside the crop. * Can be modified in place. * * @return Plant custom data */ public NBTTagCompound getCustomData(); /** * Get the crop's nutrient storage. * Ranges from 0 to 100. * * @return Crop nutrient storage */ public int getNutrientStorage(); /** * Set the crop's nutrient storage. * * @param nutrientStorage Crop nutrient storage */ public void setNutrientStorage(int nutrientStorage); /** * Get the crop's hydration storage. * 0 indicates nothing, 1-10 indicate water hydration and 11-100 for hydration cells. * * @return Crop hydration storage */ public int getHydrationStorage(); /** * Set the crop's hydration storage. * * @param hydrationStorage Crop hydration storage */ public void setHydrationStorage(int hydrationStorage); /** * Get the crop's Weed-Ex storage. * * @return Crop Weed-Ex storage */ public int getWeedExStorage(); /** * Set the crop's Weed-Ex storage. * * @param weedExStorage Crop Weed-Ex storage */ public void setWeedExStorage(int weedExStorage); /** * Get the crop's humidity. * Ranges from 0 (dry) to 10 (humid). * Updates every couple of seconds or when an update is requested. * * @see #updateState() * * @return Crop humidity level */ public byte getHumidity(); /** * Get the crop's nutrient level. * Ranges from 0 (empty) to 10 (full). * Updates every couple of seconds or when an update is requested. * * @see #updateState() * * @return Crop nutrient level */ public byte getNutrients(); /** * Get the crop's air quality. * Ranges from 0 (cluttered) to 10 (fresh). * Updates every couple of seconds or when an update is requested. * * @see #updateState() * * @return Crop air quality */ public byte getAirQuality(); /** * Get the crop's world. * * @return Crop world */ public World getWorld(); /** * Get the crop's location. * * @return Crop location */ public ChunkCoordinates getLocation(); /** * Get the crop's light level. * * @return Crop light level */ public int getLightLevel(); /** * Pick the crop, removing and giving seeds for the plant. * * @param manual whether it was done by hand (not automated) * @return true if successfully picked */ public boolean pick(boolean manual); /** * Harvest the crop, turning it into gain and resetting its size. * * @param manual whether it one by hand (not automated) * @return true if successfully harvested */ public boolean harvest(boolean manual); /** * Fully clears the crop without dropping anything. */ public void reset(); /** * Request a texture and lighting update. */ public void updateState(); /** * Check if a block is under the farmland containing the crop. * Searches up to 2 blocks below the farmland or an air space, whichever appears first. * * @param block block to search * @return Whether the block was found */ public boolean isBlockBelow(Block block); /** * Generate plant seeds with the given parameters. * * @param plant plant ID * @param growth plant growth stat * @param gain plant gain stat * @param resis plant resistance stat * @param scan plant scan level * @return Plant seed item */ public ItemStack generateSeeds(short plant, byte growth, byte gain, byte resis, byte scan); }