diff --git a/patches/api/0001-Add-PlayerShieldDisableEvent.patch b/patches/api/0001-Add-PlayerShieldDisableEvent.patch new file mode 100644 index 000000000..873863d7c --- /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: Sun, 27 Feb 2022 09:47:57 -0600 +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/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index 42fdcd3ff..fdb98c226 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Build changes diff --git a/build.gradle.kts b/build.gradle.kts -index cd74406039704e5a880f00b9b60bb7b1dedc5398..c4dfc34277e59143d346725c9ef2bfbcee59bc06 100644 +index 4662952bd0a389fe77e00ede9ab4a57f33522794..3e647d6015313a4545e9ccd03334f8d3a9b4e088 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,8 +18,12 @@ repositories { @@ -23,7 +23,7 @@ index cd74406039704e5a880f00b9b60bb7b1dedc5398..c4dfc34277e59143d346725c9ef2bfbc // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -67,7 +71,7 @@ tasks.jar { +@@ -68,7 +72,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", @@ -32,7 +32,7 @@ index cd74406039704e5a880f00b9b60bb7b1dedc5398..c4dfc34277e59143d346725c9ef2bfbc "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -158,7 +162,7 @@ fun TaskContainer.registerRunTask( +@@ -156,7 +160,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -42,10 +42,10 @@ index cd74406039704e5a880f00b9b60bb7b1dedc5398..c4dfc34277e59143d346725c9ef2bfbc standardInput = System.`in` workingDir = rootProject.layout.projectDirectory diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 893badbe321fa974cb82f5f11ab590bb3827f8b8..4aba540f4bc8014548cc10818472431dfa6b2ede 100644 +index c847a2b935130a293d9ac4c196c9cff27470649b..4ec29c98c951c1665dcef02f1da38fab752505b4 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1708,7 +1708,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop +Date: Sun, 27 Feb 2022 09:47:57 -0600 +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 850a4f8a9bd1dc30b13205e158fcbfaa872d6157..aa9d0ec59d0bbba073d416cc40f273e7d7c4cd50 100644 +--- a/src/main/java/net/minecraft/world/entity/Mob.java ++++ b/src/main/java/net/minecraft/world/entity/Mob.java +@@ -1609,6 +1609,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 d85da02be7f1d494af8f2cc840c49073774f5f9c..2c0c9019245e94a4c89c948eafa837a7d6279b7e 100644 +--- a/src/main/java/net/minecraft/world/entity/player/Player.java ++++ b/src/main/java/net/minecraft/world/entity/player/Player.java +@@ -933,7 +933,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 + } + + } +@@ -1404,6 +1404,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) { +@@ -1411,6 +1417,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);