mirror of
https://github.com/PaperMC/Paper.git
synced 2025-07-31 12:12:08 -07:00
* Fix #12721 Track when knots are created and only fire the event then * Use mutable boolean + check if actually spawned
This commit is contained in:
@@ -27,3 +27,25 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -120,7 +_,12 @@
|
||||||
|
return this.level().getBlockState(this.pos).is(BlockTags.FENCES);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Paper start - Track if a knot was created
|
||||||
|
public static LeashFenceKnotEntity getOrCreateKnot(Level level, BlockPos pos) {
|
||||||
|
+ return getOrCreateKnot(level, pos, null);
|
||||||
|
+ }
|
||||||
|
+ public static LeashFenceKnotEntity getOrCreateKnot(Level level, BlockPos pos, @Nullable org.apache.commons.lang3.mutable.MutableBoolean created) {
|
||||||
|
+ // Paper end - Track if a knot was created
|
||||||
|
int x = pos.getX();
|
||||||
|
int y = pos.getY();
|
||||||
|
int z = pos.getZ();
|
||||||
|
@@ -134,7 +_,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
LeashFenceKnotEntity leashFenceKnotEntity1 = new LeashFenceKnotEntity(level, pos);
|
||||||
|
- level.addFreshEntity(leashFenceKnotEntity1);
|
||||||
|
+ if (level.addFreshEntity(leashFenceKnotEntity1) && created != null) { created.setTrue(); } // Paper - Track if a knot was created
|
||||||
|
return leashFenceKnotEntity1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
--- a/net/minecraft/world/item/LeadItem.java
|
--- a/net/minecraft/world/item/LeadItem.java
|
||||||
+++ b/net/minecraft/world/item/LeadItem.java
|
+++ b/net/minecraft/world/item/LeadItem.java
|
||||||
@@ -26,24 +_,43 @@
|
@@ -26,24 +_,46 @@
|
||||||
if (blockState.is(BlockTags.FENCES)) {
|
if (blockState.is(BlockTags.FENCES)) {
|
||||||
Player player = context.getPlayer();
|
Player player = context.getPlayer();
|
||||||
if (!level.isClientSide && player != null) {
|
if (!level.isClientSide && player != null) {
|
||||||
@@ -22,15 +22,19 @@
|
|||||||
+ for (java.util.Iterator<Leashable> iterator = list.iterator(); iterator.hasNext();) { // Paper - use iterator to remove
|
+ for (java.util.Iterator<Leashable> iterator = list.iterator(); iterator.hasNext();) { // Paper - use iterator to remove
|
||||||
+ Leashable leashable = iterator.next(); // Paper - use iterator to remove
|
+ Leashable leashable = iterator.next(); // Paper - use iterator to remove
|
||||||
if (leashFenceKnotEntity == null) {
|
if (leashFenceKnotEntity == null) {
|
||||||
leashFenceKnotEntity = LeashFenceKnotEntity.getOrCreateKnot(level, pos);
|
- leashFenceKnotEntity = LeashFenceKnotEntity.getOrCreateKnot(level, pos);
|
||||||
+ // CraftBukkit start - fire HangingPlaceEvent
|
+ // CraftBukkit start - fire HangingPlaceEvent
|
||||||
+ org.bukkit.inventory.EquipmentSlot hand = org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(interactionHand);
|
+ org.apache.commons.lang3.mutable.MutableBoolean created = new org.apache.commons.lang3.mutable.MutableBoolean(false);
|
||||||
+ org.bukkit.event.hanging.HangingPlaceEvent event = new org.bukkit.event.hanging.HangingPlaceEvent((org.bukkit.entity.Hanging) leashFenceKnotEntity.getBukkitEntity(), player != null ? (org.bukkit.entity.Player) player.getBukkitEntity() : null, org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), org.bukkit.block.BlockFace.SELF, hand);
|
+ leashFenceKnotEntity = LeashFenceKnotEntity.getOrCreateKnot(level, pos, created);
|
||||||
+ level.getCraftServer().getPluginManager().callEvent(event);
|
+ if (created.booleanValue()) {
|
||||||
|
+ org.bukkit.inventory.EquipmentSlot hand = org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(interactionHand);
|
||||||
|
+ org.bukkit.event.hanging.HangingPlaceEvent event = new org.bukkit.event.hanging.HangingPlaceEvent((org.bukkit.entity.Hanging) leashFenceKnotEntity.getBukkitEntity(), player != null ? (org.bukkit.entity.Player) player.getBukkitEntity() : null, org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), org.bukkit.block.BlockFace.SELF, hand);
|
||||||
|
+ level.getCraftServer().getPluginManager().callEvent(event);
|
||||||
+
|
+
|
||||||
+ if (event.isCancelled()) {
|
+ if (event.isCancelled()) {
|
||||||
+ leashFenceKnotEntity.discard(null); // CraftBukkit - add Bukkit remove cause
|
+ leashFenceKnotEntity.discard(null); // CraftBukkit - add Bukkit remove cause
|
||||||
+ return InteractionResult.PASS;
|
+ return InteractionResult.PASS;
|
||||||
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
leashFenceKnotEntity.playPlacementSound();
|
leashFenceKnotEntity.playPlacementSound();
|
||||||
|
Reference in New Issue
Block a user