
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
235 lines
8.3 KiB
Java
235 lines
8.3 KiB
Java
package net.minecraft.server;
|
|
|
|
import java.util.List;
|
|
|
|
// CraftBukkit start
|
|
import org.bukkit.event.entity.ProjectileHitEvent;
|
|
// CraftBukkit end
|
|
|
|
public abstract class EntityProjectile extends Entity {
|
|
|
|
private int blockX = -1;
|
|
private int blockY = -1;
|
|
private int blockZ = -1;
|
|
private int inBlockId = 0;
|
|
protected boolean inGround = false;
|
|
public int shake = 0;
|
|
public EntityLiving shooter; // CraftBukkit - prot to public
|
|
private int h;
|
|
private int i = 0;
|
|
|
|
public EntityProjectile(World world) {
|
|
super(world);
|
|
this.b(0.25F, 0.25F);
|
|
}
|
|
|
|
protected void b() {}
|
|
|
|
public EntityProjectile(World world, EntityLiving entityliving) {
|
|
super(world);
|
|
this.shooter = entityliving;
|
|
this.b(0.25F, 0.25F);
|
|
this.setPositionRotation(entityliving.locX, entityliving.locY + (double) entityliving.getHeadHeight(), entityliving.locZ, entityliving.yaw, entityliving.pitch);
|
|
this.locX -= (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * 0.16F);
|
|
this.locY -= 0.10000000149011612D;
|
|
this.locZ -= (double) (MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * 0.16F);
|
|
this.setPosition(this.locX, this.locY, this.locZ);
|
|
this.height = 0.0F;
|
|
float f = 0.4F;
|
|
|
|
this.motX = (double) (-MathHelper.sin(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F) * f);
|
|
this.motZ = (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * MathHelper.cos(this.pitch / 180.0F * 3.1415927F) * f);
|
|
this.motY = (double) (-MathHelper.sin((this.pitch + this.d()) / 180.0F * 3.1415927F) * f);
|
|
this.a(this.motX, this.motY, this.motZ, this.c(), 1.0F);
|
|
}
|
|
|
|
public EntityProjectile(World world, double d0, double d1, double d2) {
|
|
super(world);
|
|
this.h = 0;
|
|
this.b(0.25F, 0.25F);
|
|
this.setPosition(d0, d1, d2);
|
|
this.height = 0.0F;
|
|
}
|
|
|
|
protected float c() {
|
|
return 1.5F;
|
|
}
|
|
|
|
protected float d() {
|
|
return 0.0F;
|
|
}
|
|
|
|
public void a(double d0, double d1, double d2, float f, float f1) {
|
|
float f2 = MathHelper.sqrt(d0 * d0 + d1 * d1 + d2 * d2);
|
|
|
|
d0 /= (double) f2;
|
|
d1 /= (double) f2;
|
|
d2 /= (double) f2;
|
|
d0 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
|
|
d1 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
|
|
d2 += this.random.nextGaussian() * 0.007499999832361937D * (double) f1;
|
|
d0 *= (double) f;
|
|
d1 *= (double) f;
|
|
d2 *= (double) f;
|
|
this.motX = d0;
|
|
this.motY = d1;
|
|
this.motZ = d2;
|
|
float f3 = MathHelper.sqrt(d0 * d0 + d2 * d2);
|
|
|
|
this.lastYaw = this.yaw = (float) (Math.atan2(d0, d2) * 180.0D / 3.1415927410125732D);
|
|
this.lastPitch = this.pitch = (float) (Math.atan2(d1, (double) f3) * 180.0D / 3.1415927410125732D);
|
|
this.h = 0;
|
|
}
|
|
|
|
public void F_() {
|
|
this.bL = this.locX;
|
|
this.bM = this.locY;
|
|
this.bN = this.locZ;
|
|
super.F_();
|
|
if (this.shake > 0) {
|
|
--this.shake;
|
|
}
|
|
|
|
if (this.inGround) {
|
|
int i = this.world.getTypeId(this.blockX, this.blockY, this.blockZ);
|
|
|
|
if (i == this.inBlockId) {
|
|
++this.h;
|
|
if (this.h == 1200) {
|
|
this.die();
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
this.inGround = 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.h = 0;
|
|
this.i = 0;
|
|
} else {
|
|
++this.i;
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
if (!this.world.isStatic) {
|
|
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 != this.shooter || this.i >= 5)) {
|
|
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 hitEvent = new ProjectileHitEvent((org.bukkit.entity.Projectile) this.getBukkitEntity());
|
|
org.bukkit.Bukkit.getPluginManager().callEvent(hitEvent);
|
|
}
|
|
// 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.99F;
|
|
float f3 = this.e();
|
|
|
|
if (this.aU()) {
|
|
for (int k = 0; k < 4; ++k) {
|
|
float f4 = 0.25F;
|
|
|
|
this.world.a("bubble", this.locX - this.motX * (double) f4, this.locY - this.motY * (double) f4, this.locZ - this.motZ * (double) f4, this.motX, this.motY, this.motZ);
|
|
}
|
|
|
|
f2 = 0.8F;
|
|
}
|
|
|
|
this.motX *= (double) f2;
|
|
this.motY *= (double) f2;
|
|
this.motZ *= (double) f2;
|
|
this.motY -= (double) f3;
|
|
this.setPosition(this.locX, this.locY, this.locZ);
|
|
}
|
|
|
|
protected float e() {
|
|
return 0.03F;
|
|
}
|
|
|
|
protected abstract void a(MovingObjectPosition movingobjectposition);
|
|
|
|
public void b(NBTTagCompound nbttagcompound) {
|
|
nbttagcompound.setShort("xTile", (short) this.blockX);
|
|
nbttagcompound.setShort("yTile", (short) this.blockY);
|
|
nbttagcompound.setShort("zTile", (short) this.blockZ);
|
|
nbttagcompound.setByte("inTile", (byte) this.inBlockId);
|
|
nbttagcompound.setByte("shake", (byte) this.shake);
|
|
nbttagcompound.setByte("inGround", (byte) (this.inGround ? 1 : 0));
|
|
}
|
|
|
|
public void a(NBTTagCompound nbttagcompound) {
|
|
this.blockX = nbttagcompound.getShort("xTile");
|
|
this.blockY = nbttagcompound.getShort("yTile");
|
|
this.blockZ = nbttagcompound.getShort("zTile");
|
|
this.inBlockId = nbttagcompound.getByte("inTile") & 255;
|
|
this.shake = nbttagcompound.getByte("shake") & 255;
|
|
this.inGround = nbttagcompound.getByte("inGround") == 1;
|
|
}
|
|
|
|
public void a_(EntityHuman entityhuman) {}
|
|
}
|