Paper/src/main/java/net/minecraft/server/EntityFireball.java
Wesley Wolfe b00de5f176 Cleaned up CraftBukkit comments in NMS.
Added newlines at the end of files
Fixed improper line endings on some files
Matched start - end comments
Added some missing comments for diffs
Fixed syntax on some spots
Minimized some diff
Removed some no longer used files
Added comment on some required files with no changes
Fixed imports of items used once
Added imports for items used more than once
2012-07-23 23:55:31 -05:00

275 Zeilen
9.9 KiB
Java

package net.minecraft.server;
import java.util.List;
// CraftBukkit start
import org.bukkit.event.entity.ExplosionPrimeEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
// CraftBukkit end
public class EntityFireball extends Entity {
private int e = -1;
private int f = -1;
private int g = -1;
private int h = 0;
private boolean i = false;
public EntityLiving shooter;
private int j;
private int k = 0;
public double dirX;
public double dirY;
public double dirZ;
public float yield = 1; // CraftBukkit
public boolean isIncendiary = true; // CraftBukkit
public EntityFireball(World world) {
super(world);
this.b(1.0F, 1.0F);
}
protected void b() {}
public EntityFireball(World world, double d0, double d1, double d2, double d3, double d4, double d5) {
super(world);
this.b(1.0F, 1.0F);
this.setPositionRotation(d0, d1, d2, this.yaw, this.pitch);
this.setPosition(d0, d1, d2);
double d6 = (double) MathHelper.sqrt(d3 * d3 + d4 * d4 + d5 * d5);
this.dirX = d3 / d6 * 0.1D;
this.dirY = d4 / d6 * 0.1D;
this.dirZ = d5 / d6 * 0.1D;
}
public EntityFireball(World world, EntityLiving entityliving, double d0, double d1, double d2) {
super(world);
this.shooter = entityliving;
this.b(1.0F, 1.0F);
this.setPositionRotation(entityliving.locX, entityliving.locY, entityliving.locZ, entityliving.yaw, entityliving.pitch);
this.setPosition(this.locX, this.locY, this.locZ);
this.height = 0.0F;
this.motX = this.motY = this.motZ = 0.0D;
// CraftBukkit start - (added setDirection method)
this.setDirection(d0, d1, d2);
}
public void setDirection(double d0, double d1, double d2) {
// CraftBukkit end
d0 += this.random.nextGaussian() * 0.4D;
d1 += this.random.nextGaussian() * 0.4D;
d2 += this.random.nextGaussian() * 0.4D;
double d3 = (double) MathHelper.sqrt(d0 * d0 + d1 * d1 + d2 * d2);
this.dirX = d0 / d3 * 0.1D;
this.dirY = d1 / d3 * 0.1D;
this.dirZ = d2 / d3 * 0.1D;
}
public void F_() {
if (!this.world.isStatic && (this.shooter != null && this.shooter.dead || !this.world.isLoaded((int) this.locX, (int) this.locY, (int) this.locZ))) {
this.die();
} else {
super.F_();
this.setOnFire(1);
if (this.i) {
int i = this.world.getTypeId(this.e, this.f, this.g);
if (i == this.h) {
++this.j;
if (this.j == 600) {
this.die();
}
return;
}
this.i = false;
this.motX *= (double) (this.random.nextFloat() * 0.2F);
this.motY *= (double) (this.random.nextFloat() * 0.2F);
this.motZ *= (double) (this.random.nextFloat() * 0.2F);
this.j = 0;
this.k = 0;
} else {
++this.k;
}
Vec3D vec3d = Vec3D.create(this.locX, this.locY, this.locZ);
Vec3D vec3d1 = Vec3D.create(this.locX + this.motX, this.locY + this.motY, this.locZ + this.motZ);
MovingObjectPosition movingobjectposition = this.world.a(vec3d, vec3d1);
vec3d = Vec3D.create(this.locX, this.locY, this.locZ);
vec3d1 = Vec3D.create(this.locX + this.motX, this.locY + this.motY, this.locZ + this.motZ);
if (movingobjectposition != null) {
vec3d1 = Vec3D.create(movingobjectposition.pos.a, movingobjectposition.pos.b, movingobjectposition.pos.c);
}
Entity entity = null;
List list = this.world.getEntities(this, this.boundingBox.a(this.motX, this.motY, this.motZ).grow(1.0D, 1.0D, 1.0D));
double d0 = 0.0D;
for (int j = 0; j < list.size(); ++j) {
Entity entity1 = (Entity) list.get(j);
if (entity1.o_() && (!entity1.a_((Entity) this.shooter) || this.k >= 25)) {
float f = 0.3F;
AxisAlignedBB axisalignedbb = entity1.boundingBox.grow((double) f, (double) f, (double) f);
MovingObjectPosition movingobjectposition1 = axisalignedbb.a(vec3d, vec3d1);
if (movingobjectposition1 != null) {
double d1 = vec3d.distanceSquared(movingobjectposition1.pos); // CraftBukkit - distance efficiency
if (d1 < d0 || d0 == 0.0D) {
entity = entity1;
d0 = d1;
}
}
}
}
if (entity != null) {
movingobjectposition = new MovingObjectPosition(entity);
}
if (movingobjectposition != null) {
this.a(movingobjectposition);
// CraftBukkit start
if (this.dead) {
ProjectileHitEvent phe = new ProjectileHitEvent((org.bukkit.entity.Projectile) this.getBukkitEntity());
this.world.getServer().getPluginManager().callEvent(phe);
}
// CraftBukkit end
}
this.locX += this.motX;
this.locY += this.motY;
this.locZ += this.motZ;
float f1 = MathHelper.sqrt(this.motX * this.motX + this.motZ * this.motZ);
this.yaw = (float) (Math.atan2(this.motX, this.motZ) * 180.0D / 3.1415927410125732D);
for (this.pitch = (float) (Math.atan2(this.motY, (double) f1) * 180.0D / 3.1415927410125732D); this.pitch - this.lastPitch < -180.0F; this.lastPitch -= 360.0F) {
;
}
while (this.pitch - this.lastPitch >= 180.0F) {
this.lastPitch += 360.0F;
}
while (this.yaw - this.lastYaw < -180.0F) {
this.lastYaw -= 360.0F;
}
while (this.yaw - this.lastYaw >= 180.0F) {
this.lastYaw += 360.0F;
}
this.pitch = this.lastPitch + (this.pitch - this.lastPitch) * 0.2F;
this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F;
float f2 = 0.95F;
if (this.aU()) {
for (int k = 0; k < 4; ++k) {
float f3 = 0.25F;
this.world.a("bubble", this.locX - this.motX * (double) f3, this.locY - this.motY * (double) f3, this.locZ - this.motZ * (double) f3, this.motX, this.motY, this.motZ);
}
f2 = 0.8F;
}
this.motX += this.dirX;
this.motY += this.dirY;
this.motZ += this.dirZ;
this.motX *= (double) f2;
this.motY *= (double) f2;
this.motZ *= (double) f2;
this.world.a("smoke", this.locX, this.locY + 0.5D, this.locZ, 0.0D, 0.0D, 0.0D);
this.setPosition(this.locX, this.locY, this.locZ);
}
}
protected void a(MovingObjectPosition movingobjectposition) {
if (!this.world.isStatic) {
if (movingobjectposition.entity != null && movingobjectposition.entity.damageEntity(DamageSource.fireball(this, this.shooter), 4)) {
;
}
// CraftBukkit start
ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) org.bukkit.craftbukkit.entity.CraftEntity.getEntity(this.world.getServer(), this));
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
// give 'this' instead of (Entity) null so we know what causes the damage
this.world.createExplosion(this, this.locX, this.locY, this.locZ, event.getRadius(), event.getFire());
}
// CraftBukkit end
this.die();
}
}
public void b(NBTTagCompound nbttagcompound) {
nbttagcompound.setShort("xTile", (short) this.e);
nbttagcompound.setShort("yTile", (short) this.f);
nbttagcompound.setShort("zTile", (short) this.g);
nbttagcompound.setByte("inTile", (byte) this.h);
nbttagcompound.setByte("inGround", (byte) (this.i ? 1 : 0));
// CraftBukkit
nbttagcompound.set("Direction", this.a(new double[] { this.dirX, this.dirY, this.dirZ}));
}
public void a(NBTTagCompound nbttagcompound) {
this.e = nbttagcompound.getShort("xTile");
this.f = nbttagcompound.getShort("yTile");
this.g = nbttagcompound.getShort("zTile");
this.h = nbttagcompound.getByte("inTile") & 255;
this.i = nbttagcompound.getByte("inGround") == 1;
// CraftBukkit start
if (nbttagcompound.hasKey("Direction")) {
NBTTagList nbttaglist1 = nbttagcompound.getList("Direction");
this.dirX = ((NBTTagDouble) nbttaglist1.get(0)).data;
this.dirY = ((NBTTagDouble) nbttaglist1.get(1)).data;
this.dirZ = ((NBTTagDouble) nbttaglist1.get(2)).data;
} else {
this.die();
}
// CraftBukkit end
}
public boolean o_() {
return true;
}
public float j_() {
return 1.0F;
}
public boolean damageEntity(DamageSource damagesource, int i) {
this.aW();
if (damagesource.getEntity() != null) {
Vec3D vec3d = damagesource.getEntity().aJ();
if (vec3d != null) {
this.motX = vec3d.a;
this.motY = vec3d.b;
this.motZ = vec3d.c;
this.dirX = this.motX * 0.1D;
this.dirY = this.motY * 0.1D;
this.dirZ = this.motZ * 0.1D;
}
if (damagesource.getEntity() instanceof EntityLiving) {
this.shooter = (EntityLiving) damagesource.getEntity();
}
return true;
} else {
return false;
}
}
public float b(float f) {
return 1.0F;
}
}