Paper/patches/server/0500-Expand-EntityUnleashEvent.patch

141 lines
9.9 KiB
Diff
Raw Normal View History

2021-06-11 14:02:28 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Nassim Jahnke <nassim@njahnke.dev>
2021-06-11 14:02:28 +02:00
Date: Fri, 29 Jan 2021 15:13:11 +0100
Subject: [PATCH] Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
2024-04-24 15:46:45 +02:00
index 2b282ba23444110949508dac11a25fee4e472f5d..b7cc2b5ee85e8e6a5c8cb8ce1f3c934773be32e6 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
2024-04-24 15:46:45 +02:00
@@ -1428,12 +1428,15 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti
2021-06-11 14:02:28 +02:00
return InteractionResult.PASS;
} else if (this.getLeashHolder() == player) {
// CraftBukkit start - fire PlayerUnleashEntityEvent
- if (CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand).isCancelled()) {
+ // Paper start - Expand EntityUnleashEvent
2024-04-24 15:46:45 +02:00
+ org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials());
2021-06-11 14:02:28 +02:00
+ if (event.isCancelled()) {
+ // Paper end - Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
((ServerPlayer) player).connection.send(new ClientboundSetEntityLinkPacket(this, this.getLeashHolder()));
return InteractionResult.PASS;
}
// CraftBukkit end
2024-04-24 15:46:45 +02:00
- this.dropLeash(true, !player.hasInfiniteMaterials());
+ this.dropLeash(true, event.isDropLeash()); // Paper - Expand EntityUnleashEvent
2023-03-14 21:25:13 +01:00
this.gameEvent(GameEvent.ENTITY_INTERACT, player);
2023-06-08 02:54:54 +02:00
return InteractionResult.sidedSuccess(this.level().isClientSide);
2021-06-11 14:02:28 +02:00
} else {
2024-04-24 15:46:45 +02:00
@@ -1601,8 +1604,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti
2021-06-11 14:02:28 +02:00
if (this.leashHolder != null) {
if (!this.isAlive() || !this.leashHolder.isAlive()) {
2023-06-08 02:54:54 +02:00
- this.level().getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), (!this.isAlive()) ? UnleashReason.PLAYER_UNLEASH : UnleashReason.HOLDER_GONE)); // CraftBukkit
2023-12-06 04:00:14 +01:00
- this.dropLeash(true, !this.leashHolder.pluginRemoved);// CraftBukkit - SPIGOT-7487: Don't drop leash, when the holder was removed by a plugin
+ // Paper start - Expand EntityUnleashEvent
2023-12-06 04:00:14 +01:00
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), (!this.isAlive()) ? EntityUnleashEvent.UnleashReason.PLAYER_UNLEASH : EntityUnleashEvent.UnleashReason.HOLDER_GONE, !this.leashHolder.pluginRemoved);
2023-06-08 02:54:54 +02:00
+ this.level().getCraftServer().getPluginManager().callEvent(event); // CraftBukkit
2021-06-11 14:02:28 +02:00
+ this.dropLeash(true, event.isDropLeash());
+ // Paper end - Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
}
}
2024-04-24 15:46:45 +02:00
@@ -1670,8 +1676,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti
2021-06-11 14:02:28 +02:00
boolean flag1 = super.startRiding(entity, force);
if (flag1 && this.isLeashed()) {
2023-06-08 02:54:54 +02:00
- this.level().getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit
2021-06-11 14:02:28 +02:00
- this.dropLeash(true, true);
+ // Paper start - Expand EntityUnleashEvent
2023-06-08 02:54:54 +02:00
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.UNKNOWN, true);
+ if (!event.callEvent()) { return flag1; }
2021-06-11 14:02:28 +02:00
+ this.dropLeash(true, event.isDropLeash());
+ // Paper end - Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
}
return flag1;
2024-04-24 15:46:45 +02:00
@@ -1848,8 +1857,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti
2021-06-11 14:02:28 +02:00
@Override
protected void removeAfterChangingDimensions() {
super.removeAfterChangingDimensions();
2023-06-08 02:54:54 +02:00
- this.level().getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit
2021-06-11 14:02:28 +02:00
- this.dropLeash(true, false);
+ // Paper start - Expand EntityUnleashEvent
2023-06-08 02:54:54 +02:00
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.UNKNOWN, false);
+ this.level().getCraftServer().getPluginManager().callEvent(event); // CraftBukkit
2021-06-11 14:02:28 +02:00
+ this.dropLeash(true, event.isDropLeash());
+ // Paper end - Expand EntityUnleashEvent
2021-06-14 21:58:32 +02:00
this.getAllSlots().forEach((itemstack) -> {
2023-06-08 02:54:54 +02:00
if (!itemstack.isEmpty()) {
itemstack.setCount(0);
2021-06-11 14:02:28 +02:00
diff --git a/src/main/java/net/minecraft/world/entity/PathfinderMob.java b/src/main/java/net/minecraft/world/entity/PathfinderMob.java
2024-04-24 15:46:45 +02:00
index e92831739603ef1b5678c9d44e85ab70d62be0e7..cdd07093342521ff9944bf7a342bbf142ba3f0b7 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/entity/PathfinderMob.java
+++ b/src/main/java/net/minecraft/world/entity/PathfinderMob.java
2024-04-24 15:46:45 +02:00
@@ -72,8 +72,11 @@ public abstract class PathfinderMob extends Mob {
2021-06-11 14:02:28 +02:00
if (this instanceof TamableAnimal && ((TamableAnimal) this).isInSittingPose()) {
if (f > entity.level().paperConfig().misc.maxLeashDistance) { // Paper - Configurable max leash distance
2023-06-08 02:54:54 +02:00
- this.level().getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE)); // CraftBukkit
2021-06-11 14:02:28 +02:00
- this.dropLeash(true, true);
+ // Paper start - Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE, true);
+ if (!event.callEvent()) return;
2021-06-11 14:02:28 +02:00
+ this.dropLeash(true, event.isDropLeash());
+ // Paper end - Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
}
return;
2024-04-24 15:46:45 +02:00
@@ -81,8 +84,11 @@ public abstract class PathfinderMob extends Mob {
2021-06-11 14:02:28 +02:00
this.onLeashDistance(f);
if (f > entity.level().paperConfig().misc.maxLeashDistance) { // Paper - Configurable max leash distance
2023-06-08 02:54:54 +02:00
- this.level().getCraftServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE)); // CraftBukkit
2021-06-11 14:02:28 +02:00
- this.dropLeash(true, true);
+ // Paper start - Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
+ EntityUnleashEvent event = new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE, true);
+ if (!event.callEvent()) return;
2021-06-11 14:02:28 +02:00
+ this.dropLeash(true, event.isDropLeash());
+ // Paper end - Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
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
2024-04-24 15:46:45 +02:00
index b43b1f81828bf1d57e98c52964053db7127519ad..952321d4e34a6524bbb494a56d7658068f74124c 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/LeashFenceKnotEntity.java
2024-04-24 15:46:45 +02:00
@@ -120,11 +120,14 @@ public class LeashFenceKnotEntity extends HangingEntity {
2023-03-14 21:25:13 +01:00
if (entityinsentient1.isLeashed() && entityinsentient1.getLeashHolder() == this) {
2021-06-11 14:02:28 +02:00
// CraftBukkit start
2023-03-14 21:25:13 +01:00
- if (CraftEventFactory.callPlayerUnleashEntityEvent(entityinsentient1, player, hand).isCancelled()) {
+ // Paper start - Expand EntityUnleashEvent
2023-03-14 21:25:13 +01:00
+ org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(entityinsentient1, player, hand, !player.getAbilities().instabuild);
2021-06-11 14:02:28 +02:00
+ if (event.isCancelled()) {
+ // Paper end - Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
die = false;
continue;
}
2023-03-14 21:25:13 +01:00
- entityinsentient1.dropLeash(true, !player.getAbilities().instabuild); // false -> survival mode boolean
+ entityinsentient1.dropLeash(true, event.isDropLeash()); // false -> survival mode boolean // Paper - Expand EntityUnleashEvent
2021-06-11 14:02:28 +02:00
// CraftBukkit end
2023-03-14 21:25:13 +01:00
flag1 = true;
2021-06-11 14:02:28 +02:00
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
2024-04-24 15:46:45 +02:00
index e6bb82928af3378847722421ce3bad7f5b994890..dadb4f13ec6b9915108603aa34d4112c47337c44 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
2024-04-24 15:46:45 +02:00
@@ -1565,8 +1565,10 @@ public class CraftEventFactory {
Bukkit.getPluginManager().callEvent(new PlayerRecipeBookSettingsChangeEvent(player.getBukkitEntity(), bukkitType, open, filter));
2021-06-11 14:02:28 +02:00
}
- public static PlayerUnleashEntityEvent callPlayerUnleashEntityEvent(Mob entity, net.minecraft.world.entity.player.Player player, InteractionHand enumhand) {
- PlayerUnleashEntityEvent event = new PlayerUnleashEntityEvent(entity.getBukkitEntity(), (Player) player.getBukkitEntity(), CraftEquipmentSlot.getHand(enumhand));
+ // Paper start - Expand EntityUnleashEvent
+ public static PlayerUnleashEntityEvent callPlayerUnleashEntityEvent(Mob entity, net.minecraft.world.entity.player.Player player, InteractionHand enumhand, boolean dropLeash) {
+ PlayerUnleashEntityEvent event = new PlayerUnleashEntityEvent(entity.getBukkitEntity(), (Player) player.getBukkitEntity(), CraftEquipmentSlot.getHand(enumhand), dropLeash);
+ // Paper end - Expand EntityUnleashEvent
2023-06-08 02:54:54 +02:00
entity.level().getCraftServer().getPluginManager().callEvent(event);
2021-06-11 14:02:28 +02:00
return event;
}