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");
}
}