/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [May 25, 2014, 10:30:39 PM (GMT)]
*/
package vazkii.botania.common.item.equipment.bauble;
import java.util.List;
import com.google.common.base.Predicates;
import baubles.api.BaubleType;
import baubles.api.BaublesApi;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.IMob;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.ReflectionHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.item.IBaubleRender;
import vazkii.botania.api.mana.IManaUsingItem;
import vazkii.botania.api.mana.ManaItemHandler;
import vazkii.botania.api.sound.BotaniaSoundEvents;
import vazkii.botania.common.Botania;
import vazkii.botania.common.block.subtile.functional.SubTileHeiseiDream;
import vazkii.botania.common.lib.LibItemNames;
import vazkii.botania.common.lib.LibObfuscation;
public class ItemDivaCharm extends ItemBauble implements IManaUsingItem, IBaubleRender {
public ItemDivaCharm() {
super(LibItemNames.DIVA_CHARM);
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent
public void onEntityDamaged(LivingHurtEvent event) {
if(event.getSource().getEntity() instanceof EntityPlayer && event.getEntityLiving() instanceof EntityLiving && !event.getEntityLiving().world.isRemote && Math.random() < 0.6F) {
EntityPlayer player = (EntityPlayer) event.getSource().getEntity();
ItemStack amulet = BaublesApi.getBaublesHandler(player).getStackInSlot(6);
if(!amulet.isEmpty() && amulet.getItem() == this) {
final int cost = 250;
if(ManaItemHandler.requestManaExact(amulet, player, cost, false)) {
final int range = 20;
List mobs = player.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(event.getEntityLiving().posX - range, event.getEntityLiving().posY - range, event.getEntityLiving().posZ - range, event.getEntityLiving().posX + range, event.getEntityLiving().posY + range, event.getEntityLiving().posZ + range), Predicates.instanceOf(IMob.class));
if(mobs.size() > 1) {
if(SubTileHeiseiDream.brainwashEntity((EntityLiving) event.getEntityLiving(), (List<IMob>) mobs)) {
if(event.getEntityLiving() instanceof EntityCreeper)
ReflectionHelper.setPrivateValue(EntityCreeper.class, (EntityCreeper) event.getEntityLiving(), 2, LibObfuscation.TIME_SINCE_IGNITED);
event.getEntityLiving().heal(event.getEntityLiving().getMaxHealth());
if(event.getEntityLiving().isDead)
event.getEntityLiving().isDead = false;
ManaItemHandler.requestManaExact(amulet, player, cost, true);
player.world.playSound(null, player.posX, player.posY, player.posZ, BotaniaSoundEvents.divaCharm, SoundCategory.PLAYERS, 1F, 1F);
double x = event.getEntityLiving().posX;
double y = event.getEntityLiving().posY;
double z = event.getEntityLiving().posZ;
for(int i = 0; i < 50; i++)
Botania.proxy.sparkleFX(x + Math.random() * event.getEntityLiving().width, y + Math.random() * event.getEntityLiving().height, z + Math.random() * event.getEntityLiving().width, 1F, 1F, 0.25F, 1F, 3);
}
}
}
}
}
}
@Override
public BaubleType getBaubleType(ItemStack arg0) {
return BaubleType.CHARM;
}
@Override
public boolean usesMana(ItemStack stack) {
return true;
}
@Override
@SideOnly(Side.CLIENT)
public void onPlayerBaubleRender(ItemStack stack, EntityPlayer player, RenderType type, float partialTicks) {
if(type == RenderType.HEAD) {
Helper.translateToHeadLevel(player);
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
GlStateManager.scale(0.8, 0.8, 0.8);
GlStateManager.rotate(-90, 0, 1, 0);
GlStateManager.rotate(180, 1, 0, 0);
GlStateManager.translate(0.1625, -1.625, 0.40);
Minecraft.getMinecraft().getRenderItem().renderItem(new ItemStack(this, 1), ItemCameraTransforms.TransformType.GROUND);
}
}
}