mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
216 lines
6.7 KiB
Java
216 lines
6.7 KiB
Java
package com.hbm.entity.missile;
|
|
|
|
import com.hbm.entity.particle.EntityGasFlameFX;
|
|
import com.hbm.explosion.ExplosionLarge;
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.items.tool.ItemSatChip;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.saveddata.SatelliteSaveStructure;
|
|
import com.hbm.saveddata.SatelliteSaveStructure.SatelliteType;
|
|
import com.hbm.saveddata.SatelliteSavedData;
|
|
|
|
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.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++) {
|
|
EntityGasFlameFX fx = new EntityGasFlameFX(worldObj);
|
|
fx.posY = posY - 0.25D;
|
|
fx.posX = posX + rand.nextGaussian() * 0.75D;
|
|
fx.posZ = posZ + rand.nextGaussian() * 0.75D;
|
|
fx.motionY = -0.2D;
|
|
|
|
worldObj.spawnEntityInWorld(fx);
|
|
}
|
|
|
|
if(this.dataWatcher.getWatchableObjectInt(8) == 1)
|
|
for(int i = 0; i < 2; i++) {
|
|
EntityGasFlameFX fx1 = new EntityGasFlameFX(worldObj);
|
|
fx1.posY = posY - 0.25D;
|
|
fx1.posX = posX + rand.nextGaussian() * 0.15D + 2.5D;
|
|
fx1.posZ = posZ + rand.nextGaussian() * 0.15D;
|
|
fx1.motionY = -0.2D;
|
|
|
|
worldObj.spawnEntityInWorld(fx1);
|
|
|
|
EntityGasFlameFX fx2 = new EntityGasFlameFX(worldObj);
|
|
fx2.posY = posY - 0.25D;
|
|
fx2.posX = posX + rand.nextGaussian() * 0.15D - 2.5D;
|
|
fx2.posZ = posZ + rand.nextGaussian() * 0.15D;
|
|
fx2.motionY = -0.2D;
|
|
|
|
worldObj.spawnEntityInWorld(fx2);
|
|
|
|
EntityGasFlameFX fx3 = new EntityGasFlameFX(worldObj);
|
|
fx3.posY = posY - 0.25D;
|
|
fx3.posX = posX + rand.nextGaussian() * 0.15D;
|
|
fx3.posZ = posZ + rand.nextGaussian() * 0.15D + 2.5D;
|
|
fx3.motionY = -0.2D;
|
|
|
|
worldObj.spawnEntityInWorld(fx3);
|
|
|
|
EntityGasFlameFX fx4 = new EntityGasFlameFX(worldObj);
|
|
fx4.posY = posY - 0.25D;
|
|
fx4.posX = posX + rand.nextGaussian() * 0.15D;
|
|
fx4.posZ = posZ + rand.nextGaussian() * 0.15D - 2.5D;
|
|
fx4.motionY = -0.2D;
|
|
|
|
worldObj.spawnEntityInWorld(fx4);
|
|
}
|
|
|
|
|
|
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 ItemSatChip) {
|
|
SatelliteSavedData data = (SatelliteSavedData)worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites");
|
|
if(data == null) {
|
|
worldObj.perWorldStorage.setData("satellites", new SatelliteSavedData(worldObj));
|
|
|
|
data = (SatelliteSavedData)worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites");
|
|
}
|
|
|
|
int freq = ItemSatChip.getFreq(payload);
|
|
|
|
if(!data.isFreqTaken(freq)) {
|
|
if(payload.getItem() == ModItems.sat_mapper)
|
|
data.satellites.add(new SatelliteSaveStructure(freq, SatelliteType.MAPPER, this.dimension));
|
|
if(payload.getItem() == ModItems.sat_scanner)
|
|
data.satellites.add(new SatelliteSaveStructure(freq, SatelliteType.SCANNER, this.dimension));
|
|
if(payload.getItem() == ModItems.sat_radar)
|
|
data.satellites.add(new SatelliteSaveStructure(freq, SatelliteType.RADAR, this.dimension));
|
|
if(payload.getItem() == ModItems.sat_laser)
|
|
data.satellites.add(new SatelliteSaveStructure(freq, SatelliteType.LASER, this.dimension));
|
|
if(payload.getItem() == ModItems.sat_foeq)
|
|
data.satellites.add(new SatelliteSaveStructure(freq, SatelliteType.RELAY, this.dimension));
|
|
if(payload.getItem() == ModItems.sat_resonator)
|
|
data.satellites.add(new SatelliteSaveStructure(freq, SatelliteType.RESONATOR, this.dimension));
|
|
if(payload.getItem() == ModItems.sat_miner)
|
|
data.satellites.add(new SatelliteSaveStructure(freq, SatelliteType.MINER, this.dimension));
|
|
|
|
data.markDirty();
|
|
}
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|