Added more augmentations for the Lava Ritual.

This commit is contained in:
WayofTime 2016-10-23 20:59:49 -04:00
parent 731ba99fa3
commit 6b27896859
4 changed files with 116 additions and 3 deletions

View file

@ -2,6 +2,7 @@
Version 2.1.0-67
------------------------------------------------------
- Added the Destructive Will effect to the Ritual of the Green Grove. This ritual now is done~
- Added more augmentations for the Lava Ritual.
------------------------------------------------------
Version 2.1.0-66

View file

@ -7,10 +7,14 @@ import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.MobEffects;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import WayofTime.bloodmagic.api.BloodMagicAPI;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.ritual.AreaDescriptor;
import WayofTime.bloodmagic.api.ritual.EnumRuneType;
@ -29,20 +33,32 @@ public class RitualLava extends Ritual
{
public static final String LAVA_RANGE = "lavaRange";
public static final String FIRE_FUSE_RANGE = "fireFuse";
public static final String FIRE_RESIST_RANGE = "fireResist";
public static final String FIRE_DAMAGE_RANGE = "fireDamage";
public static final double vengefulWillDrain = 1;
public static final double steadfastWillDrain = 0.5;
public static final double corrosiveWillDrain = 0.2;
public int timer = 0;
public static final int corrosiveRefreshTime = 20;
public RitualLava()
{
super("ritualLava", 0, 10000, "ritual." + Constants.Mod.MODID + ".lavaRitual");
addBlockRange(LAVA_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 1, 0), 1));
addBlockRange(FIRE_FUSE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-2, -2, -2), 5));
addBlockRange(FIRE_RESIST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1));
addBlockRange(FIRE_DAMAGE_RANGE, new AreaDescriptor.Rectangle(new BlockPos(0, 0, 0), 1));
setMaximumVolumeAndDistanceOfRange(LAVA_RANGE, 9, 3, 3);
setMaximumVolumeAndDistanceOfRange(FIRE_FUSE_RANGE, 0, 10, 10);
setMaximumVolumeAndDistanceOfRange(FIRE_RESIST_RANGE, 0, 10, 10);
setMaximumVolumeAndDistanceOfRange(FIRE_DAMAGE_RANGE, 0, 10, 10);
}
@Override
public void performRitual(IMasterRitualStone masterRitualStone)
{
timer++;
World world = masterRitualStone.getWorldObj();
SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
int currentEssence = network.getCurrentEssence();
@ -82,9 +98,10 @@ public class RitualLava extends Ritual
}
}
network.syphon(getRefreshCost() * totalEffects);
double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig);
double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig);
double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig);
if (vengefulWill >= vengefulWillDrain)
{
double vengefulDrained = 0;
@ -102,7 +119,7 @@ public class RitualLava extends Ritual
if (entity instanceof EntityPlayer)
{
// continue;
continue;
}
if (!entity.isPotionActive(ModPotions.fireFuse))
@ -119,6 +136,72 @@ public class RitualLava extends Ritual
WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.VENGEFUL, vengefulDrained, true);
}
}
if (steadfastWill >= steadfastWillDrain)
{
double steadfastDrained = 0;
AreaDescriptor resistRange = getBlockRange(FIRE_RESIST_RANGE);
int duration = getFireResistForWill(steadfastWill);
AxisAlignedBB resistArea = resistRange.getAABB(pos);
List<EntityPlayer> entities = world.getEntitiesWithinAABB(EntityPlayer.class, resistArea);
for (EntityPlayer entity : entities)
{
if (steadfastWill < steadfastWillDrain)
{
break;
}
if (!entity.isPotionActive(MobEffects.FIRE_RESISTANCE) || (entity.getActivePotionEffect(MobEffects.FIRE_RESISTANCE).getDuration() < 2))
{
entity.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 100, 0));
steadfastDrained += steadfastWillDrain;
steadfastWill -= steadfastWillDrain;
}
}
if (steadfastDrained > 0)
{
WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.STEADFAST, steadfastDrained, true);
}
}
if (timer % corrosiveRefreshTime == 0 && corrosiveWill >= corrosiveWillDrain)
{
double corrosiveDrained = 0;
AreaDescriptor resistRange = getBlockRange(FIRE_DAMAGE_RANGE);
float damage = getCorrosiveDamageForWill(corrosiveWill);
AxisAlignedBB damageArea = resistRange.getAABB(pos);
List<EntityLivingBase> entities = world.getEntitiesWithinAABB(EntityLivingBase.class, damageArea);
for (EntityLivingBase entity : entities)
{
if (corrosiveWill < corrosiveWillDrain)
{
break;
}
if (!entity.isDead && entity.hurtTime <= 0 && Utils.isImmuneToFireDamage(entity))
{
if (entity.attackEntityFrom(BloodMagicAPI.getDamageSource(), damage))
{
corrosiveDrained += corrosiveWillDrain;
corrosiveWill -= corrosiveWillDrain;
}
}
}
if (corrosiveDrained > 0)
{
WorldDemonWillHandler.drainWill(world, pos, EnumDemonWillType.CORROSIVE, corrosiveDrained, true);
}
}
network.syphon(getRefreshCost() * totalEffects);
}
@Override
@ -133,6 +216,12 @@ public class RitualLava extends Ritual
return 500;
}
@Override
public ITextComponent[] provideInformationOfRitualToPlayer(EntityPlayer player)
{
return new ITextComponent[] { new TextComponentTranslation(this.getUnlocalizedName() + ".info"), new TextComponentTranslation(this.getUnlocalizedName() + ".default.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".corrosive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".steadfast.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".destructive.info"), new TextComponentTranslation(this.getUnlocalizedName() + ".vengeful.info") };
}
@Override
public ArrayList<RitualComponent> getComponents()
{
@ -193,4 +282,14 @@ public class RitualLava extends Ritual
return horizontalRangeMap.get(range);
}
public int getFireResistForWill(double steadfastWill)
{
return (int) (200 + steadfastWill * 3);
}
public float getCorrosiveDamageForWill(double corrosiveWill)
{
return (float) (1 + corrosiveWill * 0.05);
}
}

View file

@ -93,6 +93,11 @@ public class Utils
return null;
}
public static boolean isImmuneToFireDamage(EntityLivingBase entity)
{
return entity.isImmuneToFire() || entity.isPotionActive(MobEffects.FIRE_RESISTANCE);
}
public static boolean isPlayerBesideSolidBlockFace(EntityPlayer player)
{
World world = player.worldObj;

View file

@ -605,6 +605,12 @@ ritual.BloodMagic.downgradeRitual=Downgrade Ritual
ritual.BloodMagic.waterRitual.info=Generates a source of water from the master ritual stone.
ritual.BloodMagic.lavaRitual.info=Generates a source of lava from the master ritual stone.
ritual.BloodMagic.lavaRitual.default.info=(Raw) Decreases the LP cost of placing lava and allows lava to be placed insided of a linked container.
ritual.BloodMagic.lavaRitual.corrosive.info=(Corrosive) Entities within range that are immune to fire are damaged severely.
ritual.BloodMagic.lavaRitual.destructive.info=(Destructive) Lava placement range is increased based on total Will.
ritual.BloodMagic.lavaRitual.vengeful.info=(Vengeful) Entities within range have Fire Fuse applied to them.
ritual.BloodMagic.lavaRitual.steadfast.info=(Steadfast) Players within a designated range have Fire Resistance applied to them.
ritual.BloodMagic.greenGroveRitual.info=Grows crops within its area.
ritual.BloodMagic.jumpRitual.info=Causes entities to leap up into the air.
ritual.BloodMagic.wellOfSufferingRitual.info=Attacks mobs within its damage zone and puts the LP into a nearby blood altar.
@ -644,6 +650,8 @@ ritual.BloodMagic.meteorRitual.info=Consumes an item inside of its item range to
ritual.BloodMagic.waterRitual.waterRange.info=(Water) The area that the ritual will place water source blocks.
ritual.BloodMagic.lavaRitual.lavaRange.info=(Lava) The area that the ritual will place lava source blocks.
ritual.BloodMagic.lavaRitual.fireFuse.info=(Vengeful) Entities in this range are afflicted by Fire Fuse.
ritual.BloodMagic.lavaRitual.fireResist.info=(Steadfast) Players in this range have Fire Resist applied.
ritual.BloodMagic.lavaRitual.fireDamage.info=(Corrosive) Entities within this range that are immune to fire damage are hurt proportional to the Will.
ritual.BloodMagic.greenGroveRitual.growing.info=(Growth) The area that the ritual will grow plants in.
ritual.BloodMagic.greenGroveRitual.leech.info=(Corrosive) Entities in this area have their life drained to grow nearby crops.
ritual.BloodMagic.greenGroveRitual.hydrate.info=(Steadfast) Blocks within this range are rehydrated into farmland, and seeds within the area are planted nearby.