aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0925-Add-PlayerShieldDisableEvent.patch
diff options
context:
space:
mode:
authorNassim Jahnke <[email protected]>2024-06-16 12:56:00 +0200
committerNassim Jahnke <[email protected]>2024-06-16 12:56:00 +0200
commitdc684c60d16f66ea84467ec8e253f2a36a17a7c8 (patch)
treee516f1bd4bfbdb37a5aeee42384aade111eca3e1 /patches/server/0925-Add-PlayerShieldDisableEvent.patch
parent752f957e12e4ceb8b7d2043a4a7dbce786b7b98f (diff)
downloadPaper-dc684c60d16f66ea84467ec8e253f2a36a17a7c8.tar.gz
Paper-dc684c60d16f66ea84467ec8e253f2a36a17a7c8.zip
Remove bad server.scheduleOnMain disconnect calls from old patches
The new behavior of disconnect to block the current thread until the disconnect succeeded is better than throwing it off to happen at some point
Diffstat (limited to 'patches/server/0925-Add-PlayerShieldDisableEvent.patch')
-rw-r--r--patches/server/0925-Add-PlayerShieldDisableEvent.patch53
1 files changed, 53 insertions, 0 deletions
diff --git a/patches/server/0925-Add-PlayerShieldDisableEvent.patch b/patches/server/0925-Add-PlayerShieldDisableEvent.patch
new file mode 100644
index 0000000000..f9d5404f63
--- /dev/null
+++ b/patches/server/0925-Add-PlayerShieldDisableEvent.patch
@@ -0,0 +1,53 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Cryptite <[email protected]>
+Date: Mon, 1 May 2023 16:22:43 -0500
+Subject: [PATCH] Add PlayerShieldDisableEvent
+
+Called whenever a players shield is disabled. This is mainly caused by
+attacking players or monsters that carry axes.
+
+The event, while similar to the PlayerItemCooldownEvent, offers other
+behaviour and can hence not be implemented as a childtype of said event.
+Specifically, cancelling the event prevents the game events from being
+sent to the player.
+
+Plugins listening to just the PlayerItemCooldownEvent may not want said
+sideeffects, meaning the disable event cannot share a handlerlist with
+the cooldown event
+
+diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
+index a77c2847a3bc161f0bf25eb4c78305ce18afd904..ffb888262ba81073062f6f513c36108688d0f158 100644
+--- a/src/main/java/net/minecraft/world/entity/player/Player.java
++++ b/src/main/java/net/minecraft/world/entity/player/Player.java
+@@ -1004,7 +1004,7 @@ public abstract class Player extends LivingEntity {
+ protected void blockUsingShield(LivingEntity attacker) {
+ super.blockUsingShield(attacker);
+ if (attacker.canDisableShield()) {
+- this.disableShield();
++ this.disableShield(attacker); // Paper - Add PlayerShieldDisableEvent
+ }
+
+ }
+@@ -1499,8 +1499,21 @@ public abstract class Player extends LivingEntity {
+ this.attack(target);
+ }
+
++ @io.papermc.paper.annotation.DoNotUse @Deprecated // Paper - Add PlayerShieldDisableEvent
+ public void disableShield() {
+- this.getCooldowns().addCooldown(Items.SHIELD, 100);
++ // Paper start - Add PlayerShieldDisableEvent
++ this.disableShield(null);
++ }
++ public void disableShield(@Nullable LivingEntity attacker) {
++ final org.bukkit.entity.Entity finalAttacker = attacker != null ? attacker.getBukkitEntity() : null;
++ if (finalAttacker != null) {
++ final io.papermc.paper.event.player.PlayerShieldDisableEvent shieldDisableEvent = new io.papermc.paper.event.player.PlayerShieldDisableEvent((org.bukkit.entity.Player) getBukkitEntity(), finalAttacker, 100);
++ if (!shieldDisableEvent.callEvent()) return;
++ this.getCooldowns().addCooldown(Items.SHIELD, shieldDisableEvent.getCooldown());
++ } else {
++ this.getCooldowns().addCooldown(Items.SHIELD, 100);
++ }
++ // Paper end - Add PlayerShieldDisableEvent
+ this.stopUsingItem();
+ this.level().broadcastEntityEvent(this, (byte) 30);
+ }