2024-01-21 00:28:26 +01:00

127 lines
3.7 KiB
Java

package com.hbm.entity.projectile;
import com.hbm.blocks.ModBlocks;
import com.hbm.explosion.ExplosionNT;
import com.hbm.explosion.ExplosionNT.ExAttrib;
import com.hbm.lib.ModDamageSource;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
public class EntityShrapnel extends EntityThrowable {
public EntityShrapnel(World p_i1773_1_) {
super(p_i1773_1_);
this.isImmuneToFire = true;
}
public EntityShrapnel(World p_i1774_1_, EntityLivingBase p_i1774_2_) {
super(p_i1774_1_, p_i1774_2_);
}
@Override
public void entityInit() {
this.dataWatcher.addObject(16, Byte.valueOf((byte) 0));
}
public EntityShrapnel(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) {
super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_);
}
@Override
public void onUpdate() {
super.onUpdate();
if(worldObj.isRemote && this.dataWatcher.getWatchableObjectByte(16) == 1)
worldObj.spawnParticle("flame", posX, posY, posZ, 0.0, 0.0, 0.0);
}
@Override
protected void onImpact(MovingObjectPosition mop) {
if(mop.entityHit != null) {
byte b0 = 15;
mop.entityHit.attackEntityFrom(ModDamageSource.shrapnel, b0);
}
if(this.ticksExisted > 5) {
if(!worldObj.isRemote)
this.setDead();
int b = this.dataWatcher.getWatchableObjectByte(16);
if(b == 2 || b == 4) {
if(!worldObj.isRemote) {
if(motionY < -0.2D) {
if(worldObj.getBlock(mop.blockX, mop.blockY + 1, mop.blockZ).isReplaceable(worldObj, mop.blockX, mop.blockY + 1, mop.blockZ))
worldObj.setBlock(mop.blockX, mop.blockY + 1, mop.blockZ, b == 2 ? ModBlocks.volcanic_lava_block : ModBlocks.rad_lava_block);
for(int x = mop.blockX - 1; x <= mop.blockX + 1; x++) {
for(int y = mop.blockY; y <= mop.blockY + 2; y++) {
for(int z = mop.blockZ - 1; z <= mop.blockZ + 1; z++) {
if(worldObj.getBlock(x, y, z) == Blocks.air)
worldObj.setBlock(x, y, z, ModBlocks.gas_monoxide);
}
}
}
}
if(motionY > 0) {
ExplosionNT explosion = new ExplosionNT(worldObj, null, mop.blockX + 0.5, mop.blockY + 0.5, mop.blockZ + 0.5, 7);
explosion.addAttrib(ExAttrib.NODROP);
explosion.addAttrib(b == 2 ? ExAttrib.LAVA_V : ExAttrib.LAVA_R);
explosion.addAttrib(ExAttrib.NOSOUND);
explosion.addAttrib(ExAttrib.ALLMOD);
explosion.addAttrib(ExAttrib.NOHURT);
explosion.explode();
}
}
} else if(this.dataWatcher.getWatchableObjectByte(16) == 3) {
if(worldObj.getBlock(mop.blockX, mop.blockY + 1, mop.blockZ).isReplaceable(worldObj, mop.blockX, mop.blockY + 1, mop.blockZ)) {
worldObj.setBlock(mop.blockX, mop.blockY + 1, mop.blockZ, ModBlocks.mud_block);
}
} else {
for(int i = 0; i < 5; i++) worldObj.spawnParticle("lava", posX, posY, posZ, 0.0, 0.0, 0.0);
}
worldObj.playSoundEffect(posX, posY, posZ, "random.fizz", 1.0F, 1.0F);
}
}
public void setTrail(boolean b) {
this.dataWatcher.updateObject(16, (byte) (b ? 1 : 0));
}
public void setVolcano(boolean b) {
this.dataWatcher.updateObject(16, (byte) (b ? 2 : 0));
}
public void setWatz(boolean b) {
this.dataWatcher.updateObject(16, (byte) (b ? 3 : 0));
}
public void setRadVolcano(boolean b) {
this.dataWatcher.updateObject(16, (byte) (b ? 4 : 0));
}
@Override
public boolean writeToNBTOptional(NBTTagCompound nbt) {
return false;
}
@Override
public void readEntityFromNBT(NBTTagCompound nbt) {
super.readEntityFromNBT(nbt);
this.setDead();
}
}