| package thaumcraft.api.aspects; |
| |
| import java.lang.reflect.Method; |
| |
| import net.minecraft.tileentity.TileEntity; |
| import net.minecraftforge.common.util.ForgeDirection; |
| import cpw.mods.fml.common.FMLLog; |
| |
| public class AspectSourceHelper { |
| |
| static Method drainEssentia; |
| static Method findEssentia; |
| /** |
| * This method is what is used to drain essentia from jars and other sources for things like |
| * infusion crafting or powering the arcane furnace. A record of possible sources are kept track of |
| * and refreshed as needed around the calling tile entity. This also renders the essentia trail particles. |
| * Only 1 essentia is drained at a time |
| * @param tile the tile entity that is draining the essentia |
| * @param aspect the aspect that you are looking for |
| * @param direction the direction from which you wish to drain. Forgedirection.Unknown simply seeks in all directions. |
| * @param range how many blocks you wish to search for essentia sources. |
| * @return boolean returns true if essentia was found and removed from a source. |
| */ |
| public static boolean drainEssentia(TileEntity tile, Aspect aspect, ForgeDirection direction, int range) { |
| try { |
| if(drainEssentia == null) { |
| Class fake = Class.forName("thaumcraft.common.lib.events.EssentiaHandler"); |
| drainEssentia = fake.getMethod("drainEssentia", TileEntity.class, Aspect.class, ForgeDirection.class, int.class); |
| } |
| return (Boolean) drainEssentia.invoke(null, tile, aspect, direction, range); |
| } catch(Exception ex) { |
| FMLLog.warning("[Thaumcraft API] Could not invoke thaumcraft.common.lib.events.EssentiaHandler method drainEssentia"); |
| } |
| return false; |
| } |
| |
| /** |
| * This method returns if there is any essentia of the passed type that can be drained. It in no way checks how |
| * much there is, only if an essentia container nearby contains at least 1 point worth. |
| * @param tile the tile entity that is checking the essentia |
| * @param aspect the aspect that you are looking for |
| * @param direction the direction from which you wish to drain. Forgedirection.Unknown simply seeks in all directions. |
| * @param range how many blocks you wish to search for essentia sources. |
| * @return boolean returns true if essentia was found and removed from a source. |
| */ |
| public static boolean findEssentia(TileEntity tile, Aspect aspect, ForgeDirection direction, int range) { |
| try { |
| if(findEssentia == null) { |
| Class fake = Class.forName("thaumcraft.common.lib.events.EssentiaHandler"); |
| findEssentia = fake.getMethod("findEssentia", TileEntity.class, Aspect.class, ForgeDirection.class, int.class); |
| } |
| return (Boolean) findEssentia.invoke(null, tile, aspect, direction, range); |
| } catch(Exception ex) { |
| FMLLog.warning("[Thaumcraft API] Could not invoke thaumcraft.common.lib.events.EssentiaHandler method findEssentia"); |
| } |
| return false; |
| } |
| } |