aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0520-Add-EntityLoadCrossbowEvent.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0520-Add-EntityLoadCrossbowEvent.patch')
-rw-r--r--patches/server/0520-Add-EntityLoadCrossbowEvent.patch44
1 files changed, 44 insertions, 0 deletions
diff --git a/patches/server/0520-Add-EntityLoadCrossbowEvent.patch b/patches/server/0520-Add-EntityLoadCrossbowEvent.patch
new file mode 100644
index 0000000000..07e5946fbf
--- /dev/null
+++ b/patches/server/0520-Add-EntityLoadCrossbowEvent.patch
@@ -0,0 +1,44 @@
+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 ba570f1c9654e1004e068a1efe2118f36c954505..eede02c3f125d230af537bb67bebed9b88f7d1b4 100644
+--- a/src/main/java/net/minecraft/world/item/CrossbowItem.java
++++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java
+@@ -89,7 +89,14 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
+ int j = this.getUseDuration(stack) - remainingUseTicks;
+ float f = CrossbowItem.getPowerForTime(j, stack);
+
+- if (f >= 1.0F && !CrossbowItem.isCharged(stack) && CrossbowItem.tryLoadProjectiles(user, stack)) {
++ // Paper start - EntityLoadCrossbowEvent
++ if (f >= 1.0F && !CrossbowItem.isCharged(stack) /*&& CrossbowItem.tryLoadProjectiles(entityliving, itemstack)*/) {
++ final io.papermc.paper.event.entity.EntityLoadCrossbowEvent event = new io.papermc.paper.event.entity.EntityLoadCrossbowEvent(user.getBukkitLivingEntity(), stack.asBukkitMirror(), user.getUsedItemHand() == InteractionHand.MAIN_HAND ? org.bukkit.inventory.EquipmentSlot.HAND : org.bukkit.inventory.EquipmentSlot.OFF_HAND);
++ if (!event.callEvent() || !tryLoadProjectiles(user, stack, event.shouldConsumeItem())) {
++ if (user instanceof ServerPlayer player) player.containerMenu.sendAllDataToRemote();
++ return;
++ }
++ // Paper end
+ CrossbowItem.setCharged(stack, true);
+ SoundSource soundcategory = user instanceof Player ? SoundSource.PLAYERS : SoundSource.HOSTILE;
+
+@@ -98,10 +105,16 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
+
+ }
+
++ @io.papermc.paper.annotation.DoNotUse // Paper
+ private static boolean tryLoadProjectiles(LivingEntity shooter, ItemStack crossbow) {
++ // Paper start
++ return CrossbowItem.tryLoadProjectiles(shooter, crossbow, true);
++ }
++ private static boolean tryLoadProjectiles(LivingEntity shooter, ItemStack crossbow, boolean consume) {
++ // Paper end
+ int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, crossbow);
+ int j = i == 0 ? 1 : 3;
+- boolean flag = shooter instanceof Player && ((Player) shooter).getAbilities().instabuild;
++ boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild; // Paper - add consume
+ ItemStack itemstack1 = shooter.getProjectile(crossbow);
+ ItemStack itemstack2 = itemstack1.copy();
+