summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/net/minecraft/server/EntityWolf.java278
1 files changed, 278 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java
new file mode 100644
index 00000000..8b81401e
--- /dev/null
+++ b/src/main/java/net/minecraft/server/EntityWolf.java
@@ -0,0 +1,278 @@
+package net.minecraft.server;
+
+public class EntityWolf extends EntityTameableAnimal {
+
+ private boolean b = false;
+ private float c;
+ private float g;
+ private boolean h;
+ private boolean i;
+ private float j;
+ private float k;
+
+ public EntityWolf(World world) {
+ super(world);
+ this.texture = "/mob/wolf.png";
+ this.b(0.6F, 0.8F);
+ this.bb = 0.3F;
+ this.ak().a(true);
+ this.goalSelector.a(1, new PathfinderGoalFloat(this));
+ this.goalSelector.a(2, this.a);
+ this.goalSelector.a(3, new PathfinderGoalLeapAtTarget(this, 0.4F));
+ this.goalSelector.a(4, new PathfinderGoalMeleeAttack(this, this.bb, true));
+ this.goalSelector.a(5, new PathfinderGoalFollowOwner(this, this.bb, 10.0F, 2.0F));
+ this.goalSelector.a(6, new PathfinderGoalBreed(this, this.bb));
+ this.goalSelector.a(7, new PathfinderGoalRandomStroll(this, this.bb));
+ this.goalSelector.a(8, new PathfinderGoalBeg(this, 8.0F));
+ this.goalSelector.a(9, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F));
+ this.goalSelector.a(9, new PathfinderGoalRandomLookaround(this));
+ this.targetSelector.a(1, new PathfinderGoalOwnerHurtByTarget(this));
+ this.targetSelector.a(2, new PathfinderGoalOwnerHurtTarget(this));
+ this.targetSelector.a(3, new PathfinderGoalHurtByTarget(this, true));
+ this.targetSelector.a(4, new PathfinderGoalRandomTargetNonTamed(this, EntitySheep.class, 16.0F, 200, false));
+ }
+
+ public boolean c_() {
+ return true;
+ }
+
+ public void b(EntityLiving entityliving) {
+ super.b(entityliving);
+ if (entityliving instanceof EntityHuman) {
+ this.setAngry(true);
+ }
+ }
+
+ protected void g() {
+ this.datawatcher.watch(18, Integer.valueOf(this.getHealth()));
+ }
+
+ public int getMaxHealth() {
+ return this.isTamed() ? 20 : 8;
+ }
+
+ protected void b() {
+ super.b();
+ this.datawatcher.a(18, new Integer(this.getHealth()));
+ }
+
+ protected boolean g_() {
+ return false;
+ }
+
+ public void b(NBTTagCompound nbttagcompound) {
+ super.b(nbttagcompound);
+ nbttagcompound.setBoolean("Angry", this.isAngry());
+ }
+
+ public void a(NBTTagCompound nbttagcompound) {
+ super.a(nbttagcompound);
+ this.setAngry(nbttagcompound.getBoolean("Angry"));
+ }
+
+ protected boolean n() {
+ return this.isAngry();
+ }
+
+ protected String i() {
+ return this.isAngry() ? "mob.wolf.growl" : (this.random.nextInt(3) == 0 ? (this.isTamed() && this.datawatcher.getInt(18) < 10 ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark");
+ }
+
+ protected String j() {
+ return "mob.wolf.hurt";
+ }
+
+ protected String k() {
+ return "mob.wolf.death";
+ }
+
+ protected float p() {
+ return 0.4F;
+ }
+
+ protected int getLootId() {
+ return -1;
+ }
+
+ public void e() {
+ super.e();
+ if (!this.world.isStatic && this.h && !this.i && !this.G() && this.onGround) {
+ this.i = true;
+ this.j = 0.0F;
+ this.k = 0.0F;
+ this.world.broadcastEntityEffect(this, (byte) 8);
+ }
+ }
+
+ public void G_() {
+ super.G_();
+ this.g = this.c;
+ if (this.b) {
+ this.c += (1.0F - this.c) * 0.4F;
+ } else {
+ this.c += (0.0F - this.c) * 0.4F;
+ }
+
+ if (this.b) {
+ this.bc = 10;
+ }
+
+ if (this.aS()) {
+ this.h = true;
+ this.i = false;
+ this.j = 0.0F;
+ this.k = 0.0F;
+ } else if ((this.h || this.i) && this.i) {
+ if (this.j == 0.0F) {
+ this.world.makeSound(this, "mob.wolf.shake", this.p(), (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F);
+ }
+
+ this.k = this.j;
+ this.j += 0.05F;
+ if (this.k >= 2.0F) {
+ this.h = false;
+ this.i = false;
+ this.k = 0.0F;
+ this.j = 0.0F;
+ }
+
+ if (this.j > 0.4F) {
+ float f = (float) this.boundingBox.b;
+ int i = (int) (MathHelper.sin((this.j - 0.4F) * 3.1415927F) * 7.0F);
+
+ for (int j = 0; j < i; ++j) {
+ float f1 = (this.random.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F;
+ float f2 = (this.random.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F;
+
+ this.world.a("splash", this.locX + (double) f1, (double) (f + 0.8F), this.locZ + (double) f2, this.motX, this.motY, this.motZ);
+ }
+ }
+ }
+ }
+
+ public float getHeadHeight() {
+ return this.length * 0.8F;
+ }
+
+ public int C() {
+ return this.isSitting() ? 20 : super.C();
+ }
+
+ public boolean damageEntity(DamageSource damagesource, int i) {
+ Entity entity = damagesource.getEntity();
+
+ this.a.a(false);
+ if (entity != null && !(entity instanceof EntityHuman) && !(entity instanceof EntityArrow)) {
+ i = (i + 1) / 2;
+ }
+
+ return super.damageEntity(damagesource, i);
+ }
+
+ public boolean a(Entity entity) {
+ int i = this.isTamed() ? 4 : 2;
+
+ return entity.damageEntity(DamageSource.mobAttack(this), i);
+ }
+
+ public boolean b(EntityHuman entityhuman) {
+ ItemStack itemstack = entityhuman.inventory.getItemInHand();
+
+ if (!this.isTamed()) {
+ if (itemstack != null && itemstack.id == Item.BONE.id && !this.isAngry()) {
+ --itemstack.count;
+ if (itemstack.count <= 0) {
+ entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, (ItemStack) null);
+ }
+
+ if (!this.world.isStatic) {
+ if (this.random.nextInt(3) == 0) {
+ this.setTamed(true);
+ this.setPathEntity((PathEntity) null);
+ this.b((EntityLiving) null);
+ this.a.a(true);
+ this.setHealth(20);
+ this.setOwnerName(entityhuman.name);
+ this.a(true);
+ this.world.broadcastEntityEffect(this, (byte) 7);
+ } else {
+ this.a(false);
+ this.world.broadcastEntityEffect(this, (byte) 6);
+ }
+ }
+
+ return true;
+ }
+ } else {
+ if (itemstack != null && Item.byId[itemstack.id] instanceof ItemFood) {
+ ItemFood itemfood = (ItemFood) Item.byId[itemstack.id];
+
+ if (itemfood.q() && this.datawatcher.getInt(18) < 20) {
+ --itemstack.count;
+ this.heal(itemfood.getNutrition());
+ if (itemstack.count <= 0) {
+ entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, (ItemStack) null);
+ }
+
+ return true;
+ }
+ }
+
+ if (entityhuman.name.equalsIgnoreCase(this.getOwnerName()) && !this.world.isStatic && !this.a(itemstack)) {
+ this.a.a(!this.isSitting());
+ this.aZ = false;
+ this.setPathEntity((PathEntity) null);
+ }
+ }
+
+ return super.b(entityhuman);
+ }
+
+ public boolean a(ItemStack itemstack) {
+ return itemstack == null ? false : (!(Item.byId[itemstack.id] instanceof ItemFood) ? false : ((ItemFood) Item.byId[itemstack.id]).q());
+ }
+
+ public int q() {
+ return 8;
+ }
+
+ public boolean isAngry() {
+ return (this.datawatcher.getByte(16) & 2) != 0;
+ }
+
+ public void setAngry(boolean flag) {
+ byte b0 = this.datawatcher.getByte(16);
+
+ if (flag) {
+ this.datawatcher.watch(16, Byte.valueOf((byte) (b0 | 2)));
+ } else {
+ this.datawatcher.watch(16, Byte.valueOf((byte) (b0 & -3)));
+ }
+ }
+
+ public EntityAnimal createChild(EntityAnimal entityanimal) {
+ EntityWolf entitywolf = new EntityWolf(this.world);
+
+ entitywolf.setOwnerName(this.getOwnerName());
+ entitywolf.setTamed(true);
+ return entitywolf;
+ }
+
+ public void e(boolean flag) {
+ this.b = flag;
+ }
+
+ public boolean mate(EntityAnimal entityanimal) {
+ if (entityanimal == this) {
+ return false;
+ } else if (!this.isTamed()) {
+ return false;
+ } else if (!(entityanimal instanceof EntityWolf)) {
+ return false;
+ } else {
+ EntityWolf entitywolf = (EntityWolf) entityanimal;
+
+ return !entitywolf.isTamed() ? false : (entitywolf.isSitting() ? false : this.r_() && entitywolf.r_());
+ }
+ }
+}