mirror of
https://github.com/PaperMC/Paper.git
synced 2025-05-19 05:30:23 -07:00
Pass correct draw strength for EntityShootBowEvent (#12308)
This commit is contained in:
parent
d637ae85dd
commit
1074237311
@ -48,7 +48,7 @@
|
|||||||
double squareRoot = Math.sqrt(d * d + d2 * d2);
|
double squareRoot = Math.sqrt(d * d + d2 * d2);
|
||||||
if (this.level() instanceof ServerLevel serverLevel) {
|
if (this.level() instanceof ServerLevel serverLevel) {
|
||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), arrow.getPickupItem(), arrow, net.minecraft.world.InteractionHand.MAIN_HAND, 0.8F, true); // Paper - improve entity shoot bow event, add arrow stack to event
|
+ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), arrow.getPickupItem(), arrow, net.minecraft.world.InteractionHand.MAIN_HAND, distanceFactor, true); // Paper - improve entity shoot bow event, add arrow stack to event
|
||||||
+ if (event.isCancelled()) {
|
+ if (event.isCancelled()) {
|
||||||
+ event.getProjectile().remove();
|
+ event.getProjectile().remove();
|
||||||
+ return;
|
+ return;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
double squareRoot = Math.sqrt(d * d + d2 * d2);
|
double squareRoot = Math.sqrt(d * d + d2 * d2);
|
||||||
if (this.level() instanceof ServerLevel serverLevel) {
|
if (this.level() instanceof ServerLevel serverLevel) {
|
||||||
+ // Paper start - EntityShootBowEvent
|
+ // Paper start - EntityShootBowEvent
|
||||||
+ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), mobArrow.getPickupItem(), mobArrow, target.getUsedItemHand(), 0.8F, true);
|
+ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), mobArrow.getPickupItem(), mobArrow, target.getUsedItemHand(), distanceFactor, true);
|
||||||
+ if (event.isCancelled()) {
|
+ if (event.isCancelled()) {
|
||||||
+ event.getProjectile().remove();
|
+ event.getProjectile().remove();
|
||||||
+ return;
|
+ return;
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
--- a/net/minecraft/world/item/BowItem.java
|
||||||
|
+++ b/net/minecraft/world/item/BowItem.java
|
||||||
|
@@ -38,7 +_,7 @@
|
||||||
|
} else {
|
||||||
|
List<ItemStack> list = draw(stack, projectile, player);
|
||||||
|
if (level instanceof ServerLevel serverLevel && !list.isEmpty()) {
|
||||||
|
- this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, powerForTime * 3.0F, 1.0F, powerForTime == 1.0F, null);
|
||||||
|
+ this.shoot(serverLevel, player, player.getUsedItemHand(), stack, list, powerForTime * 3.0F, 1.0F, powerForTime == 1.0F, null, powerForTime); // Paper - Pass draw strength
|
||||||
|
}
|
||||||
|
|
||||||
|
level.playSound(
|
@ -30,6 +30,15 @@
|
|||||||
} else {
|
} else {
|
||||||
Projectile projectile = super.createProjectile(level, shooter, weapon, ammo, isCrit);
|
Projectile projectile = super.createProjectile(level, shooter, weapon, ammo, isCrit);
|
||||||
if (projectile instanceof AbstractArrow abstractArrow) {
|
if (projectile instanceof AbstractArrow abstractArrow) {
|
||||||
|
@@ -163,7 +_,7 @@
|
||||||
|
if (level instanceof ServerLevel serverLevel) {
|
||||||
|
ChargedProjectiles chargedProjectiles = weapon.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY);
|
||||||
|
if (chargedProjectiles != null && !chargedProjectiles.isEmpty()) {
|
||||||
|
- this.shoot(serverLevel, shooter, hand, weapon, chargedProjectiles.getItems(), velocity, inaccuracy, shooter instanceof Player, target);
|
||||||
|
+ this.shoot(serverLevel, shooter, hand, weapon, chargedProjectiles.getItems(), velocity, inaccuracy, shooter instanceof Player, target, 1); // Paper - Pass draw strength
|
||||||
|
if (shooter instanceof ServerPlayer serverPlayer) {
|
||||||
|
CriteriaTriggers.SHOT_CROSSBOW.trigger(serverPlayer, weapon);
|
||||||
|
serverPlayer.awardStat(Stats.ITEM_USED.get(weapon.getItem()));
|
||||||
@@ -211,7 +_,14 @@
|
@@ -211,7 +_,14 @@
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,13 @@
|
|||||||
--- a/net/minecraft/world/item/ProjectileWeaponItem.java
|
--- a/net/minecraft/world/item/ProjectileWeaponItem.java
|
||||||
+++ b/net/minecraft/world/item/ProjectileWeaponItem.java
|
+++ b/net/minecraft/world/item/ProjectileWeaponItem.java
|
||||||
|
@@ -50,6 +_,7 @@
|
||||||
|
float inaccuracy,
|
||||||
|
boolean isCrit,
|
||||||
|
@Nullable LivingEntity target
|
||||||
|
+ ,float drawStrength // Paper - Pass draw strength
|
||||||
|
) {
|
||||||
|
float f = EnchantmentHelper.processProjectileSpread(level, weapon, shooter, 0.0F);
|
||||||
|
float f1 = projectileItems.size() == 1 ? 0.0F : 2.0F * f / (projectileItems.size() - 1);
|
||||||
@@ -62,12 +_,29 @@
|
@@ -62,12 +_,29 @@
|
||||||
float f4 = f2 + f3 * ((i + 1) / 2) * f1;
|
float f4 = f2 + f3 * ((i + 1) / 2) * f1;
|
||||||
f3 = -f3;
|
f3 = -f3;
|
||||||
@ -14,7 +22,7 @@
|
|||||||
+ Projectile projectile = this.createProjectile(level, shooter, weapon, itemStack, isCrit);
|
+ Projectile projectile = this.createProjectile(level, shooter, weapon, itemStack, isCrit);
|
||||||
+ this.shootProjectile(shooter, projectile, i1, velocity, inaccuracy, f4, target);
|
+ this.shootProjectile(shooter, projectile, i1, velocity, inaccuracy, f4, target);
|
||||||
+
|
+
|
||||||
+ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(shooter, weapon, itemStack, projectile, hand, velocity, true);
|
+ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(shooter, weapon, itemStack, projectile, hand, drawStrength, true);
|
||||||
+ if (event.isCancelled()) {
|
+ if (event.isCancelled()) {
|
||||||
+ event.getProjectile().remove();
|
+ event.getProjectile().remove();
|
||||||
+ return;
|
+ return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user