Search in sources :

Example 1 with TileAlveary

use of forestry.apiculture.gadgets.TileAlveary in project ForestryMC by ForestryMC.

the class AlleleEffectRadioactive method doEffect.

@Override
public IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
    World world = housing.getWorld();
    if (isHalted(storedData, housing)) {
        return storedData;
    }
    int[] areaAr = genome.getTerritory();
    Vect area = new Vect(areaAr[0] * 2, areaAr[1] * 2, areaAr[2] * 2);
    Vect offset = new Vect(-Math.round(area.x / 2), -Math.round(area.y / 2), -Math.round(area.z / 2));
    // Radioactivity hurts players and mobs
    Vect min = new Vect(housing.getXCoord() + offset.x, housing.getYCoord() + offset.y, housing.getZCoord() + offset.z);
    Vect max = new Vect(housing.getXCoord() + offset.x + area.x, housing.getYCoord() + offset.y + area.y, housing.getZCoord() + offset.z + area.z);
    AxisAlignedBB hurtBox = AxisAlignedBB.getBoundingBox(min.x, min.y, min.z, max.x, max.y, max.z);
    @SuppressWarnings("rawtypes") List list = housing.getWorld().getEntitiesWithinAABB(EntityLivingBase.class, hurtBox);
    for (Object obj : list) {
        EntityLivingBase entity = (EntityLivingBase) obj;
        int damage = 8;
        // armor.
        if (entity instanceof EntityPlayer) {
            int count = ItemArmorApiarist.wearsItems((EntityPlayer) entity, getUID(), true);
            // Full set, no damage/effect
            if (count > 3) {
                continue;
            } else if (count > 2) {
                damage = 1;
            } else if (count > 1) {
                damage = 2;
            } else if (count > 0) {
                damage = 3;
            }
        }
        entity.attackEntityFrom(damageSourceBeeRadioactive, damage);
    }
    Random rand = housing.getWorld().rand;
    // Radioactivity destroys environment
    for (int i = 0; i < 20; i++) {
        Vect randomPos = new Vect(rand.nextInt(area.x), rand.nextInt(area.y), rand.nextInt(area.z));
        Vect posBlock = randomPos.add(new Vect(housing.getXCoord(), housing.getYCoord(), housing.getZCoord()));
        posBlock = posBlock.add(offset);
        if (posBlock.y <= 1 || posBlock.y >= housing.getWorld().getActualHeight()) {
            continue;
        }
        // Don't destroy ourself and blocks below us.
        if (posBlock.x == housing.getXCoord() && posBlock.z == housing.getZCoord() && posBlock.y <= housing.getYCoord()) {
            continue;
        }
        if (world.isAirBlock(posBlock.x, posBlock.y, posBlock.z)) {
            continue;
        }
        Block block = world.getBlock(posBlock.x, posBlock.y, posBlock.z);
        if (block instanceof BlockAlveary) {
            continue;
        }
        TileEntity tile = world.getTileEntity(posBlock.x, posBlock.y, posBlock.z);
        if (tile instanceof IBeeHousing) {
            continue;
        }
        if (tile instanceof TileAlveary) {
            continue;
        }
        if (block.getBlockHardness(world, posBlock.x, posBlock.y, posBlock.z) < 0) {
            continue;
        }
        world.setBlockToAir(posBlock.x, posBlock.y, posBlock.z);
        break;
    }
    return storedData;
}
Also used : AxisAlignedBB(net.minecraft.util.AxisAlignedBB) BlockAlveary(forestry.apiculture.gadgets.BlockAlveary) Vect(forestry.core.vect.Vect) IBeeHousing(forestry.api.apiculture.IBeeHousing) World(net.minecraft.world.World) TileAlveary(forestry.apiculture.gadgets.TileAlveary) TileEntity(net.minecraft.tileentity.TileEntity) Random(java.util.Random) EntityLivingBase(net.minecraft.entity.EntityLivingBase) EntityPlayer(net.minecraft.entity.player.EntityPlayer) Block(net.minecraft.block.Block) List(java.util.List)

Aggregations

IBeeHousing (forestry.api.apiculture.IBeeHousing)1 BlockAlveary (forestry.apiculture.gadgets.BlockAlveary)1 TileAlveary (forestry.apiculture.gadgets.TileAlveary)1 Vect (forestry.core.vect.Vect)1 List (java.util.List)1 Random (java.util.Random)1 Block (net.minecraft.block.Block)1 EntityLivingBase (net.minecraft.entity.EntityLivingBase)1 EntityPlayer (net.minecraft.entity.player.EntityPlayer)1 TileEntity (net.minecraft.tileentity.TileEntity)1 AxisAlignedBB (net.minecraft.util.AxisAlignedBB)1 World (net.minecraft.world.World)1