Skip to content

Commit 952a024

Browse files
Fix some issues with PlayerLeashEntityEvent (#13015)
Co-authored-by: Aeltumn <[email protected]>
1 parent dd8f9f8 commit 952a024

File tree

3 files changed

+16
-25
lines changed

3 files changed

+16
-25
lines changed

paper-api/src/main/java/org/bukkit/event/block/BlockShearEntityEvent.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import java.util.List;
1313

1414
/**
15-
* Event fired when a dispenser shears a nearby sheep.
15+
* Event fired when a dispenser shears a nearby entity.
1616
*/
1717
public class BlockShearEntityEvent extends BlockEvent implements Cancellable {
1818

@@ -43,9 +43,9 @@ public Entity getEntity() {
4343
}
4444

4545
/**
46-
* Gets the item used to shear this sheep.
46+
* Gets the item used to shear this entity.
4747
*
48-
* @return the item used to shear this sheep.
48+
* @return the item used to shear this entity.
4949
*/
5050
@NotNull
5151
public ItemStack getTool() {

paper-server/patches/sources/net/minecraft/world/item/LeadItem.java.patch

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
--- a/net/minecraft/world/item/LeadItem.java
22
+++ b/net/minecraft/world/item/LeadItem.java
3-
@@ -26,24 +_,46 @@
3+
@@ -26,25 +_,38 @@
44
if (blockState.is(BlockTags.FENCES)) {
55
Player player = context.getPlayer();
66
if (!level.isClientSide() && player != null) {
@@ -18,9 +18,7 @@
1818
List<Leashable> list = Leashable.leashableInArea(level, Vec3.atCenterOf(pos), leashable1 -> leashable1.getLeashHolder() == player);
1919
boolean flag = false;
2020

21-
- for (Leashable leashable : list) {
22-
+ for (java.util.Iterator<Leashable> iterator = list.iterator(); iterator.hasNext();) { // Paper - use iterator to remove
23-
+ Leashable leashable = iterator.next(); // Paper - use iterator to remove
21+
for (Leashable leashable : list) {
2422
if (leashFenceKnotEntity == null) {
2523
- leashFenceKnotEntity = LeashFenceKnotEntity.getOrCreateKnot(level, pos);
2624
+ // CraftBukkit start - fire HangingPlaceEvent
@@ -32,25 +30,19 @@
3230
+ level.getCraftServer().getPluginManager().callEvent(event);
3331
+
3432
+ if (event.isCancelled()) {
35-
+ leashFenceKnotEntity.discard(null); // CraftBukkit - add Bukkit remove cause
33+
+ leashFenceKnotEntity.discard(null);
3634
+ return InteractionResult.PASS;
3735
+ }
3836
+ }
3937
+ // CraftBukkit end
4038
leashFenceKnotEntity.playPlacementSound();
4139
}
4240

43-
+ // CraftBukkit start
44-
+ if (leashable instanceof net.minecraft.world.entity.Entity leashed) {
45-
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerLeashEntityEvent(leashed, leashFenceKnotEntity, player, interactionHand).isCancelled()) {
46-
+ iterator.remove();
47-
+ continue;
48-
+ }
49-
+ }
50-
+ // CraftBukkit end
51-
if (leashable.canHaveALeashAttachedTo(leashFenceKnotEntity)) {
41+
- if (leashable.canHaveALeashAttachedTo(leashFenceKnotEntity)) {
42+
+ if (leashable.canHaveALeashAttachedTo(leashFenceKnotEntity) && org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerLeashEntityEvent(leashable, leashFenceKnotEntity, player, interactionHand)) { // Paper - leash event
5243
leashable.setLeashedTo(leashFenceKnotEntity, true);
5344
flag = true;
45+
}
5446
@@ -54,7 +_,18 @@
5547
level.gameEvent(GameEvent.BLOCK_ATTACH, pos, GameEvent.Context.of(player));
5648
return InteractionResult.SUCCESS_SERVER;

paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
import com.google.common.collect.Lists;
77
import com.mojang.authlib.GameProfile;
88
import com.mojang.datafixers.util.Either;
9+
import io.papermc.paper.adventure.PaperAdventure;
10+
import io.papermc.paper.connection.HorriblePlayerLoginEventHack;
11+
import io.papermc.paper.connection.PlayerConnection;
12+
import io.papermc.paper.event.connection.PlayerConnectionValidateLoginEvent;
13+
import io.papermc.paper.event.entity.ItemTransportingEntityValidateTargetEvent;
914
import java.util.ArrayList;
1015
import java.util.Collections;
1116
import java.util.EnumMap;
@@ -14,17 +19,11 @@
1419
import java.util.Set;
1520
import java.util.stream.Collectors;
1621
import java.util.stream.Stream;
17-
import io.papermc.paper.adventure.PaperAdventure;
18-
import io.papermc.paper.connection.HorriblePlayerLoginEventHack;
19-
import io.papermc.paper.connection.PlayerConnection;
20-
import io.papermc.paper.event.connection.PlayerConnectionValidateLoginEvent;
21-
import io.papermc.paper.event.entity.ItemTransportingEntityValidateTargetEvent;
2222
import net.minecraft.core.BlockPos;
2323
import net.minecraft.core.Direction;
2424
import net.minecraft.network.Connection;
2525
import net.minecraft.network.chat.Component;
2626
import net.minecraft.network.protocol.game.ServerboundContainerClosePacket;
27-
import net.minecraft.resources.ResourceLocation;
2827
import net.minecraft.server.MinecraftServer;
2928
import net.minecraft.server.level.ServerLevel;
3029
import net.minecraft.server.level.ServerPlayer;
@@ -1540,8 +1539,8 @@ public static boolean handlePlayerUnleashEntityEvent(
15401539
}
15411540

15421541
public static boolean handlePlayerLeashEntityEvent(Leashable leashed, Entity leashHolder, net.minecraft.world.entity.player.Player player, InteractionHand hand) {
1543-
if (!(leashed instanceof final Entity leashedEntity)) return false;
1544-
return callPlayerLeashEntityEvent(leashedEntity, leashHolder, player, hand).callEvent();
1542+
if (!(leashed instanceof final Entity leashedEntity)) return true;
1543+
return !callPlayerLeashEntityEvent(leashedEntity, leashHolder, player, hand).isCancelled();
15451544
}
15461545

15471546
public static @Nullable PlayerLeashEntityEvent callPlayerLeashEntityEvent(Leashable leashed, Entity leashHolder, net.minecraft.world.entity.player.Player player, InteractionHand hand) {

0 commit comments

Comments
 (0)