mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
179 lines
5.8 KiB
Java
179 lines
5.8 KiB
Java
package com.hbm.entity.missile;
|
|
|
|
import com.hbm.explosion.ExplosionLarge;
|
|
import com.hbm.items.ISatChip;
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.packet.AuxParticlePacketNT;
|
|
import com.hbm.packet.PacketDispatcher;
|
|
import com.hbm.saveddata.satellites.Satellite;
|
|
|
|
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.entity.projectile.EntityThrowable;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.MovingObjectPosition;
|
|
import net.minecraft.world.World;
|
|
|
|
public class EntityCarrier extends EntityThrowable {
|
|
|
|
double acceleration = 0.00D;
|
|
|
|
private ItemStack payload;
|
|
|
|
public EntityCarrier(World p_i1582_1_) {
|
|
super(p_i1582_1_);
|
|
this.ignoreFrustumCheck = true;
|
|
this.setSize(3.0F, 26.0F);
|
|
}
|
|
|
|
@Override
|
|
public void onUpdate() {
|
|
|
|
//this.setDead();
|
|
|
|
if(motionY < 3.0D) {
|
|
acceleration += 0.0005D;
|
|
motionY += acceleration;
|
|
}
|
|
|
|
this.setLocationAndAngles(posX + this.motionX, posY + this.motionY, posZ + this.motionZ, 0, 0);
|
|
|
|
if(!worldObj.isRemote) {
|
|
for(int i = 0; i < 10; i++) {
|
|
NBTTagCompound data = new NBTTagCompound();
|
|
data.setString("type", "gasfire");
|
|
data.setDouble("mY", -0.2D);
|
|
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX + rand.nextGaussian() * 0.75D, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
|
|
}
|
|
|
|
if(this.dataWatcher.getWatchableObjectInt(8) == 1)
|
|
for(int i = 0; i < 2; i++) {
|
|
NBTTagCompound d1 = new NBTTagCompound();
|
|
d1.setString("type", "gasfire");
|
|
d1.setDouble("mY", -0.2D);
|
|
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(d1, posX + rand.nextGaussian() * 0.75D + 2.5, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
|
|
|
|
NBTTagCompound d2 = new NBTTagCompound();
|
|
d2.setString("type", "gasfire");
|
|
d2.setDouble("mY", -0.2D);
|
|
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(d2, posX + rand.nextGaussian() * 0.75D - 2.5, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
|
|
|
|
NBTTagCompound d3 = new NBTTagCompound();
|
|
d3.setString("type", "gasfire");
|
|
d3.setDouble("mY", -0.2D);
|
|
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(d3, posX + rand.nextGaussian() * 0.75D, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D + 2.5), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
|
|
|
|
NBTTagCompound d4 = new NBTTagCompound();
|
|
d4.setString("type", "gasfire");
|
|
d4.setDouble("mY", -0.2D);
|
|
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(d4, posX + rand.nextGaussian() * 0.75D, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D - 2.5), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
|
|
}
|
|
|
|
|
|
if(this.ticksExisted < 20) {
|
|
ExplosionLarge.spawnShock(worldObj, posX, posY, posZ, 13 + rand.nextInt(3), 4 + rand.nextGaussian() * 2);
|
|
}
|
|
}
|
|
|
|
if(this.posY > 300 && this.dataWatcher.getWatchableObjectInt(8) == 1)
|
|
this.disengageBoosters();
|
|
//this.setDead();
|
|
|
|
if(this.posY > 600) {
|
|
deployPayload();
|
|
}
|
|
}
|
|
|
|
private void deployPayload() {
|
|
|
|
if(payload != null) {
|
|
|
|
if(payload.getItem() == ModItems.flame_pony) {
|
|
ExplosionLarge.spawnTracers(worldObj, posX, posY, posZ, 25);
|
|
for(Object p : worldObj.playerEntities)
|
|
((EntityPlayer)p).triggerAchievement(MainRegistry.achSpace);
|
|
}
|
|
|
|
if(payload.getItem() == ModItems.sat_foeq) {
|
|
for(Object p : worldObj.playerEntities)
|
|
((EntityPlayer)p).triggerAchievement(MainRegistry.achFOEQ);
|
|
}
|
|
|
|
if(payload.getItem() instanceof ISatChip) {
|
|
|
|
int freq = ISatChip.getFreqS(payload);
|
|
|
|
Satellite.orbit(worldObj, Satellite.getIDFromItem(payload.getItem()), freq, posX, posY, posZ);
|
|
}
|
|
}
|
|
|
|
this.setDead();
|
|
}
|
|
|
|
@Override
|
|
protected void entityInit() {
|
|
this.dataWatcher.addObject(8, 1);
|
|
}
|
|
|
|
public void setPayload(ItemStack stack) {
|
|
this.payload = stack.copy();
|
|
}
|
|
|
|
private void disengageBoosters() {
|
|
this.dataWatcher.updateObject(8, 0);
|
|
|
|
if(!worldObj.isRemote) {
|
|
EntityBooster boost1 = new EntityBooster(worldObj);
|
|
boost1.posX = posX + 1.5D;
|
|
boost1.posY = posY;
|
|
boost1.posZ = posZ;
|
|
boost1.motionX = 0.45D + rand.nextDouble() * 0.2D;
|
|
boost1.motionY = motionY;
|
|
boost1.motionZ = rand.nextGaussian() * 0.1D;
|
|
worldObj.spawnEntityInWorld(boost1);
|
|
|
|
EntityBooster boost2 = new EntityBooster(worldObj);
|
|
boost2.posX = posX - 1.5D;
|
|
boost2.posY = posY;
|
|
boost2.posZ = posZ;
|
|
boost2.motionX = -0.45D - rand.nextDouble() * 0.2D;
|
|
boost2.motionY = motionY;
|
|
boost2.motionZ = rand.nextGaussian() * 0.1D;
|
|
worldObj.spawnEntityInWorld(boost2);
|
|
|
|
EntityBooster boost3 = new EntityBooster(worldObj);
|
|
boost3.posX = posX;
|
|
boost3.posY = posY;
|
|
boost3.posZ = posZ + 1.5D;
|
|
boost3.motionZ = 0.45D + rand.nextDouble() * 0.2D;
|
|
boost3.motionY = motionY;
|
|
boost3.motionX = rand.nextGaussian() * 0.1D;
|
|
worldObj.spawnEntityInWorld(boost3);
|
|
|
|
EntityBooster boost4 = new EntityBooster(worldObj);
|
|
boost4.posX = posX;
|
|
boost4.posY = posY;
|
|
boost4.posZ = posZ - 1.5D;
|
|
boost4.motionZ = -0.45D - rand.nextDouble() * 0.2D;
|
|
boost4.motionY = motionY;
|
|
boost4.motionX = rand.nextGaussian() * 0.1D;
|
|
worldObj.spawnEntityInWorld(boost4);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onImpact(MovingObjectPosition p_70184_1_) {
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public boolean isInRangeToRenderDist(double distance)
|
|
{
|
|
return distance < 500000;
|
|
}
|
|
}
|