mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
157 lines
6.9 KiB
Java
157 lines
6.9 KiB
Java
package com.hbm.entity.missile;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import com.hbm.blocks.ModBlocks;
|
|
import com.hbm.config.BombConfig;
|
|
import com.hbm.entity.effect.EntityBlackHole;
|
|
import com.hbm.entity.effect.EntityCloudFleija;
|
|
import com.hbm.entity.effect.EntityEMPBlast;
|
|
import com.hbm.entity.logic.EntityNukeExplosionMK3;
|
|
import com.hbm.explosion.ExplosionNukeGeneric;
|
|
import com.hbm.explosion.ExplosionNukeSmall;
|
|
import com.hbm.inventory.OreDictManager.DictFrame;
|
|
import com.hbm.inventory.material.Mats;
|
|
import com.hbm.items.ModItems;
|
|
|
|
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
|
|
import com.hbm.world.WorldUtil;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraft.util.MovingObjectPosition;
|
|
import net.minecraft.world.World;
|
|
|
|
public abstract class EntityMissileTier0 extends EntityMissileBaseNT {
|
|
|
|
public EntityMissileTier0(World world) { super(world); }
|
|
public EntityMissileTier0(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
|
|
|
|
@Override
|
|
public List<ItemStack> getDebris() {
|
|
List<ItemStack> list = new ArrayList<ItemStack>();
|
|
list.add(new ItemStack(ModItems.wire_fine, 4, Mats.MAT_ALUMINIUM.id));
|
|
list.add(new ItemStack(ModItems.plate_titanium, 4));
|
|
list.add(new ItemStack(ModItems.shell, 2, Mats.MAT_ALUMINIUM.id));
|
|
list.add(new ItemStack(ModItems.ducttape, 1));
|
|
return list;
|
|
}
|
|
|
|
@Override
|
|
protected float getContrailScale() {
|
|
return 0.5F;
|
|
}
|
|
|
|
public static class EntityMissileTest extends EntityMissileTier0 {
|
|
public EntityMissileTest(World world) { super(world); }
|
|
public EntityMissileTest(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
|
|
@Override public ItemStack getDebrisRareDrop() { return null; }
|
|
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_test); }
|
|
|
|
@Override public void onMissileImpact(MovingObjectPosition mop) {
|
|
int x = (int) Math.floor(posX);
|
|
int y = (int) Math.floor(posY);
|
|
int z = (int) Math.floor(posZ);
|
|
int range = 50;
|
|
|
|
for(int iX = -range; iX <= range; iX++) {
|
|
for(int iY = -range; iY <= range; iY++) {
|
|
for(int iZ = -range; iZ <= range; iZ++) {
|
|
double dist = Math.sqrt(iX * iX + iY * iY + iZ * iZ);
|
|
if(dist > range) continue;
|
|
Block block = worldObj.getBlock(x + iX, y + iY, z + iZ);
|
|
int meta = worldObj.getBlockMetadata(x + iX, y + iY, z + iZ);
|
|
int charMeta = (int) MathHelper.clamp_double(12 - (dist / range) * (dist / range) * 13, 0, 12);
|
|
|
|
if(block.isNormalCube()) {
|
|
if(block != ModBlocks.sellafield_slaked || meta < charMeta) {
|
|
worldObj.setBlock(x + iX, y + iY, z + iZ, ModBlocks.sellafield_slaked, charMeta, 3);
|
|
}
|
|
} else {
|
|
worldObj.setBlock(x + iX, y + iY, z + iZ, Blocks.air);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static class EntityMissileMicro extends EntityMissileTier0 {
|
|
public EntityMissileMicro(World world) { super(world); }
|
|
public EntityMissileMicro(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
|
|
@Override public void onMissileImpact(MovingObjectPosition mop) { ExplosionNukeSmall.explode(worldObj, posX, posY + 0.5, posZ, ExplosionNukeSmall.PARAMS_HIGH); }
|
|
@Override public ItemStack getDebrisRareDrop() { return DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.NUKE_HIGH); }
|
|
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_micro); }
|
|
}
|
|
|
|
public static class EntityMissileSchrabidium extends EntityMissileTier0 {
|
|
public EntityMissileSchrabidium(World world) { super(world); }
|
|
public EntityMissileSchrabidium(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
|
|
@Override public void onMissileImpact(MovingObjectPosition mop) {
|
|
EntityNukeExplosionMK3 ex = EntityNukeExplosionMK3.statFacFleija(worldObj, posX, posY, posZ, BombConfig.aSchrabRadius);
|
|
if(!ex.isDead) {
|
|
WorldUtil.loadAndSpawnEntityInWorld(ex);
|
|
EntityCloudFleija cloud = new EntityCloudFleija(this.worldObj, BombConfig.aSchrabRadius);
|
|
cloud.posX = this.posX;
|
|
cloud.posY = this.posY;
|
|
cloud.posZ = this.posZ;
|
|
this.worldObj.spawnEntityInWorld(cloud);
|
|
}
|
|
}
|
|
@Override public ItemStack getDebrisRareDrop() { return null; }
|
|
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_schrabidium); }
|
|
}
|
|
|
|
public static class EntityMissileBHole extends EntityMissileTier0 {
|
|
public EntityMissileBHole(World world) { super(world); }
|
|
public EntityMissileBHole(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
|
|
@Override public void onMissileImpact(MovingObjectPosition mop) {
|
|
this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 1.5F, true);
|
|
EntityBlackHole bl = new EntityBlackHole(this.worldObj, 1.5F);
|
|
bl.posX = this.posX;
|
|
bl.posY = this.posY;
|
|
bl.posZ = this.posZ;
|
|
this.worldObj.spawnEntityInWorld(bl);
|
|
}
|
|
@Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.grenade_black_hole, 1); }
|
|
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_bhole); }
|
|
}
|
|
|
|
public static class EntityMissileTaint extends EntityMissileTier0 {
|
|
public EntityMissileTaint(World world) { super(world); }
|
|
public EntityMissileTaint(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
|
|
@Override public void onMissileImpact(MovingObjectPosition mop) {
|
|
this.worldObj.createExplosion(this, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 5.0F, true);
|
|
for(int i = 0; i < 100; i++) {
|
|
int a = rand.nextInt(11) + (int) mop.blockX - 5;
|
|
int b = rand.nextInt(11) + (int) mop.blockY - 5;
|
|
int c = rand.nextInt(11) + (int) mop.blockZ - 5;
|
|
Block block = worldObj.getBlock(a, b, c);
|
|
if(block.isNormalCube() && !block.isAir(worldObj, a, b, c)) {
|
|
worldObj.setBlock(a, b, c, ModBlocks.taint, 0, 2);
|
|
}
|
|
}
|
|
}
|
|
@Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.powder_spark_mix, 1); }
|
|
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_taint); }
|
|
}
|
|
|
|
public static class EntityMissileEMP extends EntityMissileTier0 {
|
|
public EntityMissileEMP(World world) { super(world); }
|
|
public EntityMissileEMP(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); }
|
|
@Override public void onMissileImpact(MovingObjectPosition mop) {
|
|
ExplosionNukeGeneric.empBlast(worldObj, (int)posX, (int)posY, (int)posZ, 50);
|
|
EntityEMPBlast wave = new EntityEMPBlast(worldObj, 50);
|
|
wave.posX = posX;
|
|
wave.posY = posY;
|
|
wave.posZ = posZ;
|
|
worldObj.spawnEntityInWorld(wave);
|
|
}
|
|
@Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModBlocks.emp_bomb, 1); }
|
|
@Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_emp); }
|
|
}
|
|
}
|