9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-19 15:09:25 +00:00

Cleanup fix to be better

Cleanup and always use updated projectile data on crossbow
This commit is contained in:
Dreeam
2025-09-16 16:40:12 -04:00
parent e4422f64eb
commit 802fed0045

View File

@@ -65,7 +65,7 @@ index d49a5360d4a21e5b15bac94a823831e25d242a3d..04286fdba0c22d5b6d7b3ab71ee1a1fe
CriteriaTriggers.SHOT_CROSSBOW.trigger(serverPlayer, weapon);
serverPlayer.awardStat(Stats.ITEM_USED.get(weapon.getItem()));
diff --git a/net/minecraft/world/item/ProjectileWeaponItem.java b/net/minecraft/world/item/ProjectileWeaponItem.java
index f12b9e4e8a78c713782af548d1cb15ef363305b4..d24b5e8baa6920d8736fe8686200bf39b0ae727a 100644
index f12b9e4e8a78c713782af548d1cb15ef363305b4..799652853481b6d93619d6afaf82185060ebaa41 100644
--- a/net/minecraft/world/item/ProjectileWeaponItem.java
+++ b/net/minecraft/world/item/ProjectileWeaponItem.java
@@ -40,7 +40,20 @@ public abstract class ProjectileWeaponItem extends Item {
@@ -133,7 +133,7 @@ index f12b9e4e8a78c713782af548d1cb15ef363305b4..d24b5e8baa6920d8736fe8686200bf39
if (event.getProjectile() == projectile.getBukkitEntity()) {
if (Projectile.spawnProjectile(
@@ -79,7 +114,26 @@ public abstract class ProjectileWeaponItem extends Item {
@@ -79,7 +114,27 @@ public abstract class ProjectileWeaponItem extends Item {
level,
itemStack
).isRemoved()) {
@@ -150,18 +150,19 @@ index f12b9e4e8a78c713782af548d1cb15ef363305b4..d24b5e8baa6920d8736fe8686200bf39
+ if (!event.shouldConsumeItem() && projectile instanceof final AbstractArrow abstractArrow)
+ abstractArrow.pickup = AbstractArrow.Pickup.CREATIVE_ONLY;
+ if (event.shouldConsumeItem()) {
+ // Update item reference to explicitly use crossbow on hand, since plugin can change item in inventory during this stage
+ weapon = shooter.getItemInHand(hand);
+ if (weapon.is(Items.CROSSBOW)) {
+ List<ItemStack> newProjectiles = new ArrayList<>(projectileItems);
+ List<ItemStack> newProjectiles = new ArrayList<>(weapon.get(DataComponents.CHARGED_PROJECTILES).getItems());
+ newProjectiles.remove(i - (projectileItems.size() - newProjectiles.size()));
+ // Explicitly update new data to crossbow on hand, since plugin can change item in inventory during this stage
+ if (shooter.getItemInHand(hand).is(Items.CROSSBOW)) shooter.getItemInHand(hand).set(DataComponents.CHARGED_PROJECTILES, net.minecraft.world.item.component.ChargedProjectiles.of(newProjectiles));
+ weapon.set(DataComponents.CHARGED_PROJECTILES, net.minecraft.world.item.component.ChargedProjectiles.of(newProjectiles));
+ } else if (level.shouldConsumeArrow) {
+ unrealizedDrawResult.consumeProjectilesFromPlayerInventory(i);
+ // Paper PR end - prevent item consumption for cancelled events
}
}
// CraftBukkit end
@@ -89,6 +143,7 @@ public abstract class ProjectileWeaponItem extends Item {
@@ -89,6 +144,7 @@ public abstract class ProjectileWeaponItem extends Item {
}
}
}
@@ -169,7 +170,7 @@ index f12b9e4e8a78c713782af548d1cb15ef363305b4..d24b5e8baa6920d8736fe8686200bf39
}
protected int getDurabilityUse(ItemStack stack) {
@@ -112,11 +167,21 @@ public abstract class ProjectileWeaponItem extends Item {
@@ -112,11 +168,21 @@ public abstract class ProjectileWeaponItem extends Item {
}
protected static List<ItemStack> draw(ItemStack weapon, ItemStack ammo, LivingEntity shooter) {
@@ -195,7 +196,7 @@ index f12b9e4e8a78c713782af548d1cb15ef363305b4..d24b5e8baa6920d8736fe8686200bf39
if (ammo.isEmpty()) {
return List.of();
} else {
@@ -124,8 +189,9 @@ public abstract class ProjectileWeaponItem extends Item {
@@ -124,8 +190,9 @@ public abstract class ProjectileWeaponItem extends Item {
List<ItemStack> list = new ArrayList<>(i);
ItemStack itemStack = ammo.copy();
@@ -206,7 +207,7 @@ index f12b9e4e8a78c713782af548d1cb15ef363305b4..d24b5e8baa6920d8736fe8686200bf39
if (!itemStack1.isEmpty()) {
list.add(itemStack1);
}
@@ -136,17 +202,23 @@ public abstract class ProjectileWeaponItem extends Item {
@@ -136,17 +203,23 @@ public abstract class ProjectileWeaponItem extends Item {
}
protected static ItemStack useAmmo(ItemStack weapon, ItemStack ammo, LivingEntity shooter, boolean intangable) {