summaryrefslogtreecommitdiffstats
path: root/nms-patches/EntityLeash.patch
blob: 0496ad2f1feb6576785218bea5fe3d539a2ff101 (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
--- a/net/minecraft/server/EntityLeash.java
+++ b/net/minecraft/server/EntityLeash.java
@@ -3,6 +3,8 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
+
 public class EntityLeash extends EntityHanging {
 
     public EntityLeash(World world) {
@@ -63,6 +65,12 @@
             while (iterator.hasNext()) {
                 entityinsentient = (EntityInsentient) iterator.next();
                 if (entityinsentient.cc() && entityinsentient.getLeashHolder() == entityhuman) {
+                    // CraftBukkit start
+                    if (CraftEventFactory.callPlayerLeashEntityEvent(entityinsentient, this, entityhuman).isCancelled()) {
+                        ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutAttachEntity(1, entityinsentient, entityinsentient.getLeashHolder()));
+                        continue;
+                    }
+                    // CraftBukkit end
                     entityinsentient.setLeashHolder(this, true);
                     flag = true;
                 }
@@ -70,8 +78,11 @@
         }
 
         if (!this.world.isClientSide && !flag) {
-            this.die();
-            if (entityhuman.abilities.canInstantlyBuild) {
+            // CraftBukkit start - Move below
+            // this.die();
+            boolean die = true;
+            // CraftBukkit end
+            if (true || entityhuman.abilities.canInstantlyBuild) { // CraftBukkit - Process for non-creative as well
                 d0 = 7.0D;
                 list = this.world.a(EntityInsentient.class, new AxisAlignedBB(this.locX - d0, this.locY - d0, this.locZ - d0, this.locX + d0, this.locY + d0, this.locZ + d0));
                 iterator = list.iterator();
@@ -79,10 +90,21 @@
                 while (iterator.hasNext()) {
                     entityinsentient = (EntityInsentient) iterator.next();
                     if (entityinsentient.cc() && entityinsentient.getLeashHolder() == this) {
-                        entityinsentient.unleash(true, false);
+                        // CraftBukkit start
+                        if (CraftEventFactory.callPlayerUnleashEntityEvent(entityinsentient, entityhuman).isCancelled()) {
+                            die = false;
+                            continue;
+                        }
+                        entityinsentient.unleash(true, !entityhuman.abilities.canInstantlyBuild); // false -> survival mode boolean
+                        // CraftBukkit end
                     }
                 }
             }
+            // CraftBukkit start
+            if (die) {
+                this.die();
+            }
+            // CraftBukkit end
         }
 
         return true;