BloodMagic/1.7.10/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectAnimalGrowth.java

157 lines
6.6 KiB
Java
Raw Normal View History

package WayofTime.alchemicalWizardry.common.rituals;
2014-10-13 20:33:20 +00:00
import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry;
import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone;
import WayofTime.alchemicalWizardry.api.rituals.RitualComponent;
import WayofTime.alchemicalWizardry.api.rituals.RitualEffect;
import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler;
import net.minecraft.entity.EntityAgeable;
2014-08-25 11:58:39 +00:00
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
2014-10-13 20:33:20 +00:00
import java.util.ArrayList;
import java.util.List;
public class RitualEffectAnimalGrowth extends RitualEffect
{
2014-10-13 20:33:20 +00:00
public static final int breedingCost = 50;
public static final int reductusDrain = 1;
public static final int virtusDrain = 10;
@Override
public void performEffect(IMasterRitualStone ritualStone)
{
String owner = ritualStone.getOwner();
int currentEssence = SoulNetworkHandler.getCurrentEssence(owner);
World world = ritualStone.getWorld();
int x = ritualStone.getXCoord();
int y = ritualStone.getYCoord();
int z = ritualStone.getZCoord();
if (world.getWorldTime() % 20 != 0)
{
return;
}
2014-08-25 11:58:39 +00:00
double range = 2;
2014-10-13 20:33:20 +00:00
2014-08-25 11:58:39 +00:00
AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double) x, (double) y + 1, (double) z, (double) (x + 1), (double) (y + 3), (double) (z + 1)).expand(range, 0, range);
List<EntityAgeable> list = world.getEntitiesWithinAABB(EntityAgeable.class, axisalignedbb);
int entityCount = 0;
boolean flag = false;
2014-08-25 11:58:39 +00:00
if (currentEssence < this.getCostPerRefresh() * list.size())
{
2014-08-25 11:58:39 +00:00
SoulNetworkHandler.causeNauseaToPlayer(owner);
} else
{
2014-08-25 11:58:39 +00:00
boolean hasReductus = this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false);
2014-10-13 20:33:20 +00:00
for (EntityAgeable entity : list)
{
if (entity.getGrowingAge() < 0)
{
entity.addGrowth(5);
entityCount++;
2014-10-13 20:33:20 +00:00
} else
2014-08-25 11:58:39 +00:00
{
2014-10-13 20:33:20 +00:00
hasReductus = hasReductus && this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, false);
if (hasReductus && entity instanceof EntityAnimal && entity.getGrowingAge() > 0)
{
EntityAnimal animal = (EntityAnimal) entity;
entity.setGrowingAge(Math.max(0, animal.getGrowingAge() - 20 * 2));
this.canDrainReagent(ritualStone, ReagentRegistry.reductusReagent, reductusDrain, true);
entityCount++;
}
}
}
SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh() * entityCount);
}
2014-10-13 20:33:20 +00:00
2014-08-25 11:58:39 +00:00
boolean hasVirtus = this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false);
2014-10-13 20:33:20 +00:00
if (hasVirtus && SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, breedingCost))
2014-08-25 11:58:39 +00:00
{
2014-10-13 20:33:20 +00:00
List<EntityAnimal> animalList = world.getEntitiesWithinAABB(EntityAnimal.class, axisalignedbb);
TileEntity tile = world.getTileEntity(x, y + 1, z);
IInventory inventory = null;
if (tile instanceof IInventory)
{
inventory = (IInventory) tile;
} else
{
tile = world.getTileEntity(x, y - 1, z);
if (tile instanceof IInventory)
{
inventory = (IInventory) tile;
}
}
if (inventory != null)
{
for (EntityAnimal entityAnimal : animalList)
{
if (entityAnimal.isInLove() || entityAnimal.isChild() || entityAnimal.getGrowingAge() > 0)
{
continue;
}
hasVirtus = hasVirtus && this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, false);
boolean hasLP = SoulNetworkHandler.canSyphonFromOnlyNetwork(owner, breedingCost);
for (int i = 0; i < inventory.getSizeInventory(); i++)
{
ItemStack stack = inventory.getStackInSlot(i);
if (stack != null && entityAnimal.isBreedingItem(stack))
{
inventory.decrStackSize(i, 1);
entityAnimal.func_146082_f(null);
this.canDrainReagent(ritualStone, ReagentRegistry.virtusReagent, virtusDrain, true);
SoulNetworkHandler.syphonFromNetwork(owner, breedingCost);
break;
}
}
}
}
2014-08-25 11:58:39 +00:00
}
}
@Override
public int getCostPerRefresh()
{
return 2;
}
@Override
2014-10-13 20:33:20 +00:00
public List<RitualComponent> getRitualComponentList()
{
ArrayList<RitualComponent> animalGrowthRitual = new ArrayList();
animalGrowthRitual.add(new RitualComponent(0, 0, 2, RitualComponent.DUSK));
animalGrowthRitual.add(new RitualComponent(2, 0, 0, RitualComponent.DUSK));
animalGrowthRitual.add(new RitualComponent(0, 0, -2, RitualComponent.DUSK));
animalGrowthRitual.add(new RitualComponent(-2, 0, 0, RitualComponent.DUSK));
animalGrowthRitual.add(new RitualComponent(0, 0, 1, RitualComponent.WATER));
animalGrowthRitual.add(new RitualComponent(1, 0, 0, RitualComponent.WATER));
animalGrowthRitual.add(new RitualComponent(0, 0, -1, RitualComponent.WATER));
animalGrowthRitual.add(new RitualComponent(-1, 0, 0, RitualComponent.WATER));
animalGrowthRitual.add(new RitualComponent(1, 0, 2, RitualComponent.EARTH));
animalGrowthRitual.add(new RitualComponent(-1, 0, 2, RitualComponent.EARTH));
animalGrowthRitual.add(new RitualComponent(1, 0, -2, RitualComponent.EARTH));
animalGrowthRitual.add(new RitualComponent(-1, 0, -2, RitualComponent.EARTH));
animalGrowthRitual.add(new RitualComponent(2, 0, 1, RitualComponent.AIR));
animalGrowthRitual.add(new RitualComponent(2, 0, -1, RitualComponent.AIR));
animalGrowthRitual.add(new RitualComponent(-2, 0, 1, RitualComponent.AIR));
animalGrowthRitual.add(new RitualComponent(-2, 0, -1, RitualComponent.AIR));
return animalGrowthRitual;
2014-10-13 20:33:20 +00:00
}
}