That's one heck of a commit you've got there...

I may have got a bit behind with version control. A lot behind, in fact. Maybe I'll go back and split this sometime - then again, I probably won't. But hey, at least it's here!
This commit is contained in:
Electroblob77
2019-08-18 00:04:18 +01:00
parent 2680d02304
commit f37812be3e
1564 changed files with 47652 additions and 12984 deletions
@@ -0,0 +1,106 @@
package electroblob.wizardry.entity.projectile;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.registry.Spells;
import electroblob.wizardry.spell.Spell;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.projectile.EntityLargeFireball;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
/**
* It's like {@link EntityMagicFireball}, but bigger... the wizardry version of vanilla's
* {@link net.minecraft.entity.projectile.EntityLargeFireball}
*/
@Mod.EventBusSubscriber
public class EntityLargeMagicFireball extends EntityMagicFireball {
public static final String EXPLOSION_POWER = "explosion_power";
/** The entity blast multiplier. This is now synced and saved centrally from {@link EntityBomb}. */
public float blastMultiplier = 1.0f;
/** The explosion power of this fireball. If this is -1, the damage for the fireball
* spell will be used instead; this is for when the fireball is not from a spell (i.e. a vanilla fireball replacement). */
protected float explosionPower = -1;
public EntityLargeMagicFireball(World world){
super(world);
this.setSize(1, 1);
}
public void setExplosionPower(float explosionPower){
this.explosionPower = explosionPower;
}
public float getExplosionPower(){
return explosionPower == -1 ? Spells.greater_fireball.getProperty(EXPLOSION_POWER).floatValue() : explosionPower;
}
@Override
public float getDamage(){
return damage == -1 ? Spells.greater_fireball.getProperty(Spell.DAMAGE).floatValue() : damage;
}
@Override
protected void onImpact(RayTraceResult rayTrace){
if(!world.isRemote){
boolean flag = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this.thrower);
this.world.newExplosion(null, this.posX, this.posY, this.posZ, getExplosionPower() * blastMultiplier, flag, flag);
}
super.onImpact(rayTrace);
}
@Override
public void writeSpawnData(ByteBuf buffer){
buffer.writeFloat(blastMultiplier);
super.writeSpawnData(buffer);
}
@Override
public void readSpawnData(ByteBuf buffer){
blastMultiplier = buffer.readFloat();
super.readSpawnData(buffer);
}
@Override
public void readEntityFromNBT(NBTTagCompound nbttagcompound){
super.readEntityFromNBT(nbttagcompound);
blastMultiplier = nbttagcompound.getFloat("blastMultiplier");
}
@Override
public void writeEntityToNBT(NBTTagCompound nbttagcompound){
super.writeEntityToNBT(nbttagcompound);
nbttagcompound.setFloat("blastMultiplier", blastMultiplier);
}
@SubscribeEvent
public static void onEntityJoinWorldEvent(EntityJoinWorldEvent event){
// Replaces all vanilla large fireballs with wizardry ones
if(Wizardry.settings.replaceVanillaFireballs && event.getEntity() instanceof EntityLargeFireball){
event.setCanceled(true);
EntityLargeMagicFireball fireball = new EntityLargeMagicFireball(event.getWorld());
fireball.thrower = ((EntityLargeFireball)event.getEntity()).shootingEntity;
fireball.setPosition(event.getEntity().posX, event.getEntity().posY, event.getEntity().posZ);
fireball.setDamage(6);
// Don't set the burn duration because vanilla large fireballs don't set mobs on fire directly
fireball.setExplosionPower(((EntityLargeFireball)event.getEntity()).explosionPower);
fireball.setLifetime(75);
fireball.motionX = ((EntityLargeFireball)event.getEntity()).accelerationX * ACCELERATION_CONVERSION_FACTOR;
fireball.motionY = ((EntityLargeFireball)event.getEntity()).accelerationY * ACCELERATION_CONVERSION_FACTOR;
fireball.motionZ = ((EntityLargeFireball)event.getEntity()).accelerationZ * ACCELERATION_CONVERSION_FACTOR;
event.getWorld().spawnEntity(fireball);
}
}
}