package gtPlusPlus.xmod.witchery; import java.lang.reflect.Field; import java.util.ArrayList; import com.mojang.authlib.GameProfile; import gtPlusPlus.core.lib.LoadedMods; import gtPlusPlus.core.material.ALLOY; import gtPlusPlus.core.util.reflect.ReflectionUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.oredict.OreDictionary; public class WitchUtils { private static final GameProfile NORMAL_MINER_PROFILE; private static final GameProfile KOBOLDITE_MINER_PROFILE; static { Field a1 = null, a2 = null; GameProfile b1 = null, b2 = null; if (LoadedMods.Witchery) { try { a1 = getField("com.emoniph.witchery.entity.ai.EntityAIDigBlocks", "NORMAL_MINER_PROFILE"); a2 = getField("com.emoniph.witchery.entity.ai.EntityAIDigBlocks", "KOBOLDITE_MINER_PROFILE"); b1 = (GameProfile) a1.get(null); b2 = (GameProfile) a2.get(null); } catch (Throwable t) { } } NORMAL_MINER_PROFILE = b1; KOBOLDITE_MINER_PROFILE = b2; } //com.emoniph.witchery.entity.ai.EntityAIDigBlocks.onHarvestDrops(EntityPlayer, HarvestDropsEvent) public static void onHarvestDrops(final EntityPlayer harvester, final BlockEvent.HarvestDropsEvent event) { if (LoadedMods.Witchery) { if (harvester != null && !harvester.worldObj.isRemote && !event.isCanceled() && (isEqual(harvester.getGameProfile(), KOBOLDITE_MINER_PROFILE) || isEqual(harvester.getGameProfile(), NORMAL_MINER_PROFILE))) { final boolean hasKobolditePick = isEqual(harvester.getGameProfile(), KOBOLDITE_MINER_PROFILE); final ArrayList newDrops = new ArrayList(); double kobolditeChance = hasKobolditePick ? 0.02 : 0.01; for (final ItemStack drop : event.drops) { final int[] oreIDs = OreDictionary.getOreIDs(drop); boolean addOriginal = true; if (oreIDs.length > 0) { final String oreName = OreDictionary.getOreName(oreIDs[0]); if (oreName != null && oreName.startsWith("ore")) { final ItemStack smeltedDrop = FurnaceRecipes.smelting().getSmeltingResult(drop); if (smeltedDrop != null && hasKobolditePick && harvester.worldObj.rand.nextDouble() < 0.5) { addOriginal = false; newDrops.add(smeltedDrop.copy()); newDrops.add(smeltedDrop.copy()); if (harvester.worldObj.rand.nextDouble() < 0.25) { newDrops.add(smeltedDrop.copy()); } } kobolditeChance = (hasKobolditePick ? 0.08 : 0.05); } } if (addOriginal) { newDrops.add(drop); } } event.drops.clear(); for (final ItemStack newDrop : newDrops) { event.drops.add(newDrop); } if (kobolditeChance > 0.0 && harvester.worldObj.rand.nextDouble() < kobolditeChance) { event.drops.add(ALLOY.KOBOLDITE.getDust(1)); } } } } public static Field getField(String aClassName, String aFieldName) { Class c; c = ReflectionUtils.getClass(aClassName); if (c != null) { Field f = ReflectionUtils.getField(c, aFieldName); if (f != null) { return f; } } return null; } public static boolean isEqual(final GameProfile a, final GameProfile b) { return a != null && b != null && a.getId() != null && b.getId() != null && a.getId().equals(b.getId()); } }