package fox.spiteful.forbidden;
import java.util.*;
import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler;
import baubles.api.BaublesApi;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.gameevent.PlayerEvent.ItemCraftedEvent;
import fox.spiteful.forbidden.blocks.ForbiddenBlocks;
import fox.spiteful.forbidden.compat.Compat;
import fox.spiteful.forbidden.items.tools.ItemRidingCrop;
import fox.spiteful.forbidden.items.baubles.ItemSubCollar;
import fox.spiteful.forbidden.items.tools.ItemTaintPickaxe;
import fox.spiteful.forbidden.potions.DarkPotions;
import net.minecraft.block.Block;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EnumCreatureAttribute;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.boss.IBossDisplayData;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntityPigZombie;
import net.minecraft.entity.monster.EntitySilverfish;
import net.minecraft.entity.monster.EntitySkeleton;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.monster.IMob;
import net.minecraft.entity.passive.EntityVillager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.*;
import net.minecraft.util.StatCollector;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.event.entity.living.*;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.BreakSpeed;
import net.minecraftforge.event.entity.player.PlayerUseItemEvent;
import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
import net.minecraftforge.oredict.OreDictionary;
import org.apache.logging.log4j.Level;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.entities.ITaintedMob;
import thaumcraft.common.config.ConfigItems;
import thaumcraft.common.items.wands.ItemWandCasting;
import thaumcraft.common.lib.utils.Utils;
import com.google.common.collect.Multimap;
import fox.spiteful.forbidden.enchantments.DarkEnchantments;
import fox.spiteful.forbidden.items.ForbiddenItems;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
public class FMEventHandler {
Random randy = new Random();
final Aspect[] primals = { Aspect.ENTROPY, Aspect.ORDER, Aspect.FIRE, Aspect.WATER, Aspect.EARTH, Aspect.AIR };
HashMap<String, Integer> lastLP = new HashMap<String, Integer>();
@SubscribeEvent
public void onPlayerBreaking(BreakSpeed event) {
if (event.entityPlayer.getCurrentEquippedItem() != null) {
ItemStack stack = event.entityPlayer.getCurrentEquippedItem();
if (stack.getItem() instanceof ItemTaintPickaxe) {
World world = event.entityPlayer.worldObj;
int x = event.x;
int y = event.y;
int z = event.z;
float hardness = world.getBlock(x, y, z).getBlockHardness(world, x, y, z);
if (hardness == 0.0F)
event.newSpeed = 0.0F;
else if (hardness < 5.0F)
event.newSpeed = 0.1F;
else if (hardness < 20.0F)
event.newSpeed = hardness / 2.0F;
else
event.newSpeed = 5.0F + hardness;
}
}
}
@SubscribeEvent
public void onLivingDrops(LivingDropsEvent event) {
if (event.source.getDamageType().equals("player") && event.entityLiving instanceof ITaintedMob)
{
PotionEffect effect = event.entityLiving.getActivePotionEffect(Potion.weakness);
if (effect != null)
{
if (effect.getAmplifier() >= 2) {
double rand = Math.random();
if (rand < 0.50d) {
addDrop(event, new ItemStack(ForbiddenItems.resource, 1, 3));
}
}
}
}
if (Config.silverfishEmeralds && event.entityLiving instanceof EntitySilverfish) {
if (event.entityLiving.worldObj.getBiomeGenForCoords((int) event.entityLiving.posX, (int) event.entityLiving.posZ).biomeID == BiomeGenBase.extremeHills.biomeID) {
if (event.recentlyHit && event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer && randy.nextInt(30) <= (2 + event.lootingLevel * 2))
addDrop(event, new ItemStack(ForbiddenItems.resource, 1, 0));
} else if (event.recentlyHit && event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer && !(event.source.getEntity() instanceof FakePlayer) && randy.nextInt(70) <= (1 + event.lootingLevel * 3)) {
addDrop(event, new ItemStack(ForbiddenItems.resource, 1, 0));
}
}
if (Config.greedyEnch && (event.entityLiving instanceof EntityVillager || event.entityLiving instanceof IMob) && event.recentlyHit && event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) event.source.getEntity();
ItemStack equip = player.getCurrentEquippedItem();
if (equip != null && EnchantmentHelper.getEnchantmentLevel(DarkEnchantments.greedy.effectId, equip) > 0 && event.lootingLevel <= 0) {
if (event.entityLiving instanceof EntityVillager)
addDrop(event, new ItemStack(Items.emerald, 1));
else if (randy.nextInt(35) < 3)
addDrop(event, new ItemStack(ForbiddenItems.resource, 1, 0));
}
}
if (event.entityLiving.getClass() == EntitySkeleton.class && event.recentlyHit && event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) {
ItemStack weap = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem();
if (weap != null && weap.getItem() == ForbiddenItems.skullAxe && randy.nextInt(26) <= (3 + EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, weap))) {
addDrop(event, new ItemStack(Items.skull, 1, ((EntitySkeleton) event.entityLiving).getSkeletonType()));
}
}
if (event.entityLiving.getClass() == EntityZombie.class && event.recentlyHit && event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) {
ItemStack weap = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem();
if (weap != null && weap.getItem() == ForbiddenItems.skullAxe && randy.nextInt(26) <= (2 + 2 * EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, weap))) {
addDrop(event, new ItemStack(Items.skull, 1, 2));
}
}
if (event.entityLiving.getClass() == EntityCreeper.class && event.recentlyHit && event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) {
ItemStack weap = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem();
if (weap != null && weap.getItem() == ForbiddenItems.skullAxe && randy.nextInt(26) <= (2 + 2 * EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, weap))) {
addDrop(event, new ItemStack(Items.skull, 1, 4));
}
}
if (event.entityLiving instanceof EntityPlayer && event.recentlyHit && event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) {
ItemStack weap = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem();
if (weap != null && weap.getItem() == ForbiddenItems.skullAxe && randy.nextInt(11) <= (1 + EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, weap))) {
ItemStack head = new ItemStack(Items.skull, 1, 3);
NBTTagCompound nametag = new NBTTagCompound();
nametag.setString("SkullOwner", ((EntityPlayer) event.entityLiving).getCommandSenderName());
head.setTagCompound(nametag);
addDrop(event, head);
}
}
if (event.entityLiving.worldObj.provider.dimensionId != -1)
return;
if (!event.recentlyHit || event.source.getEntity() == null || !(event.source.getEntity() instanceof EntityPlayer) || event.source.getEntity() instanceof FakePlayer) {
if (randy.nextInt(30) < 4) {
addDrop(event, new ItemStack(ForbiddenItems.deadlyShards, 1 + randy.nextInt(3), 5));
}
}
if (event.recentlyHit && event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer && !(event.source.getEntity() instanceof FakePlayer)) {
if (event.entityLiving instanceof IMob) {
int wrath = 2;
int greed = 0;
ItemStack heldItem = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem();
if (heldItem != null) {
if (heldItem.getItem() instanceof ItemTool) {
Multimap map = heldItem.getItem().getAttributeModifiers(heldItem);
Collection collect = map.get(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName());
if (collect instanceof AttributeModifier) {
wrath += (int) ((AttributeModifier) collect).getAmount();
}
} else if (heldItem.getItem() instanceof ItemSword) {
wrath += (int) (((ItemSword) heldItem.getItem()).func_150931_i() + 4.0F);
}
wrath += EnchantmentHelper.getEnchantmentLevel(Enchantment.sharpness.effectId, heldItem);
wrath += EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, heldItem);
if (!event.entityLiving.isImmuneToFire()) {
wrath += EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, heldItem);
wrath += EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, heldItem);
}
if (event.entityLiving.isEntityUndead()) {
wrath += EnchantmentHelper.getEnchantmentLevel(Enchantment.smite.effectId, heldItem);
}
if (event.entityLiving.getCreatureAttribute() == EnumCreatureAttribute.ARTHROPOD) {
wrath += EnchantmentHelper.getEnchantmentLevel(Enchantment.baneOfArthropods.effectId, heldItem);
}
if(heldItem.getItem() instanceof ItemWandCasting){
wrath += ((ItemWandCasting)(heldItem.getItem())).getFocusPotency(heldItem);
greed += ((ItemWandCasting)(heldItem.getItem())).getFocusTreasure(heldItem);
}
greed += EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, heldItem);
}
if (randy.nextInt(61) <= wrath) {
addDrop(event, new ItemStack(ForbiddenItems.deadlyShards, 1, 0));
}
if (event.entityLiving instanceof IBossDisplayData) {
addDrop(event, new ItemStack(ForbiddenItems.deadlyShards, 2 + randy.nextInt(1 + event.lootingLevel), 3));
}
if(greed > 0 && randy.nextInt(20) <= greed){
addDrop(event, new ItemStack(ForbiddenItems.deadlyShards, 1, 6));
}
}
if (event.entityLiving instanceof EntityPigZombie && !(event.source.getEntity() instanceof FakePlayer)) {
if (event.entityLiving.getHeldItem() != null && event.entityLiving.getHeldItem().getItem() == ForbiddenItems.deadlyShards && event.entityLiving.getHeldItem().getItemDamage() == 1) {
addDrop(event, new ItemStack(ForbiddenItems.deadlyShards, 1, 1));
}
}
}
}
public void addDrop(LivingDropsEvent event, ItemStack drop) {
EntityItem entityitem = new EntityItem(event.entityLiving.worldObj, event.entityLiving.posX, event.entityLiving.posY, event.entityLiving.posZ, drop);
entityitem.delayBeforeCanPickup = 10;
event.drops.add(entityitem);
}
@SubscribeEvent
public void onDeath(LivingDeathEvent event) {
if (event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer && ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem() != null) {
ItemStack equip = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem();
if (equip.getItem() == ForbiddenItems.fork) {
String name = null;
try {
name = EntityList.getEntityString(event.entityLiving);
} catch (Exception e) {
try {
name = event.entityLiving.getCommandSenderName();
} catch (Exception ee) {
return;
}
} finally {
if (name == null)
return;
}
if (Config.spawnerMobs.containsKey(name) || (Config.wrathCrazy && !(event.entityLiving instanceof IBossDisplayData)))
imprintCrystal((EntityPlayer) (event.source.getEntity()), name);
}
if (EnchantmentHelper.getEnchantmentLevel(DarkEnchantments.educational.effectId, equip) > 0 && event.entityLiving instanceof EntityLiving && EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, equip) == 0) {
try {
int learning = 3 * XPReflectionHelper.getXP(((EntityLiving) event.entityLiving)) * EnchantmentHelper.getEnchantmentLevel(DarkEnchantments.educational.effectId, equip);
while (learning > 0) {
int xp = EntityXPOrb.getXPSplit(learning);
learning -= xp;
event.entityLiving.worldObj.spawnEntityInWorld(new EntityXPOrb(event.entityLiving.worldObj, event.entityLiving.posX, event.entityLiving.posY, event.entityLiving.posZ, xp));
}
} catch (Throwable e) {
LogHandler.log(Level.ERROR, "Failed to educate!");
}
}
}
}
public void imprintCrystal(EntityPlayer player, String mob) {
for (int x = 0; x < player.inventory.getSizeInventory(); ++x) {
ItemStack item = player.inventory.getStackInSlot(x);
if (item != null && item.getItem() == ForbiddenItems.mobCrystal && (!item.hasTagCompound() || !item.getTagCompound().hasKey("mob"))) {
if (!item.hasTagCompound())
item.setTagCompound(new NBTTagCompound());
item.stackTagCompound.setString("mob", mob);
return;
}
}
}
@SubscribeEvent
public void onHarvest(HarvestDropsEvent event) {
EntityPlayer player = event.harvester;
if (player != null && player.inventory.getCurrentItem() != null) {
ItemStack equip = player.inventory.getCurrentItem();
if (equip.getItem() == ForbiddenItems.taintShovel && event.block.getMaterial() == thaumcraft.common.config.Config.taintMaterial && event.drops.size() == 0 && event.block != ForbiddenBlocks.taintLeaves) {
int fortune = EnchantmentHelper.getFortuneModifier(player);
int chance = 1 + (2 * fortune);
if (event.isSilkTouching)
chance += 6;
if (randy.nextInt(31) <= chance) {
event.drops.add(new ItemStack(ForbiddenItems.deadlyShards, 1, 2));
}
}
if (EnchantmentHelper.getEnchantmentLevel(DarkEnchantments.cluster.effectId, equip) > 0 && EnchantmentHelper.getFortuneModifier(player) == 0) {
if (event.drops != null && event.drops.size() > 0) {
int cluster = EnchantmentHelper.getEnchantmentLevel(DarkEnchantments.cluster.effectId, equip);
float chance = 0.2F + (float) cluster * 0.075F;
for (int a = 0; a < event.drops.size(); ++a) {
ItemStack is = (ItemStack) event.drops.get(a);
ItemStack smr = Utils.findSpecialMiningResult(is, chance, event.world.rand);
if (!is.isItemEqual(smr)) {
event.drops.set(a, smr);
if (!event.world.isRemote) {
event.world.playSoundEffect((double) ((float) event.x + 0.5F), (double) ((float) event.y + 0.5F), (double) ((float) event.z + 0.5F), "random.orb", 0.2F, 0.7F + event.world.rand.nextFloat() * 0.2F);
}
}
}
}
}
if (EnchantmentHelper.getEnchantmentLevel(DarkEnchantments.consuming.effectId, equip) > 0) {
for (int x = 0; x < event.drops.size(); x++) {
ItemStack drop = (ItemStack) event.drops.get(x);
if (drop != null && isGarbage(drop))
event.drops.remove(x);
}
}
if (EnchantmentHelper.getEnchantmentLevel(DarkEnchantments.corrupting.effectId, equip) > 0 && event.block == Block.getBlockFromItem(Config.thaumcraftOre.getItem()) && randy.nextInt(3) == 1) {
ArrayList<ItemStack> moarDrops = new ArrayList<ItemStack>();
ArrayList<ItemStack> deadDrops = new ArrayList<ItemStack>();
Iterator current = event.drops.iterator();
while (current.hasNext()) {
ItemStack curDrop = (ItemStack) current.next();
if (curDrop != null && curDrop.getItem() == Config.thaumcraftShard.getItem()) {
int x = curDrop.stackSize;
for (int i = 0; i < x; i++) {
moarDrops.add(getSinShard());
}
deadDrops.add(curDrop);
}
}
current = deadDrops.iterator();
while (current.hasNext()) {
event.drops.remove((ItemStack) (current.next()));
}
current = moarDrops.iterator();
while (current.hasNext()) {
event.drops.add((ItemStack) (current.next()));
}
}
if(player.worldObj.provider.dimensionId == -1 && event.block == Blocks.quartz_ore){
int fortune = EnchantmentHelper.getFortuneModifier(player);
if(fortune > 0 && randy.nextInt(60) <= fortune){
event.drops.add(new ItemStack(ForbiddenItems.deadlyShards, 1, 6));
}
}
}
}
private boolean isGarbage(ItemStack drop) {
for(int id : OreDictionary.getOreIDs(drop)) {
for(String ore : Config.trash) {
if(OreDictionary.getOreName(id).equals(ore))
return true;
}
}
return false;
}
@SubscribeEvent
public void onEat(PlayerUseItemEvent.Finish event){
if(event.entityPlayer.worldObj.isRemote)
return;
if(event.item.getItem() instanceof ItemFood){
if(event.entityPlayer.worldObj.provider.dimensionId == -1 && event.item.getItem() != ForbiddenItems.gluttonyShard
&& randy.nextInt(10) < 2){
EntityItem ent = event.entityPlayer.entityDropItem(new ItemStack(ForbiddenItems.gluttonyShard, 1), 1.0F);
ent.motionY += randy.nextFloat() * 0.05F;
ent.motionX += (randy.nextFloat() - randy.nextFloat()) * 0.1F;
ent.motionZ += (randy.nextFloat() - randy.nextFloat()) * 0.1F;
}
ItemStack ring = BaublesApi.getBaubles(event.entityPlayer).getStackInSlot(1);
ItemStack ring2 = BaublesApi.getBaubles(event.entityPlayer).getStackInSlot(2);
if((ring != null && ring.getItem() == ForbiddenItems.ringFood) || (ring2 != null && ring2.getItem() == ForbiddenItems.ringFood)){
event.entityPlayer.getFoodStats().addStats(2, 2.0F);
}
}
}
public ItemStack getSinShard() {
int x = randy.nextInt(7);
switch (x) {
case 0:
case 1:
case 3:
case 5:
case 6:
return new ItemStack(ForbiddenItems.deadlyShards, 1, x);
case 2:
return new ItemStack(ForbiddenItems.gluttonyShard, 1, 0);
case 4:
if (Config.noLust)
return getSinShard();
else
return new ItemStack(ForbiddenItems.deadlyShards, 1, 4);
}
return null;
}
@SubscribeEvent
public void onSpawn(LivingSpawnEvent event) {
if (event.entityLiving.worldObj.provider.dimensionId == -1 && event.entityLiving instanceof EntityPigZombie && randy.nextInt(175) == 1)
event.entityLiving.setCurrentItemOrArmor(0, new ItemStack(ForbiddenItems.deadlyShards, 1, 1));
}
@SubscribeEvent
public void onGetHurt(LivingHurtEvent event) {
if (event.entityLiving instanceof EntityPlayer && ((EntityPlayer) event.entityLiving).getCurrentEquippedItem() != null && ((EntityPlayer) event.entityLiving).getCurrentEquippedItem().getItem() instanceof ItemWandCasting) {
ItemStack wand = ((EntityPlayer) event.entityLiving).getCurrentEquippedItem();
if (event.source.getDamageType().equals("taint") && ((ItemWandCasting) wand.getItem()).getRod(wand).getTag().equals("tainted")) {
for (int x = 0; x < 3; x++) {
((ItemWandCasting) wand.getItem()).addVis(wand, primals[randy.nextInt(6)], 1, true);
}
}
if ((event.source.getDamageType().equals("wither") || event.source.isFireDamage()) && ((ItemWandCasting) wand.getItem()).getRod(wand).getTag().equals("infernal")) {
event.setCanceled(true);
}
}
if (event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) {
ItemStack equip = ((EntityPlayer) event.source.getEntity()).getCurrentEquippedItem();
if (equip != null && equip.getItem() instanceof ItemWandCasting) {
if (((ItemWandCasting) equip.getItem()).getCap(equip).getTag().equals("alchemical") && ((ItemWandCasting) equip.getItem()).getRod(equip).getTag().startsWith("blood")) {
event.entityLiving.addPotionEffect(new PotionEffect(Potion.weakness.id, 60, 2));
}
}
}
}
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onFeelPain(LivingHurtEvent event){
if(!Config.noLust && event.ammount > 0 && event.entityLiving instanceof EntityPlayer){
EntityPlayer player = (EntityPlayer)event.entityLiving;
ItemStack amulet = BaublesApi.getBaubles(player).getStackInSlot(0);
if(amulet != null && amulet.getItem() == ForbiddenItems.subCollar){
int doses = 3 * (int)event.ammount;
if(event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer){
EntityPlayer dom = (EntityPlayer)event.source.getEntity();
int chance = 1;
if(dom.getHeldItem() != null && dom.getHeldItem().getItem() instanceof ItemRidingCrop) {
doses += 3;
chance += 3;
}
if(player.worldObj.provider.dimensionId == -1 && randy.nextInt(30) < chance){
EntityItem ent = player.entityDropItem(new ItemStack(ForbiddenItems.deadlyShards, 1, 4), 1.0F);
ent.motionY += player.worldObj.rand.nextFloat() * 0.05F;
ent.motionX += (player.worldObj.rand.nextFloat() - player.worldObj.rand.nextFloat()) * 0.1F;
ent.motionZ += (player.worldObj.rand.nextFloat() - player.worldObj.rand.nextFloat()) * 0.1F;
}
}
for(int x = 0;x < doses; x++){
((ItemSubCollar)ForbiddenItems.subCollar).addVis(amulet, primals[randy.nextInt(6)], 1, true);
}
}
}
}
@SubscribeEvent
public void onTooltip(ItemTooltipEvent event) {
if (event.itemStack.getItem() instanceof ItemWandCasting) {
if (((ItemWandCasting) event.itemStack.getItem()).getRod(event.itemStack).getTag().startsWith("blood") && !event.itemStack.stackTagCompound.getString("ownerName").equals("")) {
event.toolTip.add(StatCollector.translateToLocal("tooltip.currentowner") + " " + event.itemStack.stackTagCompound.getString("ownerName"));
} else if (((ItemWandCasting) event.itemStack.getItem()).getRod(event.itemStack).getTag().startsWith("neutronium")) {
event.toolTip.add(StatCollector.translateToLocal("tooltip.creativeonly"));
} else if (((ItemWandCasting) event.itemStack.getItem()).getRod(event.itemStack).getTag().startsWith("profane")) {
event.toolTip.add("Contract: " + event.itemStack.getTagCompound().getInteger("contract"));
}
}
}
@SubscribeEvent
public void onEntityUpdate(LivingUpdateEvent event){
if(Compat.bm && event.entityLiving != null && event.entityLiving instanceof EntityPlayer && !event.entityLiving.worldObj.isRemote){
EntityPlayer player = (EntityPlayer)event.entityLiving;
String name = player.getDisplayName();
if(player.isPotionActive(DarkPotions.bloodSeal)){
try {
if (lastLP.containsKey(name)) {
if (SoulNetworkHandler.getCurrentEssence(name) > lastLP.get(name))
SoulNetworkHandler.setCurrentEssence(name, lastLP.get(name));
else
lastLP.put(name, SoulNetworkHandler.getCurrentEssence(name));
}
else
lastLP.put(name, SoulNetworkHandler.getCurrentEssence(name));
}
catch(Throwable e){
Compat.bm = false;
}
}
else if(lastLP.containsKey(name))
lastLP.remove(name);
}
}
@SubscribeEvent
public void onCrafting(ItemCraftedEvent event) {
if(event.crafting.getItem() == ForbiddenItems.primewell) {
for(int x = 0; x < 9; ++x) {
ItemStack item = event.craftMatrix.getStackInSlot(x);
if(item != null && item.getItem() == ConfigItems.itemEldritchObject) {
++item.stackSize;
event.craftMatrix.setInventorySlotContents(x, item);
}
}
}
if(Compat.bm && event.crafting.getItem() == ForbiddenItems.bloodOrb){
EntityItem ent = event.player.entityDropItem(new ItemStack(ConfigItems.itemEldritchObject, 1, 3), 0);
ent.motionY += randy.nextFloat() * 0.05F;
ent.motionX += (randy.nextFloat() - randy.nextFloat()) * 0.1F;
ent.motionZ += (randy.nextFloat() - randy.nextFloat()) * 0.1F;
}
}
}