-
-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Expand file tree
/
Copy pathFireworkRocketItem.java.patch
More file actions
59 lines (57 loc) · 4.12 KB
/
FireworkRocketItem.java.patch
File metadata and controls
59 lines (57 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
--- a/net/minecraft/world/item/FireworkRocketItem.java
+++ b/net/minecraft/world/item/FireworkRocketItem.java
@@ -36,7 +_,7 @@
ItemStack itemInHand = context.getItemInHand();
Vec3 clickLocation = context.getClickLocation();
Direction clickedFace = context.getClickedFace();
- Projectile.spawnProjectile(
+ final Projectile.Delayed<FireworkRocketEntity> fireworkRocketEntity = Projectile.spawnProjectileDelayed( // Paper - PlayerLaunchProjectileEvent
new FireworkRocketEntity(
level,
context.getPlayer(),
@@ -46,9 +_,14 @@
itemInHand
),
serverLevel,
- itemInHand
+ itemInHand, f -> f.spawningEntity = context.getPlayer() == null ? null : context.getPlayer().getUUID() // Paper - firework api - assign spawning entity uuid
);
- itemInHand.shrink(1);
+ // Paper start - PlayerLaunchProjectileEvent
+ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) context.getPlayer().getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Firework) fireworkRocketEntity.projectile().getBukkitEntity());
+ if (!event.callEvent() || !fireworkRocketEntity.attemptSpawn()) return InteractionResult.PASS;
+ if (event.shouldConsume() && !context.getPlayer().hasInfiniteMaterials()) itemInHand.shrink(1);
+ else context.getPlayer().containerMenu.forceHeldSlot(context.getHand());
+ // Paper end - PlayerLaunchProjectileEvent
}
return InteractionResult.SUCCESS;
@@ -60,13 +_,24 @@
if (player.isFallFlying()) {
ItemStack itemInHand = player.getItemInHand(hand);
if (level instanceof ServerLevel serverLevel) {
- if (player.dropAllLeashConnections(null)) {
- level.playSound(null, player, SoundEvents.LEAD_BREAK, SoundSource.NEUTRAL, 1.0F, 1.0F);
+ // Paper start - PlayerElytraBoostEvent
+ final Projectile.Delayed<FireworkRocketEntity> delayed = Projectile.spawnProjectileDelayed(new FireworkRocketEntity(level, itemInHand, player), serverLevel, itemInHand, f -> f.spawningEntity = player.getUUID()); // Paper - firework api - assign spawning entity uuid
+ com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Firework) delayed.projectile().getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand));
+ if (event.callEvent() && delayed.attemptSpawn()) {
+ player.awardStat(Stats.ITEM_USED.get(this)); // Moved up from below
+ if (player.dropAllLeashConnections(player, hand)) { // Paper - PlayerUnleashEntityEvent
+ level.playSound(null, player, SoundEvents.LEAD_BREAK, SoundSource.NEUTRAL, 1.0F, 1.0F);
+ }
+ if (event.shouldConsume() && !player.hasInfiniteMaterials()) {
+ itemInHand.shrink(1); // Moved up from below
+ } else {
+ player.containerMenu.forceHeldSlot(hand);
+ }
+ } else {
+ player.containerMenu.forceHeldSlot(hand);
}
-
- Projectile.spawnProjectile(new FireworkRocketEntity(level, itemInHand, player), serverLevel, itemInHand);
- itemInHand.consume(1, player);
- player.awardStat(Stats.ITEM_USED.get(this));
+ // Moved up consume and changed consume to shrink
+ // Paper end - PlayerElytraBoostEvent
}
return InteractionResult.SUCCESS;