aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0470-Add-EntityLoadCrossbowEvent.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0470-Add-EntityLoadCrossbowEvent.patch')
-rw-r--r--patches/server/0470-Add-EntityLoadCrossbowEvent.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/patches/server/0470-Add-EntityLoadCrossbowEvent.patch b/patches/server/0470-Add-EntityLoadCrossbowEvent.patch
new file mode 100644
index 0000000000..3c63e2be5a
--- /dev/null
+++ b/patches/server/0470-Add-EntityLoadCrossbowEvent.patch
@@ -0,0 +1,68 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: JRoy <[email protected]>
+Date: Wed, 7 Oct 2020 12:04:01 -0400
+Subject: [PATCH] Add EntityLoadCrossbowEvent
+
+
+diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java
+index 65f23bfb2de91be7560800ff87eab7ad88cb1849..1f52feb5684ee1bab710e1557cf69b43b4d4dfd4 100644
+--- a/src/main/java/net/minecraft/world/item/CrossbowItem.java
++++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java
+@@ -80,7 +80,14 @@ public class CrossbowItem extends ProjectileWeaponItem {
+ public void releaseUsing(ItemStack stack, Level world, LivingEntity user, int remainingUseTicks) {
+ int i = this.getUseDuration(stack) - remainingUseTicks;
+ float f = getPowerForTime(i, stack);
+- if (f >= 1.0F && !isCharged(stack) && tryLoadProjectiles(user, stack)) {
++ // Paper start
++ if (f >= 1.0F && !isCharged(stack)) {
++ final io.papermc.paper.event.entity.EntityLoadCrossbowEvent event = new io.papermc.paper.event.entity.EntityLoadCrossbowEvent(user.getBukkitLivingEntity(), stack.asBukkitMirror(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(user.getUsedItemHand()));
++ if (!event.callEvent() || !tryLoadProjectiles(user, stack, event.shouldConsumeItem()) || !event.shouldConsumeItem()) {
++ if (user instanceof ServerPlayer player) player.containerMenu.sendAllDataToRemote();
++ return;
++ }
++ // Paper end - Add EntityLoadCrossbowEvent
+ world.playSound(
+ null,
+ user.getX(),
+@@ -94,8 +101,14 @@ public class CrossbowItem extends ProjectileWeaponItem {
+ }
+ }
+
+- private static boolean tryLoadProjectiles(LivingEntity shooter, ItemStack crossbow) {
+- List<ItemStack> list = draw(crossbow, shooter.getProjectile(crossbow), shooter);
++ @io.papermc.paper.annotation.DoNotUse // Paper - Add EntityLoadCrossbowEvent
++ private static boolean tryLoadProjectiles(LivingEntity shooter, ItemStack crossbow) {
++ // Paper start - Add EntityLoadCrossbowEvent
++ return CrossbowItem.tryLoadProjectiles(shooter, crossbow, true);
++ }
++ private static boolean tryLoadProjectiles(LivingEntity shooter, ItemStack crossbow, boolean consume) {
++ List<ItemStack> list = draw(crossbow, shooter.getProjectile(crossbow), shooter, consume);
++ // Paper end - Add EntityLoadCrossbowEvent
+ if (!list.isEmpty()) {
+ crossbow.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.of(list));
+ return true;
+diff --git a/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java b/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java
+index 416bdff5cda842143038180592ad231a1d19d926..d27e83c08c45b8514207f26e48ceb1a91ded94be 100644
+--- a/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java
++++ b/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java
+@@ -139,6 +139,11 @@ public abstract class ProjectileWeaponItem extends Item {
+ }
+
+ protected static List<ItemStack> draw(ItemStack weaponStack, ItemStack projectileStack, LivingEntity shooter) {
++ // Paper start
++ return draw(weaponStack, projectileStack, shooter, true);
++ }
++ protected static List<ItemStack> draw(ItemStack weaponStack, ItemStack projectileStack, LivingEntity shooter, boolean consume) {
++ // Paper end
+ if (projectileStack.isEmpty()) {
+ return List.of();
+ } else {
+@@ -148,7 +153,7 @@ public abstract class ProjectileWeaponItem extends Item {
+ ItemStack itemstack2 = projectileStack.copy();
+
+ for (int k = 0; k < j; ++k) {
+- list.add(ProjectileWeaponItem.useAmmo(weaponStack, k == 0 ? projectileStack : itemstack2, shooter, k > 0));
++ list.add(ProjectileWeaponItem.useAmmo(weaponStack, k == 0 ? projectileStack : itemstack2, shooter, k > 0 || !consume)); // Paper
+ }
+
+ return list;