aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0474-Add-EntityLoadCrossbowEvent.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0474-Add-EntityLoadCrossbowEvent.patch')
-rw-r--r--patches/server/0474-Add-EntityLoadCrossbowEvent.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/patches/server/0474-Add-EntityLoadCrossbowEvent.patch b/patches/server/0474-Add-EntityLoadCrossbowEvent.patch
new file mode 100644
index 0000000000..074e763090
--- /dev/null
+++ b/patches/server/0474-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..0f6504a7160bc304b3af554f8740c65e2987cd37 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())) {
++ 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..f91ce87491b18f4f4ae6458192d1f320b308102a 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, false);
++ }
++ 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;