BloodMagic/src/main/java/WayofTime/bloodmagic/entity/projectile/EntityMeteor.java

134 lines
4.2 KiB
Java
Raw Normal View History

package WayofTime.bloodmagic.entity.projectile;
import WayofTime.bloodmagic.apibutnotreally.Constants;
2017-08-15 21:30:48 -07:00
import WayofTime.bloodmagic.meteor.MeteorRegistry;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.IThrowableEntity;
2017-08-15 21:30:48 -07:00
public class EntityMeteor extends EntityThrowable implements IThrowableEntity {
public ItemStack meteorStack = ItemStack.EMPTY;
protected int ticksInAir = 0;
protected int maxTicksInAir = 600;
protected double radiusModifier = 1;
protected double explosionModifier = 1;
protected double fillerChance = 0;
2017-08-15 21:30:48 -07:00
public EntityMeteor(World world) {
super(world);
}
2017-08-15 21:30:48 -07:00
public EntityMeteor(World world, double x, double y, double z, double velX, double velY, double velZ, double radiusModifier, double explosionModifier, double fillerChance) {
super(world);
this.setSize(1F, 1F);
this.setPosition(x, y, z);
motionX = velX;
motionY = velY;
motionZ = velZ;
this.radiusModifier = radiusModifier;
this.explosionModifier = explosionModifier;
this.fillerChance = fillerChance;
}
@Override
2017-08-15 21:30:48 -07:00
protected float getGravityVelocity() {
return 0.03F;
}
@Override
2017-08-15 21:30:48 -07:00
public void onUpdate() {
super.onUpdate();
2017-08-15 21:30:48 -07:00
if (this.ticksExisted > this.maxTicksInAir) {
setDead();
}
}
@Override
2017-08-15 21:30:48 -07:00
protected void onImpact(RayTraceResult mop) {
if (mop.typeOfHit == RayTraceResult.Type.ENTITY && mop.entityHit != null) {
this.onImpact(mop.entityHit);
2017-08-15 21:30:48 -07:00
} else if (mop.typeOfHit == RayTraceResult.Type.BLOCK) {
generateMeteor(mop.getBlockPos());
}
this.setDead();
}
2017-08-15 21:30:48 -07:00
protected void onImpact(Entity mop) {
if (mop instanceof EntityLivingBase) {
doDamage(100, mop);
}
generateMeteor(mop.getPosition());
// spawnHitParticles("magicCrit", 8);
this.setDead();
}
2017-08-15 21:30:48 -07:00
protected void doDamage(int i, Entity mop) {
mop.attackEntityFrom(this.getDamageSource(), i);
}
2017-08-15 21:30:48 -07:00
public void generateMeteor(BlockPos pos) {
2016-12-12 19:56:36 -08:00
MeteorRegistry.generateMeteorForItem(meteorStack, getEntityWorld(), pos, Blocks.STONE.getDefaultState(), radiusModifier, explosionModifier, fillerChance);
}
2017-08-15 21:30:48 -07:00
public DamageSource getDamageSource() {
2016-12-12 19:56:36 -08:00
return DamageSource.ANVIL;
}
@Override
2017-08-15 21:30:48 -07:00
public void writeEntityToNBT(NBTTagCompound nbt) {
super.writeEntityToNBT(nbt);
nbt.setInteger(Constants.NBT.PROJECTILE_TICKS_IN_AIR, ticksInAir);
nbt.setInteger(Constants.NBT.PROJECTILE_MAX_TICKS_IN_AIR, maxTicksInAir);
nbt.setDouble("radiusModifier", radiusModifier);
nbt.setDouble("explosionModifier", explosionModifier);
nbt.setDouble("fillerChance", fillerChance);
2017-03-11 16:09:57 -08:00
if (!meteorStack.isEmpty())
meteorStack.writeToNBT(nbt);
2017-03-11 16:09:57 -08:00
else
nbt.setBoolean("noItem", true);
}
@Override
2017-08-15 21:30:48 -07:00
public void readEntityFromNBT(NBTTagCompound nbt) {
super.readEntityFromNBT(nbt);
ticksInAir = nbt.getInteger(Constants.NBT.PROJECTILE_TICKS_IN_AIR);
maxTicksInAir = nbt.getInteger(Constants.NBT.PROJECTILE_MAX_TICKS_IN_AIR);
radiusModifier = nbt.getDouble("radiusModifier");
explosionModifier = nbt.getDouble("explosionModifier");
fillerChance = nbt.getDouble("fillerChance");
2017-03-11 16:09:57 -08:00
if (!nbt.hasKey("noItem"))
meteorStack = new ItemStack(nbt);
else
meteorStack = ItemStack.EMPTY;
}
@Override
2017-08-15 21:30:48 -07:00
protected boolean canTriggerWalking() {
return false;
}
@Override
2017-08-15 21:30:48 -07:00
public boolean canBeCollidedWith() {
return false;
}
@Override
2017-08-15 21:30:48 -07:00
public void setThrower(Entity entity) {
}
public void setMeteorStack(ItemStack meteorStack) {
this.meteorStack = meteorStack;
}
}