Skip to content

Commit 945aea9

Browse files
authored
Fix Damager for HangingBreakByEntityEvent and minor improvements (#12615)
1 parent 4aef3f0 commit 945aea9

9 files changed

Lines changed: 38 additions & 28 deletions
Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,47 @@
11
package org.bukkit.event.hanging;
22

3+
import org.bukkit.damage.DamageSource;
34
import org.bukkit.entity.Entity;
45
import org.bukkit.entity.Hanging;
56
import org.jetbrains.annotations.ApiStatus;
6-
import org.jetbrains.annotations.NotNull;
7-
import org.jetbrains.annotations.Nullable;
7+
import org.jspecify.annotations.NullMarked;
88

99
/**
1010
* Triggered when a hanging entity is removed by an entity
1111
*/
12+
@NullMarked
1213
public class HangingBreakByEntityEvent extends HangingBreakEvent {
1314

1415
private final Entity remover;
16+
private final DamageSource damageSource;
1517

1618
@ApiStatus.Internal
17-
public HangingBreakByEntityEvent(@NotNull final Hanging hanging, @NotNull final Entity remover) {
18-
this(hanging, remover, HangingBreakEvent.RemoveCause.ENTITY);
19+
public HangingBreakByEntityEvent(final Hanging hanging, final Entity remover, final DamageSource damageSource) {
20+
this(hanging, remover, damageSource, HangingBreakEvent.RemoveCause.ENTITY);
1921
}
2022

2123
@ApiStatus.Internal
22-
public HangingBreakByEntityEvent(@NotNull final Hanging hanging, @NotNull final Entity remover, @NotNull final HangingBreakEvent.RemoveCause cause) {
24+
public HangingBreakByEntityEvent(final Hanging hanging, final Entity remover, final DamageSource damageSource, final HangingBreakEvent.RemoveCause cause) {
2325
super(hanging, cause);
2426
this.remover = remover;
27+
this.damageSource = damageSource;
2528
}
2629

2730
/**
2831
* Gets the entity that removed the hanging entity.
2932
*
3033
* @return the entity that removed the hanging entity
3134
*/
32-
@NotNull
3335
public Entity getRemover() {
3436
return this.remover;
3537
}
38+
39+
/**
40+
* Gets the {@link DamageSource} that caused the hanging entity to be removed.
41+
*
42+
* @return the damage source
43+
*/
44+
public DamageSource getDamageSource() {
45+
return this.damageSource;
46+
}
3647
}

paper-server/patches/features/0001-Moonrise-optimisation-patches.patch

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28893,7 +28893,7 @@ index 1ceb7e4a3abd4d9de5133d182d3267d2164918f6..eb2fa32cff6824c14f865c8731df7d08
2889328893
+ // Paper end - block counting
2889428894
}
2889528895
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
28896-
index 3d7bc43e3e367a2328601ac6b74f99361b4be57e..f7b4da570ee28b7128b4d2cd1c67b89e3980bced 100644
28896+
index 29896cb17fcf8ab967a937e9b0e102a8354b6889..e087d5596979044fe7fbcf7f2cccdae4e81a3d3a 100644
2889728897
--- a/net/minecraft/world/entity/Entity.java
2889828898
+++ b/net/minecraft/world/entity/Entity.java
2889928899
@@ -167,7 +167,7 @@ public abstract class Entity
@@ -29366,7 +29366,7 @@ index 3d7bc43e3e367a2328601ac6b74f99361b4be57e..f7b4da570ee28b7128b4d2cd1c67b89e
2936629366
}
2936729367

2936829368
public InteractionResult interact(final Player player, final InteractionHand hand, final Vec3 location) {
29369-
@@ -4364,15 +4601,17 @@ public abstract class Entity
29369+
@@ -4363,15 +4600,17 @@ public abstract class Entity
2937029370
}
2937129371

2937229372
public Iterable<Entity> getIndirectPassengers() {
@@ -29392,7 +29392,7 @@ index 3d7bc43e3e367a2328601ac6b74f99361b4be57e..f7b4da570ee28b7128b4d2cd1c67b89e
2939229392
}
2939329393

2939429394
public int countPlayerPassengers() {
29395-
@@ -4683,6 +4922,15 @@ public abstract class Entity
29395+
@@ -4682,6 +4921,15 @@ public abstract class Entity
2939629396
}
2939729397

2939829398
public final void setPosRaw(double x, double y, double z, boolean forceBoundingBoxUpdate) {
@@ -29408,7 +29408,7 @@ index 3d7bc43e3e367a2328601ac6b74f99361b4be57e..f7b4da570ee28b7128b4d2cd1c67b89e
2940829408
if (!checkPosition(this, x, y, z)) {
2940929409
return;
2941029410
}
29411-
@@ -4832,6 +5080,12 @@ public abstract class Entity
29411+
@@ -4831,6 +5079,12 @@ public abstract class Entity
2941229412

2941329413
@Override
2941429414
public final void setRemoved(final Entity.RemovalReason reason, org.bukkit.event.entity.EntityRemoveEvent.@Nullable Cause cause) { // CraftBukkit - add Bukkit remove cause
@@ -29421,7 +29421,7 @@ index 3d7bc43e3e367a2328601ac6b74f99361b4be57e..f7b4da570ee28b7128b4d2cd1c67b89e
2942129421
org.bukkit.craftbukkit.event.CraftEventFactory.callEntityRemoveEvent(this, cause); // CraftBukkit
2942229422
final boolean alreadyRemoved = this.removalReason != null; // Paper - Folia schedulers
2942329423
if (this.removalReason == null) {
29424-
@@ -4842,7 +5096,7 @@ public abstract class Entity
29424+
@@ -4841,7 +5095,7 @@ public abstract class Entity
2942529425
this.stopRiding();
2942629426
}
2942729427

@@ -29430,7 +29430,7 @@ index 3d7bc43e3e367a2328601ac6b74f99361b4be57e..f7b4da570ee28b7128b4d2cd1c67b89e
2943029430
this.levelCallback.onRemove(reason);
2943129431
this.onRemoval(reason);
2943229432
// Paper start - Folia schedulers
29433-
@@ -4876,7 +5130,7 @@ public abstract class Entity
29433+
@@ -4875,7 +5129,7 @@ public abstract class Entity
2943429434
public boolean shouldBeSaved() {
2943529435
return (this.removalReason == null || this.removalReason.shouldSave())
2943629436
&& !this.isPassenger()

paper-server/patches/features/0002-Rewrite-dataconverter-system.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33491,7 +33491,7 @@ index 109d7b563ee799d998a5773c5a36e61ca3607d46..747755082639436731989d3ee4b3c30a
3349133491
return structureTemplate.save(new CompoundTag());
3349233492
}
3349333493
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
33494-
index 1b064f00c33712c3d2d85ed8520f1eda02abfbf9..65a971379f35c4b1b519b93787f690d891e29523 100644
33494+
index e11862c7e0617acfb36212cfe349bdade3a5164b..7ae2d491a3b2f379df99ccc649b8bb8cbf2304b9 100644
3349533495
--- a/net/minecraft/server/MinecraftServer.java
3349633496
+++ b/net/minecraft/server/MinecraftServer.java
3349733497
@@ -299,6 +299,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa

paper-server/patches/features/0005-Entity-Activation-Range-2.0.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ index 0df8332933203a904bd9ef9efb3c9bce21e65441..1a502cbd8acea9420fa6dd8d716018b5
462462
public void tick() {
463463
super.tick();
464464
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
465-
index f7b4da570ee28b7128b4d2cd1c67b89e3980bced..93d3fb313d538cc1067b1db010458169a1320122 100644
465+
index e087d5596979044fe7fbcf7f2cccdae4e81a3d3a..fea6c3b48c4eb162fbdc099fa775bc3161a4dd4e 100644
466466
--- a/net/minecraft/world/entity/Entity.java
467467
+++ b/net/minecraft/world/entity/Entity.java
468468
@@ -382,6 +382,15 @@ public abstract class Entity

paper-server/patches/features/0010-Handle-Oversized-block-entities-in-chunks.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ creating too large of a packet to sed.
99
Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
1010

1111
diff --git a/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java b/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
12-
index 2bfc4cb47fc51345fc733b6ab3b19ace4f8bc171..dad2b89355b05900251955d015451fe195bfdb49 100644
12+
index 6ecda939755534ce0f35680be16a04c0a0e0a312..488d5654f5414c9950f19e86a791507366366e01 100644
1313
--- a/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
1414
+++ b/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
1515
@@ -32,6 +32,14 @@ public class ClientboundLevelChunkPacketData {

paper-server/patches/features/0022-Optimise-collision-checking-in-player-move-packet-ha.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Subject: [PATCH] Optimise collision checking in player move packet handling
66
Move collision logic to just the hasNewCollision call instead of getCubes + hasNewCollision
77

88
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
9-
index 05a700ffc844b41f4fa129226f78dc6c52520f32..1d93a864c5fc040b5ec7c48b4db0bd54cd6255ff 100644
9+
index 0b86c393b041607278c1b712a62ec9ae3640f4de..80162ffef5d54d00663dcb58a087884ec8a3eaaa 100644
1010
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
1111
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
1212
@@ -634,6 +634,7 @@ public class ServerGamePacketListenerImpl

paper-server/patches/features/0025-Optimise-EntityScheduler-ticking.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,10 @@ index da8c04aa02032c4c582709727f8f7f0b66b697b1..3923f21c67165e2ecd2c9cecd5266758
6666
io.papermc.paper.adventure.providers.ClickCallbackProviderImpl.ADVENTURE_CLICK_MANAGER.handleQueue(this.tickCount); // Paper
6767
io.papermc.paper.adventure.providers.ClickCallbackProviderImpl.DIALOG_CLICK_MANAGER.handleQueue(this.tickCount); // Paper
6868
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
69-
index 93d3fb313d538cc1067b1db010458169a1320122..9cd46a8619e575a865f4d00ce71d249c9b028b2f 100644
69+
index fea6c3b48c4eb162fbdc099fa775bc3161a4dd4e..82f6582a92f17bdeb3218c4c1fcac86981fd9c37 100644
7070
--- a/net/minecraft/world/entity/Entity.java
7171
+++ b/net/minecraft/world/entity/Entity.java
72-
@@ -5147,6 +5147,11 @@ public abstract class Entity
72+
@@ -5146,6 +5146,11 @@ public abstract class Entity
7373
this.getBukkitEntity().taskScheduler.retire();
7474
}
7575
// Paper end - Folia schedulers

paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,7 @@
13551355
this.setTicksFrozen(0);
13561356
}
13571357

1358-
@@ -2762,11 +_,43 @@
1358+
@@ -2762,11 +_,42 @@
13591359

13601360
public void thunderHit(final ServerLevel level, final LightningBolt lightningBolt) {
13611361
this.setRemainingFireTicks(this.remainingFireTicks + 1);
@@ -1383,11 +1383,10 @@
13831383
+ }
13841384
+
13851385
+ // CraftBukkit start
1386+
+ final DamageSource damageSource = this.damageSources().lightningBolt().eventEntityDamager(lightningBolt);
13861387
+ if (thisBukkitEntity instanceof org.bukkit.entity.Hanging) {
1387-
+ org.bukkit.event.hanging.HangingBreakByEntityEvent hangingEvent = new org.bukkit.event.hanging.HangingBreakByEntityEvent((org.bukkit.entity.Hanging) thisBukkitEntity, stormBukkitEntity);
1388-
+ pluginManager.callEvent(hangingEvent);
1389-
+
1390-
+ if (hangingEvent.isCancelled()) {
1388+
+ org.bukkit.event.hanging.HangingBreakByEntityEvent hangingEvent = new org.bukkit.event.hanging.HangingBreakByEntityEvent((org.bukkit.entity.Hanging) thisBukkitEntity, stormBukkitEntity, new org.bukkit.craftbukkit.damage.CraftDamageSource(damageSource));
1389+
+ if (!hangingEvent.callEvent()) {
13911390
+ return;
13921391
+ }
13931392
+ }
@@ -1396,7 +1395,7 @@
13961395
+ return;
13971396
+ }
13981397
+
1399-
+ if (!this.hurtServer(level, this.damageSources().lightningBolt().eventEntityDamager(lightningBolt), 5.0F)) { // Paper - fix DamageSource API
1398+
+ if (!this.hurtServer(level, damageSource, 5.0F)) { // Paper - fix DamageSource API
14001399
+ return;
14011400
+ }
14021401
+ // CraftBukkit end

paper-server/patches/sources/net/minecraft/world/entity/decoration/BlockAttachedEntity.java.patch

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@
4343
} else {
4444
if (!this.isRemoved()) {
4545
+ // CraftBukkit start - fire break events
46-
+ Entity damager = (!source.isDirect() && source.getEntity() != null) ? source.getEntity() : source.getDirectEntity(); // Paper - fix DamageSource API
47-
+ org.bukkit.event.hanging.HangingBreakEvent event;
46+
+ Entity damager = source.getDirectEntity();
47+
+ final org.bukkit.event.hanging.HangingBreakEvent event;
4848
+ if (damager != null) {
49-
+ event = new org.bukkit.event.hanging.HangingBreakByEntityEvent((org.bukkit.entity.Hanging) this.getBukkitEntity(), damager.getBukkitEntity(), source.is(net.minecraft.tags.DamageTypeTags.IS_EXPLOSION) ? org.bukkit.event.hanging.HangingBreakEvent.RemoveCause.EXPLOSION : org.bukkit.event.hanging.HangingBreakEvent.RemoveCause.ENTITY);
49+
+ event = new org.bukkit.event.hanging.HangingBreakByEntityEvent((org.bukkit.entity.Hanging) this.getBukkitEntity(), damager.getBukkitEntity(), new org.bukkit.craftbukkit.damage.CraftDamageSource(source), source.is(net.minecraft.tags.DamageTypeTags.IS_EXPLOSION) ? org.bukkit.event.hanging.HangingBreakEvent.RemoveCause.EXPLOSION : org.bukkit.event.hanging.HangingBreakEvent.RemoveCause.ENTITY);
5050
+ } else {
5151
+ event = new org.bukkit.event.hanging.HangingBreakEvent((org.bukkit.entity.Hanging) this.getBukkitEntity(), source.is(net.minecraft.tags.DamageTypeTags.IS_EXPLOSION) ? org.bukkit.event.hanging.HangingBreakEvent.RemoveCause.EXPLOSION : org.bukkit.event.hanging.HangingBreakEvent.RemoveCause.DEFAULT);
5252
+ }
5353
+
54-
+ this.level().getCraftServer().getPluginManager().callEvent(event);
54+
+ event.callEvent();
5555
+
5656
+ if (this.isRemoved() || event.isCancelled()) {
5757
+ return true;

0 commit comments

Comments
 (0)