mirror of
https://github.com/GTNewHorizons/WailaHarvestability.git
synced 2026-10-26 14:34:05 +00:00
136 lines
3.8 KiB
Java
136 lines
3.8 KiB
Java
package squeek.wailaharvestability.helpers;
|
|
|
|
import java.lang.reflect.Method;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
import cpw.mods.fml.common.Loader;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraftforge.common.ForgeHooks;
|
|
|
|
public class ToolHelper
|
|
{
|
|
// tinkers construct
|
|
private static Class<?> HarvestTool = null;
|
|
private static Class<?> DualHarvestTool = null;
|
|
private static Method getHarvestType = null;
|
|
private static Method getSecondHarvestType = null;
|
|
public static boolean tinkersConstructLoaded = false;
|
|
|
|
public static void init()
|
|
{
|
|
if (Loader.isModLoaded("TConstruct"))
|
|
{
|
|
try
|
|
{
|
|
HarvestTool = Class.forName("tconstruct.library.tools.HarvestTool");
|
|
DualHarvestTool = Class.forName("tconstruct.library.tools.DualHarvestTool");
|
|
getHarvestType = HarvestTool.getDeclaredMethod("getHarvestType");
|
|
getSecondHarvestType = DualHarvestTool.getDeclaredMethod("getSecondHarvestType");
|
|
getHarvestType.setAccessible(true);
|
|
getSecondHarvestType.setAccessible(true);
|
|
tinkersConstructLoaded = true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static boolean hasToolTag(ItemStack itemStack)
|
|
{
|
|
return itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("InfiTool");
|
|
}
|
|
|
|
public static NBTTagCompound getToolTag(ItemStack tool)
|
|
{
|
|
NBTTagCompound tag = null;
|
|
if (tool.hasTagCompound())
|
|
tag = tool.getTagCompound().getCompoundTag("InfiTool");
|
|
return tag;
|
|
}
|
|
|
|
public static int getPrimaryHarvestLevel(NBTTagCompound toolTag)
|
|
{
|
|
return toolTag.getInteger("HarvestLevel");
|
|
}
|
|
|
|
public static int getSecondaryHarvestLevel(NBTTagCompound toolTag)
|
|
{
|
|
return toolTag.getInteger("HarvestLevel2");
|
|
}
|
|
|
|
public static Set<String> getToolClassesOf(ItemStack tool)
|
|
{
|
|
return tool.getItem().getToolClasses(tool);
|
|
}
|
|
|
|
public static boolean isToolOfClass(ItemStack tool, String toolClass)
|
|
{
|
|
return getToolClassesOf(tool).contains(toolClass);
|
|
}
|
|
|
|
public static boolean toolHasAnyToolClass(ItemStack tool)
|
|
{
|
|
return !getToolClassesOf(tool).isEmpty();
|
|
}
|
|
|
|
public static boolean isToolEffectiveAgainst(ItemStack tool, Block block, int metadata, String effectiveToolClass)
|
|
{
|
|
if (tinkersConstructLoaded && HarvestTool.isInstance(tool.getItem()))
|
|
{
|
|
Item item = tool.getItem();
|
|
List<String> harvestTypes = new ArrayList<String>();
|
|
try
|
|
{
|
|
harvestTypes.add((String) getHarvestType.invoke(item));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
tinkersConstructLoaded = false;
|
|
}
|
|
|
|
if (DualHarvestTool.isInstance(item))
|
|
{
|
|
try
|
|
{
|
|
harvestTypes.add((String) getSecondHarvestType.invoke(item));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
tinkersConstructLoaded = false;
|
|
}
|
|
}
|
|
|
|
return harvestTypes.contains(effectiveToolClass);
|
|
}
|
|
return ForgeHooks.isToolEffective(tool, block, metadata) || (toolHasAnyToolClass(tool) ? isToolOfClass(tool, effectiveToolClass) : tool.getItem().getDigSpeed(tool, block, metadata) > 1.5f);
|
|
}
|
|
|
|
public static boolean canToolHarvestLevel(ItemStack tool, Block block, int metadata, int harvestLevel)
|
|
{
|
|
boolean canTinkersToolHarvestBlock = false;
|
|
|
|
NBTTagCompound toolTag = ToolHelper.getToolTag(tool);
|
|
if (toolTag != null)
|
|
{
|
|
int toolHarvestLevel = Math.max(ToolHelper.getPrimaryHarvestLevel(toolTag), ToolHelper.getSecondaryHarvestLevel(toolTag));
|
|
canTinkersToolHarvestBlock = toolHarvestLevel >= harvestLevel;
|
|
}
|
|
|
|
return canTinkersToolHarvestBlock || ForgeHooks.canToolHarvestBlock(block, metadata, tool);
|
|
}
|
|
|
|
public static boolean canToolHarvestBlock(ItemStack tool, Block block, int metadata)
|
|
{
|
|
return block.getMaterial().isToolNotRequired() || tool.func_150998_b(block); // func_150998_b = canHarvestBlock
|
|
}
|
|
|
|
}
|