package crazypants.enderio.entity; import java.util.Calendar; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.IEntityLivingData; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import com.enderio.core.common.util.EntityUtil; import cpw.mods.fml.common.registry.GameRegistry; public class EntityWitherSkeleton extends EntitySkeleton { public EntityWitherSkeleton(World world) { super(world); } public EntityWitherSkeleton(EntitySkeleton entity) { this(entity.worldObj); this.copyLocationAndAnglesFrom(entity); for (int i = 0; i < entity.getLastActiveItems().length; i++) { this.setCurrentItemOrArmor(i, entity.getEquipmentInSlot(i)); } } @Override public void setFire(int p_70015_1_) { } @Override public IEntityLivingData onSpawnWithEgg(IEntityLivingData entityData) { this.getEntityAttribute(SharedMonsterAttributes.followRange) .applyModifier(new AttributeModifier("Random spawn bonus", this.rand.nextGaussian() * 0.05D, 1)); this.setSkeletonType(1); this.setCurrentItemOrArmor(0, new ItemStack(Items.stone_sword)); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(4.0D); this.setCombatTask(); this.setCanPickUpLoot(this.rand.nextFloat() < 0.55F * this.worldObj.func_147462_b(this.posX, this.posY, this.posZ)); if(this.getEquipmentInSlot(4) == null) { Calendar calendar = this.worldObj.getCurrentDate(); if(calendar.get(2) + 1 == 10 && calendar.get(5) == 31 && this.rand.nextFloat() < 0.25F) { this.setCurrentItemOrArmor(4, new ItemStack(this.rand.nextFloat() < 0.1F ? Blocks.lit_pumpkin : Blocks.pumpkin)); this.equipmentDropChances[4] = 0.0F; } } return entityData; } @Override public int getSkeletonType() { return 1; } @Override public void onDeath(DamageSource source) { super.onDeath(source); if(source.damageType.equals("player")) { EntityPlayer player = (EntityPlayer) source.getEntity(); ItemStack stack = player.getCurrentEquippedItem(); if(stack != null && stack.hasTagCompound()) { Item cleaver = GameRegistry.findItem("TConstruct", "cleaver"); int beheading = stack.getTagCompound().getCompoundTag("InfiTool").getInteger("Beheading"); if(stack.getItem() == cleaver) { beheading += 2; } if(beheading > 0 && worldObj.rand.nextInt(100) < beheading * 10) { EntityUtil.spawnItemInWorldWithRandomMotion(worldObj, new ItemStack(Items.skull, 1, 1), posX, posY, posZ); } } } if(source.getEntity() instanceof EntityLivingBase) { int lootingLevel = EnchantmentHelper.getLootingModifier((EntityLivingBase) source.getEntity()); if(worldObj.rand.nextInt(Math.max(1, 1 - lootingLevel)) == 0) { Item necroticBone = GameRegistry.findItem("TConstruct", "materials"); if(necroticBone != null) { EntityUtil.spawnItemInWorldWithRandomMotion(worldObj, new ItemStack(necroticBone, 1, 8), posX, posY, posZ); } } } } }