mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-05 02:10:30 +01:00
40 lines
2.5 KiB
Diff
40 lines
2.5 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: JRoy <joshroy126@gmail.com>
|
||
|
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 35f3f3887c0696b757553af9a5997506c97b24c0..d670ac2b57ecbdd6ff5426c233e23e634d4f665d 100644
|
||
|
--- a/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
||
|
+++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java
|
||
|
@@ -90,7 +90,11 @@ 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())) return;
|
||
|
+ // Paper end
|
||
|
CrossbowItem.setCharged(stack, true);
|
||
|
SoundSource soundcategory = user instanceof Player ? SoundSource.PLAYERS : SoundSource.HOSTILE;
|
||
|
|
||
|
@@ -100,9 +104,14 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable {
|
||
|
}
|
||
|
|
||
|
private static boolean tryLoadProjectiles(LivingEntity shooter, ItemStack projectile) {
|
||
|
+ // Paper start
|
||
|
+ return CrossbowItem.tryLoadProjectiles(shooter, projectile, true);
|
||
|
+ }
|
||
|
+ private static boolean tryLoadProjectiles(LivingEntity shooter, ItemStack projectile, boolean consume) {
|
||
|
+ // Paper end
|
||
|
int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, projectile);
|
||
|
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 consme
|
||
|
ItemStack itemstack1 = shooter.getProjectile(projectile);
|
||
|
ItemStack itemstack2 = itemstack1.copy();
|
||
|
|