From 588094fbdc9580cc569dd948b6fe893f4f76772a Mon Sep 17 00:00:00 2001 From: Cryptite Date: Tue, 21 Sep 2021 08:34:03 -0500 Subject: [PATCH] Add PlayerShieldDisableEvent --- .../0001-Add-PlayerShieldDisableEvent.patch | 62 +++++++++++++++++++ .../0002-Add-PlayerShieldDisableEvent.patch | 53 ++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 patches/api/0001-Add-PlayerShieldDisableEvent.patch create mode 100644 patches/server/0002-Add-PlayerShieldDisableEvent.patch diff --git a/patches/api/0001-Add-PlayerShieldDisableEvent.patch b/patches/api/0001-Add-PlayerShieldDisableEvent.patch new file mode 100644 index 000000000..8fe6af006 --- /dev/null +++ b/patches/api/0001-Add-PlayerShieldDisableEvent.patch @@ -0,0 +1,62 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Cryptite +Date: Tue, 21 Sep 2021 08:33:45 -0500 +Subject: [PATCH] Add PlayerShieldDisableEvent + + +diff --git a/src/main/java/io/papermc/paper/event/player/PlayerShieldDisableEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerShieldDisableEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..f0f3a57a0ce76b4736219c6ece52b8bc47a7a4ec +--- /dev/null ++++ b/src/main/java/io/papermc/paper/event/player/PlayerShieldDisableEvent.java +@@ -0,0 +1,50 @@ ++package io.papermc.paper.event.player; ++ ++import org.bukkit.entity.Entity; ++import org.bukkit.entity.Player; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.Event; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++ ++/** ++ * Thrown whenever a Player's shield is disabled ++ */ ++public class PlayerShieldDisableEvent extends PlayerEvent implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ private final Entity damager; ++ private boolean cancelled = false; ++ ++ public PlayerShieldDisableEvent(@NotNull final Player player, @Nullable final Entity damager) { ++ super(player); ++ this.damager = damager; ++ } ++ ++ @Nullable ++ public Entity getDamager() { ++ return damager; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++ ++ @Override ++ public boolean isCancelled() { ++ return cancelled; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel) { ++ cancelled = cancel; ++ } ++} diff --git a/patches/server/0002-Add-PlayerShieldDisableEvent.patch b/patches/server/0002-Add-PlayerShieldDisableEvent.patch new file mode 100644 index 000000000..587661d89 --- /dev/null +++ b/patches/server/0002-Add-PlayerShieldDisableEvent.patch @@ -0,0 +1,53 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Cryptite +Date: Tue, 21 Sep 2021 08:33:45 -0500 +Subject: [PATCH] Add PlayerShieldDisableEvent + + +diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java +index bada11542390b7575466f0e7062470665b8266c4..3879bf37a508675fb4c918516b3f27d5d978c4d1 100644 +--- a/src/main/java/net/minecraft/world/entity/Mob.java ++++ b/src/main/java/net/minecraft/world/entity/Mob.java +@@ -1583,6 +1583,7 @@ public abstract class Mob extends LivingEntity { + float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F; + + if (this.random.nextFloat() < f) { ++ if (!new io.papermc.paper.event.player.PlayerShieldDisableEvent((org.bukkit.entity.Player) player.getBukkitEntity(), getBukkitEntity()).callEvent()) return; // Slice + player.getCooldowns().addCooldown(Items.SHIELD, 100); + this.level.broadcastEntityEvent(player, (byte) 30); + } +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 d8780f06efc261a42389e466573a0bcf10c333f6..a5b7b798143b33c811928b9562f8cd11b484df60 100644 +--- a/src/main/java/net/minecraft/world/entity/player/Player.java ++++ b/src/main/java/net/minecraft/world/entity/player/Player.java +@@ -931,7 +931,7 @@ public abstract class Player extends LivingEntity { + protected void blockUsingShield(LivingEntity attacker) { + super.blockUsingShield(attacker); + if (attacker.getMainHandItem().getItem() instanceof AxeItem) { +- this.disableShield(true); ++ this.disableShield(true, attacker); // Slice + } + + } +@@ -1398,6 +1398,12 @@ public abstract class Player extends LivingEntity { + } + + public void disableShield(boolean sprinting) { ++ // Slice start ++ disableShield(sprinting, null); ++ } ++ ++ public void disableShield(boolean sprinting, @Nullable LivingEntity attacker) { ++ // Slice end + float f = 0.25F + (float) EnchantmentHelper.getBlockEfficiency(this) * 0.05F; + + if (sprinting) { +@@ -1405,6 +1411,8 @@ public abstract class Player extends LivingEntity { + } + + if (this.random.nextFloat() < f) { ++ org.bukkit.entity.Entity finalAttacker = attacker != null ? attacker.getBukkitEntity() : null; // Slice ++ if (!new io.papermc.paper.event.player.PlayerShieldDisableEvent((org.bukkit.entity.Player) getBukkitEntity(), finalAttacker).callEvent()) return; // Slice + this.getCooldowns().addCooldown(Items.SHIELD, 100); + this.stopUsingItem(); + this.level.broadcastEntityEvent(this, (byte) 30);