package crazypants.enderio.tool;
import java.lang.reflect.Method;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import cofh.api.block.IDismantleable;
import cofh.api.item.IToolHammer;
import crazypants.enderio.api.tool.ITool;
public class TEToolProvider implements IToolProvider, IToolImpl {
private TEHammer wrench = new TEHammer();
@Override
public ITool getTool(ItemStack stack) {
if(stack.getItem() instanceof IToolHammer) {
return wrench;
}
return null;
}
public static class TEHammer implements ITool {
@Override
public boolean canUse(ItemStack stack, EntityPlayer player, int x, int y, int z) {
return ((IToolHammer) stack.getItem()).isUsable(stack, player, x, y, z);
}
@Override
public void used(ItemStack stack, EntityPlayer player, int x, int y, int z) {
((IToolHammer) stack.getItem()).toolUsed(stack, player, x, y, z);
}
@Override
public boolean shouldHideFacades(ItemStack stack, EntityPlayer player) {
return true;
}
}
@Override
public Class<?> getInterface() {
return IToolHammer.class;
}
@Override
public Object handleMethod(ITool yetaWrench, Method method, Object[] args) {
if("isUsable".equals(method.getName())) {
return true;
} else if("toolUsed".equals(method.getName())) {
toolUsed((ItemStack) args[0], (EntityLivingBase) args[1], (Integer) args[2], (Integer) args[3], (Integer) args[4]);
return null;
}
return null;
}
public void toolUsed(ItemStack item, EntityLivingBase user, int x, int y, int z) {
Block block = user.worldObj.getBlock(x, y, z);
if(user.isSneaking() && block instanceof IDismantleable && user instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) user;
IDismantleable machine = (IDismantleable) block;
if(machine.canDismantle(player, player.worldObj, x, y, z) && !player.worldObj.isRemote) {
machine.dismantleBlock(player, player.worldObj, x, y, z, false);
}
}
}
}