64 lines
2.2 KiB
Java
64 lines
2.2 KiB
Java
package electroblob.wizardry.potion;
|
|
|
|
import electroblob.wizardry.Wizardry;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.inventory.EntityEquipmentSlot;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.DamageSource;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraftforge.common.ISpecialArmor;
|
|
|
|
public class CurseUndeath extends Curse {
|
|
|
|
public CurseUndeath(boolean isBadEffect, int liquiidColour){
|
|
super(isBadEffect, liquiidColour, new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons/curse_of_undeath.png"));
|
|
// This needs to be here because registerPotionAttributeModifier doesn't like it if the potion has no name yet.
|
|
this.setPotionName("potion." + Wizardry.MODID + ":curse_of_undeath");
|
|
}
|
|
|
|
@Override
|
|
public boolean isReady(int duration, int amplifier){
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void performEffect(EntityLivingBase entitylivingbase, int strength){
|
|
|
|
// Adapted from EntityZombie
|
|
if(entitylivingbase.world.isDaytime() && !entitylivingbase.world.isRemote){
|
|
|
|
float f = entitylivingbase.getBrightness();
|
|
|
|
if(f > 0.5F && entitylivingbase.world.rand.nextFloat() * 30.0F < (f - 0.4F) * 2.0F
|
|
&& entitylivingbase.world.canSeeSky(new BlockPos(entitylivingbase.posX,
|
|
entitylivingbase.posY + (double)entitylivingbase.getEyeHeight(), entitylivingbase.posZ))){
|
|
|
|
boolean flag = true;
|
|
ItemStack itemstack = entitylivingbase.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
|
|
|
|
if (!itemstack.isEmpty()) {
|
|
if (itemstack.isItemStackDamageable()) {
|
|
|
|
if (itemstack.getItem() instanceof ISpecialArmor) {
|
|
((ISpecialArmor) itemstack.getItem()).damageArmor(entitylivingbase, itemstack, DamageSource.ON_FIRE, entitylivingbase.world.rand.nextInt(2), EntityEquipmentSlot.HEAD.getSlotIndex());
|
|
} else {
|
|
itemstack.setItemDamage(itemstack.getItemDamage() + entitylivingbase.world.rand.nextInt(2));
|
|
if (itemstack.getItemDamage() >= itemstack.getMaxDamage()) {
|
|
entitylivingbase.renderBrokenItemStack(itemstack);
|
|
entitylivingbase.setItemStackToSlot(EntityEquipmentSlot.HEAD, ItemStack.EMPTY);
|
|
}
|
|
}
|
|
}
|
|
|
|
flag = false;
|
|
}
|
|
|
|
if(flag){
|
|
entitylivingbase.setFire(8);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|