aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0592-Add-dropLeash-variable-to-EntityUnleashEvent.patch
blob: dd1e928fa0782c14a542ff0414953abacab63e30 (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
140
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: kennytv <jahnke.nassim@gmail.com>
Date: Fri, 29 Jan 2021 15:13:11 +0100
Subject: [PATCH] Add dropLeash variable to EntityUnleashEvent


diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index 341614d0f0df4008a443d9cda400d0c0103af90a..0909d3cd41fa8c8fe971e1a6c5a67bab7e0a3dc9 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -1230,12 +1230,15 @@ public abstract class Mob extends LivingEntity {
             return InteractionResult.PASS;
         } else if (this.getLeashHolder() == player) {
             // CraftBukkit start - fire PlayerUnleashEntityEvent
-            if (CraftEventFactory.callPlayerUnleashEntityEvent(this, player).isCancelled()) {
+            // Paper start - drop leash variable
+            org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, !player.getAbilities().instabuild);
+            if (event.isCancelled()) {
+                // Paper end
                 ((ServerPlayer) player).connection.send(new ClientboundSetEntityLinkPacket(this, this.getLeashHolder()));
                 return InteractionResult.PASS;
             }
             // CraftBukkit end
-            this.dropLeash(true, !player.getAbilities().instabuild);
+            this.dropLeash(true, event.isDropLeash()); // Paper - drop leash variable
             return InteractionResult.sidedSuccess(this.level.isClientSide);
         } else {
             InteractionResult enuminteractionresult = this.checkAndHandleImportantInteractions(player, hand);
@@ -1393,8 +1396,11 @@ public abstract class Mob extends LivingEntity {
 
         if (this.leashHolder != null) {
             if (!this.isAlive() || !this.leashHolder.isAlive()) {
-                this.level.getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), (!this.isAlive()) ? UnleashReason.PLAYER_UNLEASH : UnleashReason.HOLDER_GONE)); // CraftBukkit
-                this.dropLeash(true, true);
+                // Paper start - drop leash variable
+                EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), (!this.isAlive()) ? UnleashReason.PLAYER_UNLEASH : UnleashReason.HOLDER_GONE, true);
+                this.level.getCraftServer().getPluginManager().callEvent(event); // CraftBukkit
+                this.dropLeash(true, event.isDropLeash());
+                // Paper end
             }
 
         }
@@ -1457,8 +1463,11 @@ public abstract class Mob extends LivingEntity {
         boolean flag1 = super.startRiding(entity, force);
 
         if (flag1 && this.isLeashed()) {
-            this.level.getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit
-            this.dropLeash(true, true);
+            // Paper start - drop leash variable
+            EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN, true);
+            this.level.getCraftServer().getPluginManager().callEvent(event); // CraftBukkit
+            this.dropLeash(true, event.isDropLeash());
+            // Paper end
         }
 
         return flag1;
@@ -1628,8 +1637,11 @@ public abstract class Mob extends LivingEntity {
     @Override
     protected void removeAfterChangingDimensions() {
         super.removeAfterChangingDimensions();
-        this.level.getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit
-        this.dropLeash(true, false);
+        // Paper start - drop leash variable
+        EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN, false);
+        this.level.getCraftServer().getPluginManager().callEvent(event); // CraftBukkit
+        this.dropLeash(true, event.isDropLeash());
+        // Paper end
         this.getAllSlots().forEach((itemstack) -> {
             if (!itemstack.isEmpty()) itemstack.setCount(0); // CraftBukkit
         });
diff --git a/src/main/java/net/minecraft/world/entity/PathfinderMob.java b/src/main/java/net/minecraft/world/entity/PathfinderMob.java
index 999d18610666ec442bb038da5c452e3cd77e7428..5f256c1ac5d49e19cfccf174dd55506313c493e0 100644
--- a/src/main/java/net/minecraft/world/entity/PathfinderMob.java
+++ b/src/main/java/net/minecraft/world/entity/PathfinderMob.java
@@ -49,8 +49,11 @@ public abstract class PathfinderMob extends Mob {
 
             if (this instanceof TamableAnimal && ((TamableAnimal) this).isInSittingPose()) {
                 if (f > entity.level.paperConfig.maxLeashDistance) { // Paper
-                    this.level.getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE)); // CraftBukkit
-                    this.dropLeash(true, true);
+                    // Paper start - drop leash variable
+                    EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE, true);
+                    this.level.getCraftServer().getPluginManager().callEvent(event); // CraftBukkit
+                    this.dropLeash(true, event.isDropLeash());
+                    // Paper end
                 }
 
                 return;
@@ -58,8 +61,11 @@ public abstract class PathfinderMob extends Mob {
 
             this.onLeashDistance(f);
             if (f > entity.level.paperConfig.maxLeashDistance) { // Paper
-                this.level.getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE)); // CraftBukkit
-                this.dropLeash(true, true);
+                // Paper start - drop leash variable
+                EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE, true);
+                this.level.getCraftServer().getPluginManager().callEvent(event); // CraftBukkit
+                this.dropLeash(true, event.isDropLeash());
+                // Paper end
                 this.goalSelector.disableControlFlag(Goal.Flag.MOVE);
             } else if (f > 6.0F) {
                 double d0 = (entity.getX() - this.getX()) / (double) f;
diff --git a/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java b/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java
index cf932116a0cafd315e44159fbf7c5d25d43782ff..03bda898a5a263053ecd79f74799d37095bbeb54 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java
@@ -123,11 +123,14 @@ public class LeashFenceKnotEntity extends HangingEntity {
                         entityinsentient = (Mob) iterator.next();
                         if (entityinsentient.isLeashed() && entityinsentient.getLeashHolder() == this) {
                             // CraftBukkit start
-                            if (CraftEventFactory.callPlayerUnleashEntityEvent(entityinsentient, player).isCancelled()) {
+                            // Paper start - drop leash variable
+                            org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(entityinsentient, player, !player.getAbilities().instabuild);
+                            if (event.isCancelled()) {
+                                // Paper end
                                 die = false;
                                 continue;
                             }
-                            entityinsentient.dropLeash(true, !player.getAbilities().instabuild); // false -> survival mode boolean
+                            entityinsentient.dropLeash(true, event.isDropLeash()); // false -> survival mode boolean // Paper - drop leash variable
                             // CraftBukkit end
                         }
                     }
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index da0a74415dcaddc3f692106faf11403e27feee80..afb6eb856d22845716351d5be7eff5991da72dd3 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1495,8 +1495,10 @@ public class CraftEventFactory {
         return itemInHand;
     }
 
-    public static PlayerUnleashEntityEvent callPlayerUnleashEntityEvent(Mob entity, net.minecraft.world.entity.player.Player player) {
-        PlayerUnleashEntityEvent event = new PlayerUnleashEntityEvent(entity.getBukkitEntity(), (Player) player.getBukkitEntity());
+    // Paper start - drop leash variable
+    public static PlayerUnleashEntityEvent callPlayerUnleashEntityEvent(Mob entity, net.minecraft.world.entity.player.Player player, boolean dropLeash) {
+        PlayerUnleashEntityEvent event = new PlayerUnleashEntityEvent(entity.getBukkitEntity(), (Player) player.getBukkitEntity(), dropLeash);
+        // Paper end
         entity.level.getCraftServer().getPluginManager().callEvent(event);
         return event;
     }