58 lines
2.9 KiB
Java
58 lines
2.9 KiB
Java
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;
|
|
}
|
|
}
|