summaryrefslogtreecommitdiffstats
path: root/nms-patches/EntityHorse.patch
blob: 06eece5e0386ad580e5789b11920d63bbe43a6cf (plain)
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
--- a/net/minecraft/server/EntityHorse.java
+++ b/net/minecraft/server/EntityHorse.java
@@ -4,6 +4,8 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; // CraftBukkit
+
 public class EntityHorse extends EntityAnimal implements IInventoryListener {
 
     private static final Predicate<Entity> bs = new Predicate() {
@@ -44,6 +46,7 @@
     private String bO;
     private String[] bP = new String[3];
     private boolean bQ = false;
+    public int maxDomestication = 100; // CraftBukkit - store max domestication value
 
     public EntityHorse(World world) {
         super(world);
@@ -320,13 +323,13 @@
     private int cZ() {
         int i = this.getType();
 
-        return this.hasChest() && (i == 1 || i == 2) ? 17 : 2;
+        return this.hasChest() /* && (i == 1 || i == 2) */ ? 17 : 2; // CraftBukkit - Remove type check
     }
 
     public void loadChest() {
         InventoryHorseChest inventoryhorsechest = this.inventoryChest;
 
-        this.inventoryChest = new InventoryHorseChest("HorseChest", this.cZ());
+        this.inventoryChest = new InventoryHorseChest("HorseChest", this.cZ(), this); // CraftBukkit - add this horse
         this.inventoryChest.a(this.getName());
         if (inventoryhorsechest != null) {
             inventoryhorsechest.b(this);
@@ -491,7 +494,7 @@
     }
 
     public int getMaxDomestication() {
-        return 100;
+        return this.maxDomestication; // CraftBukkit - return stored max domestication instead of 100
     }
 
     protected float bB() {
@@ -591,7 +594,7 @@
                     }
 
                     if (this.getHealth() < this.getMaxHealth() && f > 0.0F) {
-                        this.heal(f);
+                        this.heal(f, RegainReason.EATING); // CraftBukkit
                         flag = true;
                     }
 
@@ -698,11 +701,24 @@
 
     public void die(DamageSource damagesource) {
         super.die(damagesource);
+        /* CraftBukkit start - Handle chest dropping in dropDeathLoot below
         if (!this.world.isClientSide) {
             this.dropChest();
         }
+        // CraftBukkit end */
+    }
 
+    // CraftBukkit start - Add method
+    @Override
+    protected void dropDeathLoot(boolean flag, int i) {
+        super.dropDeathLoot(flag, i);
+
+        // Moved from die method above
+        if (!this.world.isClientSide) {
+            this.dropChest();
+        }
     }
+    // CraftBukkit end
 
     public void m() {
         if (this.random.nextInt(200) == 0) {
@@ -712,7 +728,7 @@
         super.m();
         if (!this.world.isClientSide) {
             if (this.random.nextInt(900) == 0 && this.deathTicks == 0) {
-                this.heal(1.0F);
+                this.heal(1.0F, RegainReason.REGEN); // CraftBukkit
             }
 
             if (!this.cy() && this.passenger == null && this.random.nextInt(300) == 0 && this.world.getType(new BlockPosition(MathHelper.floor(this.locX), MathHelper.floor(this.locY) - 1, MathHelper.floor(this.locZ))).getBlock() == Blocks.GRASS) {
@@ -955,6 +971,7 @@
         nbttagcompound.setInt("Temper", this.getTemper());
         nbttagcompound.setBoolean("Tame", this.isTame());
         nbttagcompound.setString("OwnerUUID", this.getOwnerUUID());
+        nbttagcompound.setInt("Bukkit.MaxDomestication", this.maxDomestication); // CraftBukkit
         if (this.hasChest()) {
             NBTTagList nbttaglist = new NBTTagList();
 
@@ -1007,6 +1024,12 @@
             this.setOwnerUUID(s);
         }
 
+        // CraftBukkit start
+        if (nbttagcompound.hasKey("Bukkit.MaxDomestication")) {
+            this.maxDomestication = nbttagcompound.getInt("Bukkit.MaxDomestication");
+        }
+        // CraftBukkit end
+
         AttributeInstance attributeinstance = this.getAttributeMap().a("Speed");
 
         if (attributeinstance != null) {
@@ -1172,18 +1195,25 @@
 
     public void v(int i) {
         if (this.cG()) {
+            // CraftBukkit start - fire HorseJumpEvent, use event power
             if (i < 0) {
                 i = 0;
-            } else {
-                this.bG = true;
-                this.dh();
             }
 
+            float power;
             if (i >= 90) {
-                this.br = 1.0F;
+                power = 1.0F;
             } else {
-                this.br = 0.4F + 0.4F * (float) i / 90.0F;
+                power = 0.4F + 0.4F * (float) i / 90.0F;
+            }
+
+            org.bukkit.event.entity.HorseJumpEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callHorseJumpEvent(this, power);
+            if (!event.isCancelled()) {
+                this.bG = true;
+                this.dh();
+                this.br = power;
             }
+            // CraftBukkit end
         }
 
     }