2011-01-03 12:37:41 +01:00
|
|
|
package net.minecraft.server;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Random;
|
2011-02-21 23:30:01 +01:00
|
|
|
|
|
|
|
// CraftBukkit start
|
2011-01-31 23:25:27 +01:00
|
|
|
import org.bukkit.block.BlockFace;
|
2011-02-01 11:02:43 +01:00
|
|
|
import org.bukkit.craftbukkit.entity.CraftVehicle;
|
|
|
|
import org.bukkit.entity.LivingEntity;
|
2011-01-31 23:25:27 +01:00
|
|
|
import org.bukkit.entity.Vehicle;
|
|
|
|
import org.bukkit.event.vehicle.VehicleBlockCollisionEvent;
|
2011-02-01 11:02:43 +01:00
|
|
|
import org.bukkit.event.vehicle.VehicleExitEvent;
|
2011-02-21 23:30:01 +01:00
|
|
|
import org.bukkit.craftbukkit.CraftServer;
|
|
|
|
import org.bukkit.event.entity.EntityCombustEvent;
|
|
|
|
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
|
|
|
import org.bukkit.event.entity.EntityDamageEvent;
|
|
|
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|
|
|
// CraftBukkit end
|
2011-01-03 12:37:41 +01:00
|
|
|
|
|
|
|
public abstract class Entity {
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
private static int entityCount = 0;
|
|
|
|
public int id;
|
2011-02-23 03:37:56 +01:00
|
|
|
public double aB;
|
|
|
|
public boolean aC;
|
2011-01-29 22:50:29 +01:00
|
|
|
public Entity passenger;
|
|
|
|
public Entity vehicle;
|
|
|
|
public World world;
|
|
|
|
public double lastX;
|
|
|
|
public double lastY;
|
|
|
|
public double lastZ;
|
|
|
|
public double locX;
|
|
|
|
public double locY;
|
|
|
|
public double locZ;
|
|
|
|
public double motX;
|
|
|
|
public double motY;
|
|
|
|
public double motZ;
|
|
|
|
public float yaw;
|
|
|
|
public float pitch;
|
|
|
|
public float lastYaw;
|
|
|
|
public float lastPitch;
|
|
|
|
public final AxisAlignedBB boundingBox;
|
|
|
|
public boolean onGround;
|
2011-02-23 03:37:56 +01:00
|
|
|
public boolean aV;
|
|
|
|
public boolean aW;
|
|
|
|
public boolean aX;
|
|
|
|
public boolean aY;
|
|
|
|
public boolean aZ;
|
2011-01-29 22:50:29 +01:00
|
|
|
public boolean dead;
|
|
|
|
public float height;
|
|
|
|
public float length;
|
|
|
|
public float width;
|
2011-02-23 03:37:56 +01:00
|
|
|
public float be;
|
|
|
|
public float bf;
|
|
|
|
protected boolean bg;
|
2011-01-29 22:50:29 +01:00
|
|
|
protected float fallDistance;
|
2011-01-03 12:37:41 +01:00
|
|
|
private int b;
|
2011-02-23 03:37:56 +01:00
|
|
|
public double bi;
|
|
|
|
public double bj;
|
|
|
|
public double bk;
|
|
|
|
public float bl;
|
|
|
|
public float bm;
|
|
|
|
public boolean bn;
|
|
|
|
public float bo;
|
|
|
|
public boolean bp;
|
2011-01-29 22:50:29 +01:00
|
|
|
protected Random random;
|
|
|
|
public int ticksLived;
|
|
|
|
public int maxFireTicks;
|
|
|
|
public int fireTicks;
|
2011-02-23 13:56:36 +01:00
|
|
|
public int maxAirTicks; // CraftBukkit -- protected->public
|
2011-02-23 03:37:56 +01:00
|
|
|
protected boolean bv;
|
2011-01-29 22:50:29 +01:00
|
|
|
public int noDamageTicks;
|
|
|
|
public int airTicks;
|
|
|
|
private boolean justCreated;
|
2011-02-23 03:37:56 +01:00
|
|
|
protected boolean by;
|
2011-01-29 22:50:29 +01:00
|
|
|
protected DataWatcher datawatcher;
|
2011-01-03 12:37:41 +01:00
|
|
|
private double d;
|
|
|
|
private double e;
|
2011-02-23 03:37:56 +01:00
|
|
|
public boolean bA;
|
2011-01-29 22:50:29 +01:00
|
|
|
public int chunkX;
|
2011-02-23 03:37:56 +01:00
|
|
|
public int bC;
|
2011-01-29 22:50:29 +01:00
|
|
|
public int chunkZ;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
|
|
|
public Entity(World world) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.id = entityCount++;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.aB = 1.0D;
|
|
|
|
this.aC = false;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.boundingBox = AxisAlignedBB.a(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
|
|
|
|
this.onGround = false;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.aX = false;
|
|
|
|
this.aY = false;
|
|
|
|
this.aZ = true;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.dead = false;
|
|
|
|
this.height = 0.0F;
|
|
|
|
this.length = 0.6F;
|
|
|
|
this.width = 1.8F;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.be = 0.0F;
|
|
|
|
this.bf = 0.0F;
|
|
|
|
this.bg = true;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.fallDistance = 0.0F;
|
|
|
|
this.b = 1;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.bl = 0.0F;
|
|
|
|
this.bm = 0.0F;
|
|
|
|
this.bn = false;
|
|
|
|
this.bo = 0.0F;
|
|
|
|
this.bp = false;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.random = new Random();
|
|
|
|
this.ticksLived = 0;
|
|
|
|
this.maxFireTicks = 1;
|
|
|
|
this.fireTicks = 0;
|
|
|
|
this.maxAirTicks = 300;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.bv = false;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.noDamageTicks = 0;
|
|
|
|
this.airTicks = 300;
|
|
|
|
this.justCreated = true;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.by = false;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.datawatcher = new DataWatcher();
|
2011-02-23 03:37:56 +01:00
|
|
|
this.bA = false;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.world = world;
|
|
|
|
this.a(0.0D, 0.0D, 0.0D);
|
|
|
|
this.datawatcher.a(0, Byte.valueOf((byte) 0));
|
|
|
|
this.a();
|
2011-01-14 14:31:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
protected abstract void a();
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public DataWatcher O() {
|
2011-01-29 22:50:29 +01:00
|
|
|
return this.datawatcher;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public boolean equals(Object object) {
|
|
|
|
return object instanceof Entity ? ((Entity) object).id == this.id : false;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public int hashCode() {
|
2011-01-29 22:50:29 +01:00
|
|
|
return this.id;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public void C() {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.dead = true;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
protected void a(float f, float f1) {
|
|
|
|
this.length = f;
|
|
|
|
this.width = f1;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
protected void c(float f, float f1) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.yaw = f;
|
|
|
|
this.pitch = f1;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public void a(double d0, double d1, double d2) {
|
|
|
|
this.locX = d0;
|
|
|
|
this.locY = d1;
|
|
|
|
this.locZ = d2;
|
|
|
|
float f = this.length / 2.0F;
|
|
|
|
float f1 = this.width;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
this.boundingBox.c(d0 - (double) f, d1 - (double) this.height + (double) this.bl, d2 - (double) f, d0 + (double) f, d1 - (double) this.height + (double) this.bl + (double) f1, d2 + (double) f);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public void f_() {
|
|
|
|
this.H();
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public void H() {
|
2011-01-29 22:50:29 +01:00
|
|
|
if (this.vehicle != null && this.vehicle.dead) {
|
|
|
|
this.vehicle = null;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
++this.ticksLived;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.be = this.bf;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.lastX = this.locX;
|
|
|
|
this.lastY = this.locY;
|
|
|
|
this.lastZ = this.locZ;
|
|
|
|
this.lastPitch = this.pitch;
|
|
|
|
this.lastYaw = this.yaw;
|
2011-02-23 03:37:56 +01:00
|
|
|
if (this.g_()) {
|
|
|
|
if (!this.bv && !this.justCreated) {
|
2011-01-29 22:50:29 +01:00
|
|
|
float f = MathHelper.a(this.motX * this.motX * 0.20000000298023224D + this.motY * this.motY + this.motZ * this.motZ * 0.20000000298023224D) * 0.2F;
|
|
|
|
|
|
|
|
if (f > 1.0F) {
|
|
|
|
f = 1.0F;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
this.world.a(this, "random.splash", f, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.4F);
|
|
|
|
float f1 = (float) MathHelper.b(this.boundingBox.b);
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
int i;
|
|
|
|
float f2;
|
|
|
|
float f3;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
for (i = 0; (float) i < 1.0F + this.length * 20.0F; ++i) {
|
|
|
|
f2 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
|
|
|
|
f3 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
|
|
|
|
this.world.a("bubble", this.locX + (double) f2, (double) (f1 + 1.0F), this.locZ + (double) f3, this.motX, this.motY - (double) (this.random.nextFloat() * 0.2F), this.motZ);
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
for (i = 0; (float) i < 1.0F + this.length * 20.0F; ++i) {
|
|
|
|
f2 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
|
|
|
|
f3 = (this.random.nextFloat() * 2.0F - 1.0F) * this.length;
|
|
|
|
this.world.a("splash", this.locX + (double) f2, (double) (f1 + 1.0F), this.locZ + (double) f3, this.motX, this.motY, this.motZ);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
this.fallDistance = 0.0F;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.bv = true;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.fireTicks = 0;
|
2011-01-03 12:37:41 +01:00
|
|
|
} else {
|
2011-02-23 03:37:56 +01:00
|
|
|
this.bv = false;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
if (this.world.isStatic) {
|
|
|
|
this.fireTicks = 0;
|
|
|
|
} else if (this.fireTicks > 0) {
|
2011-02-23 03:37:56 +01:00
|
|
|
if (this.by) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.fireTicks -= 4;
|
|
|
|
if (this.fireTicks < 0) {
|
|
|
|
this.fireTicks = 0;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
} else {
|
2011-01-29 22:50:29 +01:00
|
|
|
if (this.fireTicks % 20 == 0) {
|
2011-01-12 06:48:19 +01:00
|
|
|
// CraftBukkit start
|
2011-01-19 09:07:56 +01:00
|
|
|
// TODO: this event spams!
|
2011-02-23 13:56:36 +01:00
|
|
|
if (this instanceof EntityLiving) {
|
2011-01-29 22:50:29 +01:00
|
|
|
CraftServer server = ((WorldServer) this.world).getServer();
|
2011-01-18 06:30:01 +01:00
|
|
|
org.bukkit.entity.Entity damagee = this.getBukkitEntity();
|
2011-01-31 22:50:28 +01:00
|
|
|
DamageCause damageType = EntityDamageEvent.DamageCause.FIRE_TICK;
|
2011-01-18 06:30:01 +01:00
|
|
|
int damageDone = 1;
|
2011-01-12 06:48:19 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
EntityDamageEvent event = new EntityDamageEvent(damagee, damageType, damageDone);
|
|
|
|
server.getPluginManager().callEvent(event);
|
2011-01-12 06:48:19 +01:00
|
|
|
|
2011-02-23 13:56:36 +01:00
|
|
|
if (!event.isCancelled()) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.a((Entity) null, event.getDamage());
|
2011-01-12 06:48:19 +01:00
|
|
|
}
|
|
|
|
} else {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.a((Entity) null, 1);
|
2011-01-12 06:48:19 +01:00
|
|
|
}
|
|
|
|
// CraftBukkit end
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
--this.fireTicks;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
if (this.Q()) {
|
|
|
|
this.P();
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
if (this.locY < -64.0D) {
|
2011-02-23 03:37:56 +01:00
|
|
|
this.M();
|
2011-01-14 14:31:10 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
if (!this.world.isStatic) {
|
|
|
|
this.a(0, this.fireTicks > 0);
|
|
|
|
this.a(2, this.vehicle != null);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
this.justCreated = false;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
protected void P() {
|
|
|
|
if (!this.by) {
|
2011-02-23 13:56:36 +01:00
|
|
|
// CraftBukkit start -- TODO: this event spams!
|
|
|
|
if (this instanceof EntityLiving) {
|
2011-01-29 22:50:29 +01:00
|
|
|
CraftServer server = ((WorldServer) this.world).getServer();
|
2011-01-19 09:07:56 +01:00
|
|
|
// TODO: shouldn't be sending null for the block.
|
2011-02-23 13:56:36 +01:00
|
|
|
org.bukkit.block.Block damager = null; // ((WorldServer) this.l).getWorld().getBlockAt(i, j, k);
|
2011-01-18 06:30:01 +01:00
|
|
|
org.bukkit.entity.Entity damagee = this.getBukkitEntity();
|
|
|
|
DamageCause damageType = EntityDamageEvent.DamageCause.LAVA;
|
|
|
|
int damageDone = 4;
|
2011-01-12 06:48:19 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
EntityDamageByBlockEvent event = new EntityDamageByBlockEvent(damager, damagee, damageType, damageDone);
|
|
|
|
server.getPluginManager().callEvent(event);
|
2011-02-23 13:56:36 +01:00
|
|
|
|
|
|
|
if (!event.isCancelled()) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.a((Entity) null, event.getDamage());
|
2011-01-12 06:48:19 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 13:56:36 +01:00
|
|
|
if (this.fireTicks <= 0) {
|
2011-01-18 06:30:01 +01:00
|
|
|
// not on fire yet
|
2011-03-26 22:32:56 +01:00
|
|
|
EntityCombustEvent combustEvent = new EntityCombustEvent(damagee);
|
2011-01-29 22:50:29 +01:00
|
|
|
server.getPluginManager().callEvent(combustEvent);
|
2011-02-23 13:56:36 +01:00
|
|
|
if (!combustEvent.isCancelled()) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.fireTicks = 600;
|
2011-01-18 06:30:01 +01:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// reset fire level back to max
|
2011-01-29 22:50:29 +01:00
|
|
|
this.fireTicks = 600;
|
2011-01-12 06:48:19 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
return;
|
2011-01-12 06:48:19 +01:00
|
|
|
}
|
|
|
|
// CraftBukkit end
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
this.a((Entity) null, 4);
|
|
|
|
this.fireTicks = 600;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
protected void M() {
|
|
|
|
this.C();
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public boolean b(double d0, double d1, double d2) {
|
|
|
|
AxisAlignedBB axisalignedbb = this.boundingBox.c(d0, d1, d2);
|
|
|
|
List list = this.world.a(this, axisalignedbb);
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
return list.size() > 0 ? false : !this.world.b(axisalignedbb);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public void c(double d0, double d1, double d2) {
|
2011-02-23 03:37:56 +01:00
|
|
|
if (this.bn) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.boundingBox.d(d0, d1, d2);
|
|
|
|
this.locX = (this.boundingBox.a + this.boundingBox.d) / 2.0D;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.locY = this.boundingBox.b + (double) this.height - (double) this.bl;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.locZ = (this.boundingBox.c + this.boundingBox.f) / 2.0D;
|
|
|
|
} else {
|
|
|
|
double d3 = this.locX;
|
|
|
|
double d4 = this.locZ;
|
|
|
|
double d5 = d0;
|
|
|
|
double d6 = d1;
|
|
|
|
double d7 = d2;
|
|
|
|
AxisAlignedBB axisalignedbb = this.boundingBox.b();
|
2011-02-23 03:37:56 +01:00
|
|
|
boolean flag = this.onGround && this.U();
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
if (flag) {
|
|
|
|
double d8;
|
|
|
|
|
|
|
|
for (d8 = 0.05D; d0 != 0.0D && this.world.a(this, this.boundingBox.c(d0, -1.0D, 0.0D)).size() == 0; d5 = d0) {
|
|
|
|
if (d0 < d8 && d0 >= -d8) {
|
|
|
|
d0 = 0.0D;
|
|
|
|
} else if (d0 > 0.0D) {
|
|
|
|
d0 -= d8;
|
|
|
|
} else {
|
|
|
|
d0 += d8;
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
for (; d2 != 0.0D && this.world.a(this, this.boundingBox.c(0.0D, -1.0D, d2)).size() == 0; d7 = d2) {
|
|
|
|
if (d2 < d8 && d2 >= -d8) {
|
|
|
|
d2 = 0.0D;
|
|
|
|
} else if (d2 > 0.0D) {
|
|
|
|
d2 -= d8;
|
|
|
|
} else {
|
|
|
|
d2 += d8;
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
List list = this.world.a(this, this.boundingBox.a(d0, d1, d2));
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
for (int i = 0; i < list.size(); ++i) {
|
|
|
|
d1 = ((AxisAlignedBB) list.get(i)).b(this.boundingBox, d1);
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
this.boundingBox.d(0.0D, d1, 0.0D);
|
2011-02-23 03:37:56 +01:00
|
|
|
if (!this.aZ && d6 != d1) {
|
2011-01-29 22:50:29 +01:00
|
|
|
d2 = 0.0D;
|
|
|
|
d1 = 0.0D;
|
|
|
|
d0 = 0.0D;
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
boolean flag1 = this.onGround || d6 != d1 && d6 < 0.0D;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
int j;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
for (j = 0; j < list.size(); ++j) {
|
|
|
|
d0 = ((AxisAlignedBB) list.get(j)).a(this.boundingBox, d0);
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
this.boundingBox.d(d0, 0.0D, 0.0D);
|
2011-02-23 03:37:56 +01:00
|
|
|
if (!this.aZ && d5 != d0) {
|
2011-01-29 22:50:29 +01:00
|
|
|
d2 = 0.0D;
|
|
|
|
d1 = 0.0D;
|
|
|
|
d0 = 0.0D;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
for (j = 0; j < list.size(); ++j) {
|
|
|
|
d2 = ((AxisAlignedBB) list.get(j)).c(this.boundingBox, d2);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
this.boundingBox.d(0.0D, 0.0D, d2);
|
2011-02-23 03:37:56 +01:00
|
|
|
if (!this.aZ && d7 != d2) {
|
2011-01-29 22:50:29 +01:00
|
|
|
d2 = 0.0D;
|
|
|
|
d1 = 0.0D;
|
|
|
|
d0 = 0.0D;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
double d9;
|
|
|
|
double d10;
|
|
|
|
int k;
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
if (this.bm > 0.0F && flag1 && this.bl < 0.05F && (d5 != d0 || d7 != d2)) {
|
2011-01-29 22:50:29 +01:00
|
|
|
d9 = d0;
|
|
|
|
d10 = d1;
|
|
|
|
double d11 = d2;
|
|
|
|
|
|
|
|
d0 = d5;
|
2011-02-23 03:37:56 +01:00
|
|
|
d1 = (double) this.bm;
|
2011-01-29 22:50:29 +01:00
|
|
|
d2 = d7;
|
|
|
|
AxisAlignedBB axisalignedbb1 = this.boundingBox.b();
|
|
|
|
|
|
|
|
this.boundingBox.b(axisalignedbb);
|
|
|
|
list = this.world.a(this, this.boundingBox.a(d5, d1, d7));
|
|
|
|
|
|
|
|
for (k = 0; k < list.size(); ++k) {
|
|
|
|
d1 = ((AxisAlignedBB) list.get(k)).b(this.boundingBox, d1);
|
|
|
|
}
|
|
|
|
|
|
|
|
this.boundingBox.d(0.0D, d1, 0.0D);
|
2011-02-23 03:37:56 +01:00
|
|
|
if (!this.aZ && d6 != d1) {
|
2011-01-29 22:50:29 +01:00
|
|
|
d2 = 0.0D;
|
|
|
|
d1 = 0.0D;
|
|
|
|
d0 = 0.0D;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (k = 0; k < list.size(); ++k) {
|
|
|
|
d0 = ((AxisAlignedBB) list.get(k)).a(this.boundingBox, d0);
|
|
|
|
}
|
|
|
|
|
|
|
|
this.boundingBox.d(d0, 0.0D, 0.0D);
|
2011-02-23 03:37:56 +01:00
|
|
|
if (!this.aZ && d5 != d0) {
|
2011-01-29 22:50:29 +01:00
|
|
|
d2 = 0.0D;
|
|
|
|
d1 = 0.0D;
|
|
|
|
d0 = 0.0D;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (k = 0; k < list.size(); ++k) {
|
|
|
|
d2 = ((AxisAlignedBB) list.get(k)).c(this.boundingBox, d2);
|
|
|
|
}
|
|
|
|
|
|
|
|
this.boundingBox.d(0.0D, 0.0D, d2);
|
2011-02-23 03:37:56 +01:00
|
|
|
if (!this.aZ && d7 != d2) {
|
2011-01-29 22:50:29 +01:00
|
|
|
d2 = 0.0D;
|
|
|
|
d1 = 0.0D;
|
|
|
|
d0 = 0.0D;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (d9 * d9 + d11 * d11 >= d0 * d0 + d2 * d2) {
|
|
|
|
d0 = d9;
|
|
|
|
d1 = d10;
|
|
|
|
d2 = d11;
|
|
|
|
this.boundingBox.b(axisalignedbb1);
|
|
|
|
} else {
|
2011-02-23 03:37:56 +01:00
|
|
|
this.bl = (float) ((double) this.bl + 0.5D);
|
2011-01-29 22:50:29 +01:00
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
this.locX = (this.boundingBox.a + this.boundingBox.d) / 2.0D;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.locY = this.boundingBox.b + (double) this.height - (double) this.bl;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.locZ = (this.boundingBox.c + this.boundingBox.f) / 2.0D;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.aV = d5 != d0 || d7 != d2;
|
|
|
|
this.aW = d6 != d1;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.onGround = d6 != d1 && d6 < 0.0D;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.aX = this.aV || this.aW;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.a(d1, this.onGround);
|
|
|
|
if (d5 != d0) {
|
|
|
|
this.motX = 0.0D;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
if (d6 != d1) {
|
|
|
|
this.motY = 0.0D;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
if (d7 != d2) {
|
|
|
|
this.motZ = 0.0D;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
d9 = this.locX - d3;
|
|
|
|
d10 = this.locZ - d4;
|
|
|
|
int l;
|
|
|
|
int i1;
|
|
|
|
int j1;
|
|
|
|
|
2011-02-23 13:56:36 +01:00
|
|
|
// CraftBukkit start
|
2011-02-25 18:47:12 +01:00
|
|
|
if ((this.aV) && (getBukkitEntity() instanceof Vehicle)) {
|
2011-02-23 13:56:36 +01:00
|
|
|
Vehicle vehicle = (Vehicle) getBukkitEntity();
|
|
|
|
org.bukkit.World wrld = ((WorldServer) world).getWorld();
|
2011-01-31 23:25:27 +01:00
|
|
|
org.bukkit.block.Block block = wrld.getBlockAt(MathHelper.b(locX), MathHelper.b(locY - 0.20000000298023224D - (double) this.height), MathHelper.b(locZ));
|
|
|
|
|
|
|
|
if (d5 > d0) {
|
|
|
|
block = block.getFace(BlockFace.SOUTH);
|
|
|
|
} else if (d5 < d0) {
|
|
|
|
block = block.getFace(BlockFace.NORTH);
|
|
|
|
} else if (d7 > d2) {
|
|
|
|
block = block.getFace(BlockFace.WEST);
|
|
|
|
} else if (d7 < d2) {
|
|
|
|
block = block.getFace(BlockFace.EAST);
|
|
|
|
}
|
|
|
|
|
2011-03-26 22:32:56 +01:00
|
|
|
VehicleBlockCollisionEvent event = new VehicleBlockCollisionEvent(vehicle, block);
|
2011-02-23 03:37:56 +01:00
|
|
|
((WorldServer) world).getServer().getPluginManager().callEvent(event);
|
2011-01-31 23:25:27 +01:00
|
|
|
}
|
2011-02-23 13:56:36 +01:00
|
|
|
// CraftBukkit end
|
2011-01-31 23:25:27 +01:00
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
if (this.bg && !flag) {
|
|
|
|
this.bf = (float) ((double) this.bf + (double) MathHelper.a(d9 * d9 + d10 * d10) * 0.6D);
|
2011-01-29 22:50:29 +01:00
|
|
|
l = MathHelper.b(this.locX);
|
|
|
|
i1 = MathHelper.b(this.locY - 0.20000000298023224D - (double) this.height);
|
|
|
|
j1 = MathHelper.b(this.locZ);
|
|
|
|
k = this.world.getTypeId(l, i1, j1);
|
2011-02-23 03:37:56 +01:00
|
|
|
if (this.bf > (float) this.b && k > 0) {
|
2011-01-29 22:50:29 +01:00
|
|
|
++this.b;
|
|
|
|
StepSound stepsound = Block.byId[k].stepSound;
|
|
|
|
|
|
|
|
if (this.world.getTypeId(l, i1 + 1, j1) == Block.SNOW.id) {
|
|
|
|
stepsound = Block.SNOW.stepSound;
|
|
|
|
this.world.a(this, stepsound.c(), stepsound.a() * 0.15F, stepsound.b());
|
|
|
|
} else if (!Block.byId[k].material.isLiquid()) {
|
|
|
|
this.world.a(this, stepsound.c(), stepsound.a() * 0.15F, stepsound.b());
|
|
|
|
}
|
|
|
|
|
|
|
|
Block.byId[k].b(this.world, l, i1, j1, this);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
l = MathHelper.b(this.boundingBox.a);
|
|
|
|
i1 = MathHelper.b(this.boundingBox.b);
|
|
|
|
j1 = MathHelper.b(this.boundingBox.c);
|
|
|
|
k = MathHelper.b(this.boundingBox.d);
|
|
|
|
int k1 = MathHelper.b(this.boundingBox.e);
|
|
|
|
int l1 = MathHelper.b(this.boundingBox.f);
|
|
|
|
|
|
|
|
if (this.world.a(l, i1, j1, k, k1, l1)) {
|
|
|
|
for (int i2 = l; i2 <= k; ++i2) {
|
|
|
|
for (int j2 = i1; j2 <= k1; ++j2) {
|
|
|
|
for (int k2 = j1; k2 <= l1; ++k2) {
|
|
|
|
int l2 = this.world.getTypeId(i2, j2, k2);
|
|
|
|
|
|
|
|
if (l2 > 0) {
|
|
|
|
Block.byId[l2].a(this.world, i2, j2, k2, this);
|
|
|
|
}
|
2011-01-14 14:31:10 +01:00
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
this.bl *= 0.4F;
|
|
|
|
boolean flag2 = this.g_();
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
if (this.world.c(this.boundingBox)) {
|
2011-02-23 03:37:56 +01:00
|
|
|
this.a(1);
|
2011-01-29 22:50:29 +01:00
|
|
|
if (!flag2) {
|
|
|
|
++this.fireTicks;
|
|
|
|
// CraftBukkit start
|
2011-02-23 13:56:36 +01:00
|
|
|
if (this.fireTicks <= 0) {
|
2011-01-29 22:50:29 +01:00
|
|
|
// not on fire yet
|
|
|
|
CraftServer server = ((WorldServer) this.world).getServer();
|
|
|
|
org.bukkit.entity.Entity damagee = this.getBukkitEntity();
|
|
|
|
|
2011-03-26 22:32:56 +01:00
|
|
|
EntityCombustEvent event = new EntityCombustEvent(damagee);
|
2011-01-29 22:50:29 +01:00
|
|
|
server.getPluginManager().callEvent(event);
|
|
|
|
|
2011-02-23 13:56:36 +01:00
|
|
|
if (!event.isCancelled()) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.fireTicks = 300;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// CraftBukkit end - reset fire level back to max
|
|
|
|
this.fireTicks = 300;
|
2011-01-18 06:30:01 +01:00
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
} else if (this.fireTicks <= 0) {
|
|
|
|
this.fireTicks = -this.maxFireTicks;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (flag2 && this.fireTicks > 0) {
|
|
|
|
this.world.a(this, "random.fizz", 0.7F, 1.6F + (this.random.nextFloat() - this.random.nextFloat()) * 0.4F);
|
|
|
|
this.fireTicks = -this.maxFireTicks;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
protected void a(double d0, boolean flag) {
|
2011-01-03 12:37:41 +01:00
|
|
|
if (flag) {
|
2011-01-29 22:50:29 +01:00
|
|
|
if (this.fallDistance > 0.0F) {
|
|
|
|
this.a(this.fallDistance);
|
|
|
|
this.fallDistance = 0.0F;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
} else if (d0 < 0.0D) {
|
|
|
|
this.fallDistance = (float) ((double) this.fallDistance - d0);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public AxisAlignedBB d() {
|
2011-01-03 12:37:41 +01:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
protected void a(int i) {
|
|
|
|
if (!this.by) {
|
2011-01-11 09:25:13 +01:00
|
|
|
// CraftBukkit start
|
2011-02-23 03:37:56 +01:00
|
|
|
if (this instanceof EntityLiving) {
|
2011-01-29 22:50:29 +01:00
|
|
|
CraftServer server = ((WorldServer) this.world).getServer();
|
2011-01-18 06:30:01 +01:00
|
|
|
org.bukkit.entity.Entity damagee = this.getBukkitEntity();
|
|
|
|
DamageCause damageType = EntityDamageEvent.DamageCause.FIRE;
|
2011-01-29 22:50:29 +01:00
|
|
|
int damageDone = i;
|
2011-01-11 09:25:13 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
EntityDamageEvent event = new EntityDamageEvent(damagee, damageType, damageDone);
|
|
|
|
server.getPluginManager().callEvent(event);
|
2011-01-11 09:25:13 +01:00
|
|
|
|
2011-02-23 13:56:36 +01:00
|
|
|
if (event.isCancelled()) {
|
|
|
|
return;
|
2011-01-12 06:48:19 +01:00
|
|
|
}
|
2011-02-23 13:56:36 +01:00
|
|
|
|
|
|
|
i = event.getDamage();
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-11 09:25:13 +01:00
|
|
|
// CraftBukkit end
|
2011-01-29 22:50:29 +01:00
|
|
|
this.a((Entity) null, i);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
protected void a(float f) {}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public boolean g_() {
|
2011-01-29 22:50:29 +01:00
|
|
|
return this.world.a(this.boundingBox.b(0.0D, -0.4000000059604645D, 0.0D), Material.WATER, this);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public boolean a(Material material) {
|
2011-02-23 03:37:56 +01:00
|
|
|
double d0 = this.locY + (double) this.p();
|
2011-01-29 22:50:29 +01:00
|
|
|
int i = MathHelper.b(this.locX);
|
|
|
|
int j = MathHelper.d((float) MathHelper.b(d0));
|
|
|
|
int k = MathHelper.b(this.locZ);
|
|
|
|
int l = this.world.getTypeId(i, j, k);
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
if (l != 0 && Block.byId[l].material == material) {
|
|
|
|
float f = BlockFluids.c(this.world.getData(i, j, k)) - 0.11111111F;
|
|
|
|
float f1 = (float) (j + 1) - f;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
return d0 < (double) f1;
|
2011-01-03 12:37:41 +01:00
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public float p() {
|
2011-01-03 12:37:41 +01:00
|
|
|
return 0.0F;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public boolean Q() {
|
2011-01-29 22:50:29 +01:00
|
|
|
return this.world.a(this.boundingBox.b(-0.10000000149011612D, -0.4000000059604645D, -0.10000000149011612D), Material.LAVA);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public void a(float f, float f1, float f2) {
|
|
|
|
float f3 = MathHelper.c(f * f + f1 * f1);
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
if (f3 >= 0.01F) {
|
|
|
|
if (f3 < 1.0F) {
|
|
|
|
f3 = 1.0F;
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
f3 = f2 / f3;
|
|
|
|
f *= f3;
|
|
|
|
f1 *= f3;
|
|
|
|
float f4 = MathHelper.a(this.yaw * 3.1415927F / 180.0F);
|
|
|
|
float f5 = MathHelper.b(this.yaw * 3.1415927F / 180.0F);
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
this.motX += (double) (f * f5 - f1 * f4);
|
|
|
|
this.motZ += (double) (f1 * f5 + f * f4);
|
2011-01-14 14:31:10 +01:00
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public float c(float f) {
|
2011-01-29 22:50:29 +01:00
|
|
|
int i = MathHelper.b(this.locX);
|
|
|
|
double d0 = (this.boundingBox.e - this.boundingBox.b) * 0.66D;
|
|
|
|
int j = MathHelper.b(this.locY - (double) this.height + d0);
|
|
|
|
int k = MathHelper.b(this.locZ);
|
|
|
|
|
|
|
|
return this.world.a(MathHelper.b(this.boundingBox.a), MathHelper.b(this.boundingBox.b), MathHelper.b(this.boundingBox.c), MathHelper.b(this.boundingBox.d), MathHelper.b(this.boundingBox.e), MathHelper.b(this.boundingBox.f)) ? this.world.l(i, j, k) : 0.0F;
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public void b(double d0, double d1, double d2, float f, float f1) {
|
|
|
|
this.lastX = this.locX = d0;
|
|
|
|
this.lastY = this.locY = d1;
|
|
|
|
this.lastZ = this.locZ = d2;
|
|
|
|
this.lastYaw = this.yaw = f;
|
|
|
|
this.lastPitch = this.pitch = f1;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.bl = 0.0F;
|
2011-01-29 22:50:29 +01:00
|
|
|
double d3 = (double) (this.lastYaw - f);
|
|
|
|
|
|
|
|
if (d3 < -180.0D) {
|
|
|
|
this.lastYaw += 360.0F;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
if (d3 >= 180.0D) {
|
|
|
|
this.lastYaw -= 360.0F;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
this.a(this.locX, this.locY, this.locZ);
|
2011-02-23 03:37:56 +01:00
|
|
|
this.c(f, f1);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public void c(double d0, double d1, double d2, float f, float f1) {
|
2011-02-23 03:37:56 +01:00
|
|
|
this.bi = this.lastX = this.locX = d0;
|
|
|
|
this.bj = this.lastY = this.locY = d1 + (double) this.height;
|
|
|
|
this.bk = this.lastZ = this.locZ = d2;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.yaw = f;
|
|
|
|
this.pitch = f1;
|
|
|
|
this.a(this.locX, this.locY, this.locZ);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public float f(Entity entity) {
|
2011-01-29 22:50:29 +01:00
|
|
|
float f = (float) (this.locX - entity.locX);
|
|
|
|
float f1 = (float) (this.locY - entity.locY);
|
|
|
|
float f2 = (float) (this.locZ - entity.locZ);
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
return MathHelper.c(f * f + f1 * f1 + f2 * f2);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public double d(double d0, double d1, double d2) {
|
|
|
|
double d3 = this.locX - d0;
|
|
|
|
double d4 = this.locY - d1;
|
|
|
|
double d5 = this.locZ - d2;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
return d3 * d3 + d4 * d4 + d5 * d5;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public double e(double d0, double d1, double d2) {
|
|
|
|
double d3 = this.locX - d0;
|
|
|
|
double d4 = this.locY - d1;
|
|
|
|
double d5 = this.locZ - d2;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
return (double) MathHelper.a(d3 * d3 + d4 * d4 + d5 * d5);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public double g(Entity entity) {
|
2011-01-29 22:50:29 +01:00
|
|
|
double d0 = this.locX - entity.locX;
|
|
|
|
double d1 = this.locY - entity.locY;
|
|
|
|
double d2 = this.locZ - entity.locZ;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
return d0 * d0 + d1 * d1 + d2 * d2;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public void b(EntityHuman entityhuman) {}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public void h(Entity entity) {
|
2011-01-29 22:50:29 +01:00
|
|
|
if (entity.passenger != this && entity.vehicle != this) {
|
|
|
|
double d0 = entity.locX - this.locX;
|
|
|
|
double d1 = entity.locZ - this.locZ;
|
|
|
|
double d2 = MathHelper.a(d0, d1);
|
|
|
|
|
|
|
|
if (d2 >= 0.009999999776482582D) {
|
|
|
|
d2 = (double) MathHelper.a(d2);
|
|
|
|
d0 /= d2;
|
|
|
|
d1 /= d2;
|
|
|
|
double d3 = 1.0D / d2;
|
|
|
|
|
|
|
|
if (d3 > 1.0D) {
|
|
|
|
d3 = 1.0D;
|
|
|
|
}
|
|
|
|
|
|
|
|
d0 *= d3;
|
|
|
|
d1 *= d3;
|
|
|
|
d0 *= 0.05000000074505806D;
|
|
|
|
d1 *= 0.05000000074505806D;
|
2011-02-23 03:37:56 +01:00
|
|
|
d0 *= (double) (1.0F - this.bo);
|
|
|
|
d1 *= (double) (1.0F - this.bo);
|
2011-01-29 22:50:29 +01:00
|
|
|
this.f(-d0, 0.0D, -d1);
|
|
|
|
entity.f(d0, 0.0D, d1);
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public void f(double d0, double d1, double d2) {
|
|
|
|
this.motX += d0;
|
|
|
|
this.motY += d1;
|
|
|
|
this.motZ += d2;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
protected void R() {
|
|
|
|
this.aY = true;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public boolean a(Entity entity, int i) {
|
2011-02-23 03:37:56 +01:00
|
|
|
this.R();
|
2011-01-03 12:37:41 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public boolean d_() {
|
2011-01-03 12:37:41 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public boolean e_() {
|
2011-01-03 12:37:41 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public void c(Entity entity, int i) {}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
|
|
|
public boolean c(NBTTagCompound nbttagcompound) {
|
2011-02-23 03:37:56 +01:00
|
|
|
String s = this.S();
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
if (!this.dead && s != null) {
|
|
|
|
nbttagcompound.a("id", s);
|
|
|
|
this.d(nbttagcompound);
|
2011-01-03 12:37:41 +01:00
|
|
|
return true;
|
2011-01-29 22:50:29 +01:00
|
|
|
} else {
|
|
|
|
return false;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void d(NBTTagCompound nbttagcompound) {
|
2011-01-29 22:50:29 +01:00
|
|
|
nbttagcompound.a("Pos", (NBTBase) this.a(new double[] { this.locX, this.locY, this.locZ}));
|
|
|
|
nbttagcompound.a("Motion", (NBTBase) this.a(new double[] { this.motX, this.motY, this.motZ}));
|
|
|
|
nbttagcompound.a("Rotation", (NBTBase) this.a(new float[] { this.yaw, this.pitch}));
|
|
|
|
nbttagcompound.a("FallDistance", this.fallDistance);
|
|
|
|
nbttagcompound.a("Fire", (short) this.fireTicks);
|
|
|
|
nbttagcompound.a("Air", (short) this.airTicks);
|
|
|
|
nbttagcompound.a("OnGround", this.onGround);
|
2011-02-23 03:37:56 +01:00
|
|
|
nbttagcompound.a("World", world.q.j); // CraftBukkit
|
2011-01-29 22:50:29 +01:00
|
|
|
this.a(nbttagcompound);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void e(NBTTagCompound nbttagcompound) {
|
2011-02-23 03:37:56 +01:00
|
|
|
NBTTagList nbttaglist = nbttagcompound.l("Pos");
|
|
|
|
NBTTagList nbttaglist1 = nbttagcompound.l("Motion");
|
|
|
|
NBTTagList nbttaglist2 = nbttagcompound.l("Rotation");
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
this.a(0.0D, 0.0D, 0.0D);
|
|
|
|
this.motX = ((NBTTagDouble) nbttaglist1.a(0)).a;
|
|
|
|
this.motY = ((NBTTagDouble) nbttaglist1.a(1)).a;
|
|
|
|
this.motZ = ((NBTTagDouble) nbttaglist1.a(2)).a;
|
2011-03-21 21:31:15 +01:00
|
|
|
//CraftBukkit Start
|
|
|
|
//Exempt Vehicles from notch's sanity check
|
|
|
|
if (!(this.getBukkitEntity() instanceof CraftVehicle)) {
|
|
|
|
if (Math.abs(this.motX) > 10.0D) {
|
|
|
|
this.motX = 0.0D;
|
|
|
|
}
|
2011-02-23 03:37:56 +01:00
|
|
|
|
2011-03-21 21:31:15 +01:00
|
|
|
if (Math.abs(this.motY) > 10.0D) {
|
|
|
|
this.motY = 0.0D;
|
|
|
|
}
|
2011-02-23 03:37:56 +01:00
|
|
|
|
2011-03-21 21:31:15 +01:00
|
|
|
if (Math.abs(this.motZ) > 10.0D) {
|
|
|
|
this.motZ = 0.0D;
|
|
|
|
}
|
2011-02-23 03:37:56 +01:00
|
|
|
}
|
2011-03-21 21:31:15 +01:00
|
|
|
//CraftBukkit End
|
2011-02-23 03:37:56 +01:00
|
|
|
|
|
|
|
this.lastX = this.bi = this.locX = ((NBTTagDouble) nbttaglist.a(0)).a;
|
|
|
|
this.lastY = this.bj = this.locY = ((NBTTagDouble) nbttaglist.a(1)).a;
|
|
|
|
this.lastZ = this.bk = this.locZ = ((NBTTagDouble) nbttaglist.a(2)).a;
|
|
|
|
this.lastYaw = this.yaw = ((NBTTagFloat) nbttaglist2.a(0)).a % 6.2831855F;
|
|
|
|
this.lastPitch = this.pitch = ((NBTTagFloat) nbttaglist2.a(1)).a % 6.2831855F;
|
|
|
|
this.fallDistance = nbttagcompound.g("FallDistance");
|
|
|
|
this.fireTicks = nbttagcompound.d("Fire");
|
|
|
|
this.airTicks = nbttagcompound.d("Air");
|
|
|
|
this.onGround = nbttagcompound.m("OnGround");
|
2011-02-07 02:10:55 +01:00
|
|
|
|
2011-02-23 13:56:36 +01:00
|
|
|
// CraftBukkit start
|
2011-02-23 03:37:56 +01:00
|
|
|
if (nbttagcompound.b("World")) {
|
|
|
|
String worldName = nbttagcompound.i("World");
|
|
|
|
|
2011-02-23 13:56:36 +01:00
|
|
|
for (WorldServer world: ((WorldServer) this.world).getServer().getServer().worlds) {
|
2011-02-24 16:46:26 +01:00
|
|
|
if ((world.q.j.equals(worldName)) && (world != this.world)) {
|
2011-02-07 02:10:55 +01:00
|
|
|
this.world = world;
|
2011-02-24 16:46:26 +01:00
|
|
|
if (this instanceof EntityHuman) {
|
|
|
|
EntityPlayer player = (EntityPlayer)this;
|
|
|
|
player.c = new ItemInWorldManager(world);
|
|
|
|
player.c.a = player;
|
|
|
|
}
|
2011-02-07 02:10:55 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2011-02-23 13:56:36 +01:00
|
|
|
// CraftBukkit end
|
2011-02-07 02:10:55 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
this.a(this.locX, this.locY, this.locZ);
|
|
|
|
this.b(nbttagcompound);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
protected final String S() {
|
2011-01-29 22:50:29 +01:00
|
|
|
return EntityTypes.b(this);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
protected abstract void b(NBTTagCompound nbttagcompound);
|
|
|
|
|
|
|
|
protected abstract void a(NBTTagCompound nbttagcompound);
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
protected NBTTagList a(double... adouble) {
|
2011-01-03 12:37:41 +01:00
|
|
|
NBTTagList nbttaglist = new NBTTagList();
|
2011-01-29 22:50:29 +01:00
|
|
|
double[] adouble1 = adouble;
|
|
|
|
int i = adouble.length;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
for (int j = 0; j < i; ++j) {
|
|
|
|
double d0 = adouble1[j];
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
nbttaglist.a((NBTBase) (new NBTTagDouble(d0)));
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return nbttaglist;
|
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
protected NBTTagList a(float... afloat) {
|
2011-01-03 12:37:41 +01:00
|
|
|
NBTTagList nbttaglist = new NBTTagList();
|
2011-01-29 22:50:29 +01:00
|
|
|
float[] afloat1 = afloat;
|
|
|
|
int i = afloat.length;
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
for (int j = 0; j < i; ++j) {
|
|
|
|
float f = afloat1[j];
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
nbttaglist.a((NBTBase) (new NBTTagFloat(f)));
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return nbttaglist;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public EntityItem b(int i, int j) {
|
2011-01-29 22:50:29 +01:00
|
|
|
return this.a(i, j, 0.0F);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public EntityItem a(int i, int j, float f) {
|
|
|
|
return this.a(new ItemStack(i, j, 0), f);
|
2011-01-14 14:31:10 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public EntityItem a(ItemStack itemstack, float f) {
|
|
|
|
EntityItem entityitem = new EntityItem(this.world, this.locX, this.locY + (double) f, this.locZ, itemstack);
|
2011-01-03 12:37:41 +01:00
|
|
|
|
|
|
|
entityitem.c = 10;
|
2011-01-29 22:50:29 +01:00
|
|
|
this.world.a((Entity) entityitem);
|
2011-01-03 12:37:41 +01:00
|
|
|
return entityitem;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public boolean J() {
|
2011-01-29 22:50:29 +01:00
|
|
|
return !this.dead;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public boolean D() {
|
2011-01-29 22:50:29 +01:00
|
|
|
int i = MathHelper.b(this.locX);
|
2011-02-23 03:37:56 +01:00
|
|
|
int j = MathHelper.b(this.locY + (double) this.p());
|
2011-01-29 22:50:29 +01:00
|
|
|
int k = MathHelper.b(this.locZ);
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
return this.world.d(i, j, k);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
public boolean a(EntityHuman entityhuman) {
|
2011-01-03 12:37:41 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public AxisAlignedBB a_(Entity entity) {
|
2011-01-03 12:37:41 +01:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public void x() {
|
2011-01-29 22:50:29 +01:00
|
|
|
if (this.vehicle.dead) {
|
|
|
|
this.vehicle = null;
|
|
|
|
} else {
|
|
|
|
this.motX = 0.0D;
|
|
|
|
this.motY = 0.0D;
|
|
|
|
this.motZ = 0.0D;
|
2011-02-23 03:37:56 +01:00
|
|
|
this.f_();
|
|
|
|
this.vehicle.h_();
|
2011-01-29 22:50:29 +01:00
|
|
|
this.e += (double) (this.vehicle.yaw - this.vehicle.lastYaw);
|
|
|
|
|
|
|
|
for (this.d += (double) (this.vehicle.pitch - this.vehicle.lastPitch); this.e >= 180.0D; this.e -= 360.0D) {
|
|
|
|
;
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
while (this.e < -180.0D) {
|
|
|
|
this.e += 360.0D;
|
|
|
|
}
|
|
|
|
|
|
|
|
while (this.d >= 180.0D) {
|
|
|
|
this.d -= 360.0D;
|
|
|
|
}
|
|
|
|
|
|
|
|
while (this.d < -180.0D) {
|
|
|
|
this.d += 360.0D;
|
|
|
|
}
|
|
|
|
|
|
|
|
double d0 = this.e * 0.5D;
|
|
|
|
double d1 = this.d * 0.5D;
|
|
|
|
float f = 10.0F;
|
|
|
|
|
|
|
|
if (d0 > (double) f) {
|
|
|
|
d0 = (double) f;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (d0 < (double) (-f)) {
|
|
|
|
d0 = (double) (-f);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (d1 > (double) f) {
|
|
|
|
d1 = (double) f;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (d1 < (double) (-f)) {
|
|
|
|
d1 = (double) (-f);
|
|
|
|
}
|
|
|
|
|
|
|
|
this.e -= d0;
|
|
|
|
this.d -= d1;
|
|
|
|
this.yaw = (float) ((double) this.yaw + d0);
|
|
|
|
this.pitch = (float) ((double) this.pitch + d1);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public void h_() {
|
|
|
|
this.passenger.a(this.locX, this.locY + this.k() + this.passenger.B(), this.locZ);
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public double B() {
|
2011-01-29 22:50:29 +01:00
|
|
|
return (double) this.height;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-01-14 14:31:10 +01:00
|
|
|
public double k() {
|
2011-01-29 22:50:29 +01:00
|
|
|
return (double) this.width * 0.75D;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public void b(Entity entity) {
|
2011-01-11 09:25:13 +01:00
|
|
|
// CraftBukkit start
|
|
|
|
setPassengerOf(entity);
|
|
|
|
}
|
|
|
|
|
2011-01-30 16:15:17 +01:00
|
|
|
protected org.bukkit.entity.Entity bukkitEntity;
|
|
|
|
|
2011-02-23 13:56:36 +01:00
|
|
|
public org.bukkit.entity.Entity getBukkitEntity() {
|
2011-01-30 16:15:17 +01:00
|
|
|
if (bukkitEntity == null) {
|
|
|
|
bukkitEntity = org.bukkit.craftbukkit.entity.CraftEntity.getEntity(((WorldServer) this.world).getServer(), this);
|
|
|
|
}
|
|
|
|
return bukkitEntity;
|
2011-01-29 22:50:29 +01:00
|
|
|
}
|
|
|
|
|
2011-01-08 01:26:08 +01:00
|
|
|
public void setPassengerOf(Entity entity) {
|
2011-02-23 03:37:56 +01:00
|
|
|
// b(null) doesn't really fly for overloaded methods,
|
2011-01-08 01:26:08 +01:00
|
|
|
// so this method is needed
|
2011-01-11 09:25:13 +01:00
|
|
|
|
2011-01-21 06:54:30 +01:00
|
|
|
// CraftBukkit end
|
2011-01-29 22:50:29 +01:00
|
|
|
this.d = 0.0D;
|
|
|
|
this.e = 0.0D;
|
2011-01-03 12:37:41 +01:00
|
|
|
if (entity == null) {
|
2011-01-29 22:50:29 +01:00
|
|
|
if (this.vehicle != null) {
|
2011-02-23 13:56:36 +01:00
|
|
|
// CraftBukkit start
|
2011-02-01 11:02:43 +01:00
|
|
|
if ((this.getBukkitEntity() instanceof LivingEntity) && (vehicle.getBukkitEntity() instanceof CraftVehicle)) {
|
2011-02-23 13:56:36 +01:00
|
|
|
CraftVehicle cvehicle = (CraftVehicle) vehicle.getBukkitEntity();
|
|
|
|
LivingEntity living = (LivingEntity) getBukkitEntity();
|
|
|
|
|
2011-03-26 22:32:56 +01:00
|
|
|
VehicleExitEvent event = new VehicleExitEvent(cvehicle, living);
|
2011-02-23 13:56:36 +01:00
|
|
|
((WorldServer) world).getServer().getPluginManager().callEvent(event);
|
2011-02-01 11:02:43 +01:00
|
|
|
}
|
2011-02-23 13:56:36 +01:00
|
|
|
// CraftBukkit end
|
2011-02-01 11:02:43 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
this.c(this.vehicle.locX, this.vehicle.boundingBox.b + (double) this.vehicle.width, this.vehicle.locZ, this.yaw, this.pitch);
|
|
|
|
this.vehicle.passenger = null;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
2011-01-29 22:50:29 +01:00
|
|
|
|
|
|
|
this.vehicle = null;
|
|
|
|
} else if (this.vehicle == entity) {
|
2011-02-23 13:56:36 +01:00
|
|
|
// CraftBukkit start
|
2011-02-01 11:02:43 +01:00
|
|
|
if ((this.getBukkitEntity() instanceof LivingEntity) && (vehicle.getBukkitEntity() instanceof CraftVehicle)) {
|
2011-02-23 13:56:36 +01:00
|
|
|
CraftVehicle cvehicle = (CraftVehicle) vehicle.getBukkitEntity();
|
|
|
|
LivingEntity living = (LivingEntity) getBukkitEntity();
|
|
|
|
|
2011-03-26 22:32:56 +01:00
|
|
|
VehicleExitEvent event = new VehicleExitEvent(cvehicle, living);
|
2011-02-23 13:56:36 +01:00
|
|
|
((WorldServer) world).getServer().getPluginManager().callEvent(event);
|
2011-02-01 11:02:43 +01:00
|
|
|
}
|
2011-02-23 13:56:36 +01:00
|
|
|
// CraftBukkit end
|
2011-02-01 11:02:43 +01:00
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
this.vehicle.passenger = null;
|
|
|
|
this.vehicle = null;
|
|
|
|
this.c(entity.locX, entity.boundingBox.b + (double) entity.width, entity.locZ, this.yaw, this.pitch);
|
|
|
|
} else {
|
|
|
|
if (this.vehicle != null) {
|
|
|
|
this.vehicle.passenger = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (entity.passenger != null) {
|
|
|
|
entity.passenger.vehicle = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.vehicle = entity;
|
|
|
|
entity.passenger = this;
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public Vec3D N() {
|
2011-01-03 12:37:41 +01:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public void T() {}
|
2011-01-03 12:37:41 +01:00
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public ItemStack[] k_() {
|
2011-01-03 12:37:41 +01:00
|
|
|
return null;
|
|
|
|
}
|
2011-01-14 14:31:10 +01:00
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
public boolean U() {
|
|
|
|
return this.d(1);
|
2011-01-14 14:31:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public void b(boolean flag) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.a(1, flag);
|
2011-01-14 14:31:10 +01:00
|
|
|
}
|
|
|
|
|
2011-02-23 03:37:56 +01:00
|
|
|
protected boolean d(int i) {
|
2011-01-29 22:50:29 +01:00
|
|
|
return (this.datawatcher.a(0) & 1 << i) != 0;
|
2011-01-14 14:31:10 +01:00
|
|
|
}
|
|
|
|
|
2011-01-29 22:50:29 +01:00
|
|
|
protected void a(int i, boolean flag) {
|
|
|
|
byte b0 = this.datawatcher.a(0);
|
2011-01-14 14:31:10 +01:00
|
|
|
|
|
|
|
if (flag) {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.datawatcher.b(0, Byte.valueOf((byte) (b0 | 1 << i)));
|
2011-01-14 14:31:10 +01:00
|
|
|
} else {
|
2011-01-29 22:50:29 +01:00
|
|
|
this.datawatcher.b(0, Byte.valueOf((byte) (b0 & ~(1 << i))));
|
2011-01-14 14:31:10 +01:00
|
|
|
}
|
|
|
|
}
|
2011-01-03 12:37:41 +01:00
|
|
|
}
|