From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: MrPowerGamerBR Date: Sun, 23 Feb 2025 18:53:43 -0300 Subject: [PATCH] Add EntityGetProjectileForWeaponEvent diff --git a/net/minecraft/world/entity/monster/Monster.java b/net/minecraft/world/entity/monster/Monster.java index 5ef9566b16a4d0300ee45a993c46e734db156416..023cc77b31c5e2ad651a51ccb6c7f6b13811beb3 100644 --- a/net/minecraft/world/entity/monster/Monster.java +++ b/net/minecraft/world/entity/monster/Monster.java @@ -137,6 +137,12 @@ public abstract class Monster extends PathfinderMob implements Enemy { @Override public ItemStack getProjectile(ItemStack shootable) { if (shootable.getItem() instanceof ProjectileWeaponItem) { + // SparklyPaper start - Add EntityGetProjectileForWeaponEvent + net.sparklypower.sparklypaper.event.entity.EntityGetProjectileForWeaponEvent event = new net.sparklypower.sparklypaper.event.entity.EntityGetProjectileForWeaponEvent(this.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(shootable)); + event.callEvent(); + if (event.getArrow() != null) + return org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getArrow()); + // SparklyPaper end Predicate supportedHeldProjectiles = ((ProjectileWeaponItem)shootable.getItem()).getSupportedHeldProjectiles(); ItemStack heldProjectile = ProjectileWeaponItem.getHeldProjectile(this, supportedHeldProjectiles); return heldProjectile.isEmpty() ? new ItemStack(Items.ARROW) : heldProjectile; diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java index 2046c4d3ad5ea3254ad6bc83e6437e5c237c92b6..7c3219bf17d7724e2d91748034e4e63a96a1556f 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -2127,6 +2127,12 @@ public abstract class Player extends LivingEntity { if (!(shootable.getItem() instanceof ProjectileWeaponItem)) { return ItemStack.EMPTY; } else { + // SparklyPaper start - Add EntityGetProjectileForWeaponEvent + net.sparklypower.sparklypaper.event.entity.EntityGetProjectileForWeaponEvent event = new net.sparklypower.sparklypaper.event.entity.EntityGetProjectileForWeaponEvent(this.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(shootable)); + event.callEvent(); + if (event.getArrow() != null) + return org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getArrow()); + // SparklyPaper end final org.apache.commons.lang3.mutable.MutableBoolean anyEventCancelled = new org.apache.commons.lang3.mutable.MutableBoolean(); // Paper - PlayerReadyArrowEvent Predicate supportedHeldProjectiles = ((ProjectileWeaponItem)shootable.getItem()).getSupportedHeldProjectiles().and(item -> this.tryReadyArrow(shootable, item, anyEventCancelled)); // Paper - PlayerReadyArrowEvent ItemStack heldProjectile = ProjectileWeaponItem.getHeldProjectile(this, supportedHeldProjectiles);