diff --git a/Spigot-API-Patches/0125-PlayerElytraBoostEvent.patch b/Spigot-API-Patches/0125-PlayerElytraBoostEvent.patch new file mode 100644 index 000000000..d2970da16 --- /dev/null +++ b/Spigot-API-Patches/0125-PlayerElytraBoostEvent.patch @@ -0,0 +1,95 @@ +From f0c0d6c6182c1c89de1125c0c2f22559724cfaf5 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Sat, 21 Jul 2018 01:59:53 -0500 +Subject: [PATCH] PlayerElytraBoostEvent + + +diff --git a/src/main/java/com/destroystokyo/paper/event/player/PlayerElytraBoostEvent.java b/src/main/java/com/destroystokyo/paper/event/player/PlayerElytraBoostEvent.java +new file mode 100644 +index 00000000..cecb2182 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/player/PlayerElytraBoostEvent.java +@@ -0,0 +1,80 @@ ++package com.destroystokyo.paper.event.player; ++ ++import org.bukkit.entity.Firework; ++import org.bukkit.entity.Player; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.bukkit.inventory.ItemStack; ++ ++/** ++ * Fired when a player boosts elytra flight with a firework ++ */ ++public class PlayerElytraBoostEvent extends PlayerEvent implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ private boolean cancelled = false; ++ private final ItemStack itemStack; ++ private Firework firework; ++ private boolean consume = true; ++ ++ public PlayerElytraBoostEvent(Player player, ItemStack itemStack, Firework firework) { ++ super(player); ++ this.itemStack = itemStack; ++ this.firework = firework; ++ } ++ ++ /** ++ * Get the firework itemstack used ++ * ++ * @return ItemStack of firework ++ */ ++ public ItemStack getItemStack() { ++ return itemStack; ++ } ++ ++ /** ++ * Get the firework entity that was spawned ++ * ++ * @return Firework entity ++ */ ++ public Firework getFirework() { ++ return firework; ++ } ++ ++ /** ++ * Get whether to consume the firework or not ++ * ++ * @return True to consume ++ */ ++ public boolean shouldConsume() { ++ return consume; ++ } ++ ++ /** ++ * Set whether to consume the firework or not ++ * ++ * @param consume True to consume ++ */ ++ public void setShouldConsume(boolean consume) { ++ this.consume = consume; ++ } ++ ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++ ++ @Override ++ public boolean isCancelled() { ++ return cancelled; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel) { ++ cancelled = cancel; ++ } ++} +-- +2.11.0 + diff --git a/Spigot-Server-Patches/0299-PlayerElytraBoostEvent.patch b/Spigot-Server-Patches/0299-PlayerElytraBoostEvent.patch new file mode 100644 index 000000000..244a473ce --- /dev/null +++ b/Spigot-Server-Patches/0299-PlayerElytraBoostEvent.patch @@ -0,0 +1,32 @@ +From bddfab42af36131c6cadd4e233230ff085a16fc0 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Sat, 21 Jul 2018 01:59:59 -0500 +Subject: [PATCH] PlayerElytraBoostEvent + + +diff --git a/src/main/java/net/minecraft/server/ItemFireworks.java b/src/main/java/net/minecraft/server/ItemFireworks.java +index 1493d0999..48cc5bf7d 100644 +--- a/src/main/java/net/minecraft/server/ItemFireworks.java ++++ b/src/main/java/net/minecraft/server/ItemFireworks.java +@@ -35,9 +35,15 @@ public class ItemFireworks extends Item { + EntityFireworks entityfireworks = new EntityFireworks(world, itemstack, entityhuman); + + entityfireworks.spawningEntity = entityhuman.getUniqueID(); // Paper +- world.addEntity(entityfireworks); +- if (!entityhuman.abilities.canInstantlyBuild) { +- itemstack.subtract(1); ++ // Paper start ++ com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Firework) entityfireworks.getBukkitEntity()); ++ if (event.callEvent() && world.addEntity(entityfireworks)) { ++ if (event.shouldConsume() && !entityhuman.abilities.canInstantlyBuild) { ++ itemstack.subtract(1); ++ } else ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); ++ } else if (entityhuman instanceof EntityPlayer) { ++ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); ++ // Paper end + } + } + +-- +2.11.0 +