1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package net.minecraft.server;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
public class PathfinderGoalBreed extends PathfinderGoal {
private EntityAnimal d;
World a;
private EntityAnimal e;
int b;
double c;
public PathfinderGoalBreed(EntityAnimal entityanimal, double d0) {
this.d = entityanimal;
this.a = entityanimal.world;
this.c = d0;
this.a(3);
}
public boolean a() {
if (!this.d.ce()) {
return false;
} else {
this.e = this.f();
return this.e != null;
}
}
public boolean b() {
return this.e.isAlive() && this.e.ce() && this.b < 60;
}
public void d() {
this.e = null;
this.b = 0;
}
public void e() {
this.d.getControllerLook().a(this.e, 10.0F, (float) this.d.x());
this.d.getNavigation().a((Entity) this.e, this.c);
++this.b;
if (this.b >= 60 && this.d.f(this.e) < 9.0D) {
this.g();
}
}
private EntityAnimal f() {
float f = 8.0F;
List list = this.a.a(this.d.getClass(), this.d.boundingBox.grow((double) f, (double) f, (double) f));
double d0 = Double.MAX_VALUE;
EntityAnimal entityanimal = null;
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
EntityAnimal entityanimal1 = (EntityAnimal) iterator.next();
if (this.d.mate(entityanimal1) && this.d.f(entityanimal1) < d0) {
entityanimal = entityanimal1;
d0 = this.d.f(entityanimal1);
}
}
return entityanimal;
}
private void g() {
EntityAgeable entityageable = this.d.createChild(this.e);
if (entityageable != null) {
// CraftBukkit start - set persistence for tame animals
if (entityageable instanceof EntityTameableAnimal && ((EntityTameableAnimal) entityageable).isTamed()) {
entityageable.persistent = true;
}
// CraftBukkit end
EntityHuman entityhuman = this.d.cd();
if (entityhuman == null && this.e.cd() != null) {
entityhuman = this.e.cd();
}
if (entityhuman != null) {
entityhuman.a(StatisticList.x);
if (this.d instanceof EntityCow) {
entityhuman.a((Statistic) AchievementList.H);
}
}
this.d.setAge(6000);
this.e.setAge(6000);
this.d.cf();
this.e.cf();
entityageable.setAge(-24000);
entityageable.setPositionRotation(this.d.locX, this.d.locY, this.d.locZ, 0.0F, 0.0F);
this.a.addEntity(entityageable, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason
Random random = this.d.aI();
for (int i = 0; i < 7; ++i) {
double d0 = random.nextGaussian() * 0.02D;
double d1 = random.nextGaussian() * 0.02D;
double d2 = random.nextGaussian() * 0.02D;
this.a.addParticle("heart", this.d.locX + (double) (random.nextFloat() * this.d.width * 2.0F) - (double) this.d.width, this.d.locY + 0.5D + (double) (random.nextFloat() * this.d.length), this.d.locZ + (double) (random.nextFloat() * this.d.width * 2.0F) - (double) this.d.width, d0, d1, d2);
}
if (this.a.getGameRules().getBoolean("doMobLoot")) {
this.a.addEntity(new EntityExperienceOrb(this.a, this.d.locX, this.d.locY, this.d.locZ, random.nextInt(7) + 1));
}
}
}
}
|