mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
130 lines
3.5 KiB
Java
130 lines
3.5 KiB
Java
package com.hbm.entity.missile;
|
|
|
|
import com.hbm.blocks.ModBlocks;
|
|
import com.hbm.entity.mob.siege.SiegeTier;
|
|
import com.hbm.explosion.ExplosionLarge;
|
|
import com.hbm.handler.SiegeOrchestrator;
|
|
import com.hbm.packet.AuxParticlePacketNT;
|
|
import com.hbm.packet.PacketDispatcher;
|
|
|
|
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
|
import net.minecraft.entity.projectile.EntityThrowable;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.DamageSource;
|
|
import net.minecraft.util.MovingObjectPosition;
|
|
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
|
|
import net.minecraft.world.World;
|
|
|
|
public class EntitySiegeDropship extends EntityThrowable {
|
|
|
|
public int health = 20;
|
|
|
|
public EntitySiegeDropship(World world) {
|
|
super(world);
|
|
this.health *= Math.pow((SiegeOrchestrator.level + 1), 2);
|
|
this.setSize(0.5F, 1F);
|
|
}
|
|
|
|
public EntitySiegeDropship(World world, double x, double y, double z) {
|
|
super(world, x, y, z);
|
|
this.health *= Math.pow((SiegeOrchestrator.level + 1), 2);
|
|
this.setSize(0.5F, 1F);
|
|
}
|
|
|
|
@Override
|
|
public boolean canBeCollidedWith() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean attackEntityFrom(DamageSource source, float amount) {
|
|
|
|
if(this.isEntityInvulnerable()) {
|
|
return false;
|
|
|
|
} else {
|
|
|
|
if(!this.isDead && !this.worldObj.isRemote) {
|
|
health -= amount;
|
|
|
|
if(this.health <= 0) {
|
|
this.setDead();
|
|
SiegeOrchestrator.levelCounter += SiegeOrchestrator.getTierAddDrop(worldObj);
|
|
|
|
SiegeTier tier = SiegeTier.tiers[SiegeOrchestrator.level];
|
|
if(tier == null)
|
|
tier = SiegeTier.DNT;
|
|
|
|
for(ItemStack drop : tier.dropItem) {
|
|
this.entityDropItem(drop.copy(), 0F);
|
|
}
|
|
|
|
ExplosionLarge.spawnParticles(worldObj, posX, posY + 1, posZ, 10);
|
|
|
|
NBTTagCompound data = new NBTTagCompound();
|
|
data.setString("type", "plasmablast");
|
|
data.setFloat("r", 1F);
|
|
data.setFloat("g", 0F);
|
|
data.setFloat("b", 0F);
|
|
data.setFloat("scale", 20F);
|
|
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX, posY, posZ),
|
|
new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 100));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onUpdate() {
|
|
|
|
this.motionX = 0;
|
|
this.motionY = -0.5;
|
|
this.motionZ = 0;
|
|
|
|
if(!worldObj.isRemote && this.ticksExisted % 2 == 0) {
|
|
NBTTagCompound data = new NBTTagCompound();
|
|
data.setString("type", "plasmablast");
|
|
data.setFloat("r", 0.1F);
|
|
data.setFloat("g", 0.75F);
|
|
data.setFloat("b", 1.0F);
|
|
data.setFloat("scale", 3F);
|
|
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX, posY, posZ),
|
|
new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 100));
|
|
}
|
|
|
|
super.onUpdate();
|
|
}
|
|
|
|
@Override
|
|
protected void onImpact(MovingObjectPosition mop) {
|
|
|
|
if(mop.typeOfHit == MovingObjectType.BLOCK) {
|
|
this.setDead();
|
|
|
|
if(SiegeOrchestrator.enableBaseSpawning(worldObj)) {
|
|
worldObj.setBlock(mop.blockX, mop.blockY, mop.blockZ, ModBlocks.siege_shield);
|
|
} else if(SiegeOrchestrator.enableMobSpawning(worldObj)) {
|
|
SiegeOrchestrator.spawnRandomMob(worldObj, mop.blockX + 0.5, mop.blockY + 1, mop.blockZ + 0.5, null);
|
|
}
|
|
|
|
ExplosionLarge.spawnParticles(worldObj, posX, posY + 1, posZ, 10);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void writeEntityToNBT(NBTTagCompound nbt) {
|
|
super.writeEntityToNBT(nbt);
|
|
nbt.setInteger("health", this.health);
|
|
}
|
|
|
|
@Override
|
|
public void readEntityFromNBT(NBTTagCompound nbt) {
|
|
super.readEntityFromNBT(nbt);
|
|
|
|
this.health = nbt.getInteger("health");
|
|
}
|
|
}
|