BiomesOPlenty/src/minecraft/biomesoplenty/helpers/EntitiesHelper.java

142 lines
5.6 KiB
Java
Raw Normal View History

2013-05-11 11:19:28 +00:00
package biomesoplenty.helpers;
import net.minecraft.block.Block;
2013-05-11 11:19:28 +00:00
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityCreature;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.effect.EntityLightningBolt;
import net.minecraft.entity.passive.EntityAnimal;
2013-05-11 11:19:28 +00:00
import net.minecraft.entity.passive.EntityChicken;
import net.minecraft.entity.passive.EntityCow;
import net.minecraft.entity.passive.EntityPig;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.event.Event.Result;
2013-05-11 11:19:28 +00:00
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.living.LivingSpawnEvent.CheckSpawn;
import biomesoplenty.api.Blocks;
2013-05-11 11:19:28 +00:00
import biomesoplenty.api.Items;
import biomesoplenty.configuration.BOPConfiguration;
import biomesoplenty.entities.ai.EntityAITemptArmour;
2013-05-11 11:19:28 +00:00
public class EntitiesHelper
{
2013-05-31 10:34:02 +00:00
@ForgeSubscribe
public void onEntitySpawn(EntityJoinWorldEvent event)
{
Entity entity = event.entity;
if (!(entity instanceof EntityLiving))
return;
if (entity instanceof EntityChicken) {
((EntityLiving)entity).tasks.addTask(3, new EntityAITemptArmour((EntityCreature) entity, 0.25F, Items.flowerBand.get().itemID, 0, false));
}
if (entity instanceof EntitySheep) {
((EntityLiving)entity).tasks.addTask(3, new EntityAITemptArmour((EntityCreature) entity, 0.25F, Items.flowerBand.get().itemID, 1, false));
}
if (entity instanceof EntityPig) {
((EntityLiving)entity).tasks.addTask(4, new EntityAITemptArmour((EntityCreature) entity, 0.25F, Items.flowerBand.get().itemID, 2, false));
}
if (entity instanceof EntityCow) {
((EntityLiving)entity).tasks.addTask(3, new EntityAITemptArmour((EntityCreature) entity, 0.25F, Items.flowerBand.get().itemID, 3, false));
}
}
@ForgeSubscribe
public void canEntitySpawn(CheckSpawn event)
{
if (event.entityLiving instanceof EntityAnimal)
{
int i = MathHelper.floor_double(event.entityLiving.posX);
int j = MathHelper.floor_double(event.entityLiving.boundingBox.minY);
int k = MathHelper.floor_double(event.entityLiving.posZ);
if (event.entityLiving.getMaxSpawnedInChunk() <= event.world.getEntitiesWithinAABB(event.entityLiving.getClass(), AxisAlignedBB.getAABBPool().getAABB(i - 16, j - 4, k - 16, i + 17, j + 5, k + 17)).size())
return;
if (event.entityLiving.worldObj.getBlockId(i, j - 1, k) == Blocks.holyGrass.get().blockID && event.entityLiving.worldObj.getFullBlockLightValue(i, j, k) > 8
&& event.entityLiving.worldObj.checkNoEntityCollision(event.entity.boundingBox) && !event.entityLiving.worldObj.isAnyLiquid(event.entityLiving.boundingBox)
&& event.entityLiving.worldObj.getCollidingBoundingBoxes(event.entityLiving, event.entityLiving.boundingBox).isEmpty()) {
event.setResult(Result.ALLOW);
}
}
}
@ForgeSubscribe
public void fallingFromPromisedLand(LivingHurtEvent event)
{
if (event.source == DamageSource.outOfWorld && event.entityLiving.dimension == BOPConfiguration.promisedLandDimID)
{
event.setCanceled(true);
if (!event.entityLiving.worldObj.isRemote && !event.entityLiving.isDead)
{
if (event.entityLiving instanceof EntityPlayerMP)
{
EntityPlayerMP thePlayer = (EntityPlayerMP) event.entityLiving;
thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, 0, new TeleporterPromised(thePlayer.mcServer.worldServerForDimension(0), true));
}
}
}
}
@ForgeSubscribe
public void lightningStrike(LivingHurtEvent event)
{
if (event.source == DamageSource.inFire)
{
AxisAlignedBB axisalignedbb = AxisAlignedBB.getAABBPool().getAABB((double)event.entity.posX, (double)event.entity.posY, (double)event.entity.posZ, (double)(event.entity.posX + 1), (double)(event.entity.posY + 1), (double)(event.entity.posZ + 1)).expand(5, 5, 5);
if (!event.entity.worldObj.getEntitiesWithinAABB(EntityLightningBolt.class, axisalignedbb).isEmpty());
{
if (!event.entity.worldObj.getEntitiesWithinAABB(EntityPlayer.class, axisalignedbb).isEmpty());
{
if (isBlockInBB(event.entity.worldObj, axisalignedbb, Blocks.glass.get().blockID, 2))
{
event.setCanceled(true);
}
}
}
}
}
public boolean isBlockInBB(World world, AxisAlignedBB par1AxisAlignedBB, int blockID, int blockMeta)
{
int i = MathHelper.floor_double(par1AxisAlignedBB.minX);
int j = MathHelper.floor_double(par1AxisAlignedBB.maxX + 1.0D);
int k = MathHelper.floor_double(par1AxisAlignedBB.minY);
int l = MathHelper.floor_double(par1AxisAlignedBB.maxY + 1.0D);
int i1 = MathHelper.floor_double(par1AxisAlignedBB.minZ);
int j1 = MathHelper.floor_double(par1AxisAlignedBB.maxZ + 1.0D);
for (int k1 = i; k1 < j; ++k1)
{
for (int l1 = k; l1 < l; ++l1)
{
for (int i2 = i1; i2 < j1; ++i2)
{
Block block = Block.blocksList[world.getBlockId(k1, l1, i2)];
if (block != null && block.blockID == blockID && world.getBlockMetadata(k1, l1, i2) == blockMeta)
{
return true;
}
}
}
}
return false;
}
2013-05-11 11:19:28 +00:00
}