Paper/Spigot-Server-Patches/0664-Add-dropLeash-variable-to-EntityUnleashEvent.patch
Josh Roy 4c9bdf53ac
Updated Upstream (Bukkit/CraftBukkit/Spigot) (#5299)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
9d0ad318 Fix javadoc errors in previous commits
9501daa2 #578: Add methods to modify the rate of regeneration and starvation
197d8f3d #577: Add EntityExhaustionEvent

CraftBukkit Changes:
a021e334 #795: Add methods to modify the rate of regeneration and starvation
509e523c #792: Add EntityExhaustionEvent

Spigot Changes:
db99f821 Rebuild patches
2021-03-03 14:43:45 -08:00

156 lines
9.5 KiB
Diff

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/server/EntityCreature.java b/src/main/java/net/minecraft/server/EntityCreature.java
index eaa10d6e3a3c37b83fed58637941273fee9b0be8..2a5160a937a6a9968f9357c5ea3e4ced739dc0f4 100644
--- a/src/main/java/net/minecraft/server/EntityCreature.java
+++ b/src/main/java/net/minecraft/server/EntityCreature.java
@@ -41,8 +41,11 @@ public abstract class EntityCreature extends EntityInsentient {
if (this instanceof EntityTameableAnimal && ((EntityTameableAnimal) this).isSitting()) {
if (f > entity.world.paperConfig.maxLeashDistance) { // Paper
- this.world.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE)); // CraftBukkit
- this.unleash(true, true);
+ // Paper start - drop leash variable
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE, true);
+ this.world.getServer().getPluginManager().callEvent(event); // CraftBukkit
+ this.unleash(true, event.isDropLeash());
+ // Paper end
}
return;
@@ -50,8 +53,11 @@ public abstract class EntityCreature extends EntityInsentient {
this.x(f);
if (f > entity.world.paperConfig.maxLeashDistance) { // Paper
- this.world.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE)); // CraftBukkit
- this.unleash(true, true);
+ // Paper start - drop leash variable
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE, true);
+ this.world.getServer().getPluginManager().callEvent(event); // CraftBukkit
+ this.unleash(true, event.isDropLeash());
+ // Paper end
this.goalSelector.a(PathfinderGoal.Type.MOVE);
} else if (f > 6.0F) {
double d0 = (entity.locX() - this.locX()) / (double) f;
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
index eb5c3a1f0d9ff665631caf5bf579e83d1ed25e4f..a88521745f9f9b6935a61db52db915ea483af227 100644
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
@@ -20,6 +20,7 @@ import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.entity.EntityTransformEvent;
import org.bukkit.event.entity.EntityUnleashEvent;
import org.bukkit.event.entity.EntityUnleashEvent.UnleashReason;
+import org.bukkit.event.player.PlayerUnleashEntityEvent; // Paper
// CraftBukkit end
public abstract class EntityInsentient extends EntityLiving {
@@ -1139,12 +1140,15 @@ public abstract class EntityInsentient extends EntityLiving {
return EnumInteractionResult.PASS;
} else if (this.getLeashHolder() == entityhuman) {
// CraftBukkit start - fire PlayerUnleashEntityEvent
- if (CraftEventFactory.callPlayerUnleashEntityEvent(this, entityhuman).isCancelled()) {
+ // Paper start - drop leash variable
+ PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, entityhuman, !entityhuman.abilities.canInstantlyBuild);
+ if (event.isCancelled()) {
+ // Paper end
((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutAttachEntity(this, this.getLeashHolder()));
return EnumInteractionResult.PASS;
}
// CraftBukkit end
- this.unleash(true, !entityhuman.abilities.canInstantlyBuild);
+ this.unleash(true, event.isDropLeash()); // Paper - drop leash variable
return EnumInteractionResult.a(this.world.isClientSide);
} else {
EnumInteractionResult enuminteractionresult = this.c(entityhuman, enumhand);
@@ -1298,8 +1302,11 @@ public abstract class EntityInsentient extends EntityLiving {
if (this.leashHolder != null) {
if (!this.isAlive() || !this.leashHolder.isAlive()) {
- this.world.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), (!this.isAlive()) ? UnleashReason.PLAYER_UNLEASH : UnleashReason.HOLDER_GONE)); // CraftBukkit
- this.unleash(true, true);
+ // Paper start - drop leash variable
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), (!this.isAlive()) ? UnleashReason.PLAYER_UNLEASH : UnleashReason.HOLDER_GONE, true);
+ this.world.getServer().getPluginManager().callEvent(event); // CraftBukkit
+ this.unleash(true, event.isDropLeash());
+ // Paper end
}
}
@@ -1367,8 +1374,11 @@ public abstract class EntityInsentient extends EntityLiving {
boolean flag1 = super.a(entity, flag);
if (flag1 && this.isLeashed()) {
- this.world.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit
- this.unleash(true, true);
+ // Paper start - drop leash variable
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN, true);
+ this.world.getServer().getPluginManager().callEvent(event); // CraftBukkit
+ this.unleash(true, event.isDropLeash());
+ // Paper end
}
return flag1;
@@ -1570,7 +1580,10 @@ public abstract class EntityInsentient extends EntityLiving {
@Override
protected void bN() {
super.bN();
- this.world.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit
- this.unleash(true, false);
+ // Paper start - drop leash variable
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN, false);
+ this.world.getServer().getPluginManager().callEvent(event); // CraftBukkit
+ this.unleash(true, event.isDropLeash());
+ // Paper end
}
}
diff --git a/src/main/java/net/minecraft/server/EntityLeash.java b/src/main/java/net/minecraft/server/EntityLeash.java
index 6bd25833bc3ff3ca46367a48da001ed9bda8c19d..5e4652e997362e7c3fac05ac8a4fcdd6051c4f4a 100644
--- a/src/main/java/net/minecraft/server/EntityLeash.java
+++ b/src/main/java/net/minecraft/server/EntityLeash.java
@@ -5,6 +5,7 @@ import java.util.List;
import javax.annotation.Nullable;
import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
+import org.bukkit.event.player.PlayerUnleashEntityEvent; // Paper
public class EntityLeash extends EntityHanging {
@@ -101,11 +102,14 @@ public class EntityLeash extends EntityHanging {
entityinsentient = (EntityInsentient) iterator.next();
if (entityinsentient.isLeashed() && entityinsentient.getLeashHolder() == this) {
// CraftBukkit start
- if (CraftEventFactory.callPlayerUnleashEntityEvent(entityinsentient, entityhuman).isCancelled()) {
+ // Paper start - drop leash variable
+ PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(entityinsentient, entityhuman, !entityhuman.abilities.canInstantlyBuild);
+ if (event.isCancelled()) {
+ // Paper end
die = false;
continue;
}
- entityinsentient.unleash(true, !entityhuman.abilities.canInstantlyBuild); // false -> survival mode boolean
+ entityinsentient.unleash(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 a7ac877014853bb2b2e826ad6950da959f56b268..479270bae88f10de80c6fe97536ac7d2c198a6f2 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1448,8 +1448,10 @@ public class CraftEventFactory {
return itemInHand;
}
- public static PlayerUnleashEntityEvent callPlayerUnleashEntityEvent(EntityInsentient entity, EntityHuman player) {
- PlayerUnleashEntityEvent event = new PlayerUnleashEntityEvent(entity.getBukkitEntity(), (Player) player.getBukkitEntity());
+ // Paper start - drop leash variable
+ public static PlayerUnleashEntityEvent callPlayerUnleashEntityEvent(EntityInsentient entity, EntityHuman player, boolean dropLeash) {
+ PlayerUnleashEntityEvent event = new PlayerUnleashEntityEvent(entity.getBukkitEntity(), (Player) player.getBukkitEntity(), dropLeash);
+ // Paper end
entity.world.getServer().getPluginManager().callEvent(event);
return event;
}