mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
127 lines
3.7 KiB
Java
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();
|
|
}
|
|
}
|