Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/entity/effect/EntityFireLingering.java

105 lines
3.6 KiB
Java

package com.hbm.entity.effect;
import java.util.List;
import com.hbm.extprop.HbmLivingProps;
import com.hbm.particle.helper.FlameCreator;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class EntityFireLingering extends Entity {
public static int TYPE_DIESEL = 0;
public static int TYPE_BALEFIRE = 1;
public static int TYPE_PHOSPHORUS = 2;
public int maxAge = 150;
public EntityFireLingering(World world) {
super(world);
}
public EntityFireLingering setArea(float width, float height) {
this.dataWatcher.updateObject(11, width);
this.dataWatcher.updateObject(12, height);
return this;
}
public EntityFireLingering setDuration(int duration){
this.maxAge = duration;
return this;
}
@Override
protected void entityInit() {
this.dataWatcher.addObject(10, new Integer(0));
this.dataWatcher.addObject(11, new Float(0));
this.dataWatcher.addObject(12, new Float(0));
}
public EntityFireLingering setType(int type) {
this.dataWatcher.updateObject(10, type);
return this;
}
public int getType() {
return this.dataWatcher.getWatchableObjectInt(10);
}
@Override
public void onEntityUpdate() {
float height = this.dataWatcher.getWatchableObjectFloat(12);
this.yOffset = 0;
this.setSize(this.dataWatcher.getWatchableObjectFloat(11), height);
this.setPosition(this.posX, this.posY, this.posZ);
if(!worldObj.isRemote) {
if(this.ticksExisted >= maxAge) {
this.setDead();
}
List<Entity> affected = worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox(posX - width / 2, posY, posZ - width / 2, posX + width / 2, posY + height, posZ + width / 2));
for(Entity e : affected) {
if(e instanceof EntityLivingBase) {
EntityLivingBase livng = (EntityLivingBase) e;
HbmLivingProps props = HbmLivingProps.getData(livng);
if(this.getType() == this.TYPE_DIESEL) if(props.fire < 60) props.fire = 60;
if(this.getType() == this.TYPE_PHOSPHORUS) if(props.fire < 300) props.fire = 300;
if(this.getType() == this.TYPE_BALEFIRE) if(props.balefire < 100) props.balefire = 100;
} else {
e.setFire(4);
}
}
} else {
for(int i = 0; i < (width >= 5 ? 2 : 1); i++) {
double x = posX - width / 2 + rand.nextDouble() * width;
double z = posZ - width / 2 + rand.nextDouble() * width;
Vec3 up = Vec3.createVectorHelper(x, posY + height, z);
Vec3 down = Vec3.createVectorHelper(x, posY - height, z);
MovingObjectPosition mop = worldObj.func_147447_a(up, down, false, true, true);
if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) down = mop.hitVec;
if(this.getType() == this.TYPE_DIESEL) FlameCreator.composeEffectClient(worldObj, x, down.yCoord, z, FlameCreator.META_FIRE);
if(this.getType() == this.TYPE_PHOSPHORUS) FlameCreator.composeEffectClient(worldObj, x, down.yCoord, z, FlameCreator.META_FIRE);
if(this.getType() == this.TYPE_BALEFIRE) FlameCreator.composeEffectClient(worldObj, x, down.yCoord, z, FlameCreator.META_BALEFIRE);
}
}
}
@Override @SideOnly(Side.CLIENT) public boolean canRenderOnFire() { return false; }
@Override protected void writeEntityToNBT(NBTTagCompound nbt) { }
@Override public boolean writeToNBTOptional(NBTTagCompound nbt) { return false; }
@Override public void writeToNBT(NBTTagCompound nbt) { }
@Override public void readEntityFromNBT(NBTTagCompound nbt) { this.setDead(); }
}