From 38fd6ea28a3b7560f0ec309f7bfa7ea6571c8655 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 28 Dec 2016 01:18:33 -0500
Subject: [PATCH] Firework API's


diff --git a/src/main/java/net/minecraft/server/EntityFireworks.java b/src/main/java/net/minecraft/server/EntityFireworks.java
index 6e2592e96d..7ff57d9cda 100644
--- a/src/main/java/net/minecraft/server/EntityFireworks.java
+++ b/src/main/java/net/minecraft/server/EntityFireworks.java
@@ -2,6 +2,8 @@ package net.minecraft.server;
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.UUID;
+
 import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit
 
 public class EntityFireworks extends Entity {
@@ -10,7 +12,8 @@ public class EntityFireworks extends Entity {
     private static final DataWatcherObject<Integer> b = DataWatcher.a(EntityFireworks.class, DataWatcherRegistry.b);
     private int ticksFlown;
     public int expectedLifespan;
-    private EntityLiving e;
+    public UUID spawningEntity; // Paper
+    private EntityLiving e;public EntityLiving getBoostedEntity() { return e; } // Paper - OBFHELPER
 
     public EntityFireworks(World world) {
         super(EntityTypes.FIREWORK_ROCKET, world);
@@ -197,6 +200,12 @@ public class EntityFireworks extends Entity {
             nbttagcompound.set("FireworksItem", itemstack.save(new NBTTagCompound()));
         }
 
+        // Paper start
+        if (spawningEntity != null) {
+            nbttagcompound.setUUID("SpawningEntity", spawningEntity);
+        }
+        // Paper end
+
     }
 
     public void a(NBTTagCompound nbttagcompound) {
@@ -207,7 +216,11 @@ public class EntityFireworks extends Entity {
         if (!itemstack.isEmpty()) {
             this.datawatcher.set(EntityFireworks.FIREWORK_ITEM, itemstack);
         }
-
+        // Paper start
+        if (nbttagcompound.hasUUID("SpawningEntity")) {
+            spawningEntity = nbttagcompound.getUUID("SpawningEntity");
+        }
+        // Paper end
     }
 
     public boolean bk() {
diff --git a/src/main/java/net/minecraft/server/ItemFireworks.java b/src/main/java/net/minecraft/server/ItemFireworks.java
index 936faccbf8..d971bbc76c 100644
--- a/src/main/java/net/minecraft/server/ItemFireworks.java
+++ b/src/main/java/net/minecraft/server/ItemFireworks.java
@@ -14,6 +14,7 @@ public class ItemFireworks extends Item {
             BlockPosition blockposition = itemactioncontext.getClickPosition();
             ItemStack itemstack = itemactioncontext.getItemStack();
             EntityFireworks entityfireworks = new EntityFireworks(world, (double)((float)blockposition.getX() + itemactioncontext.m()), (double)((float)blockposition.getY() + itemactioncontext.n()), (double)((float)blockposition.getZ() + itemactioncontext.o()), itemstack);
+            entityfireworks.spawningEntity = itemactioncontext.b.getUniqueID(); // Paper
             world.addEntity(entityfireworks);
             itemstack.subtract(1);
         }
@@ -26,6 +27,7 @@ public class ItemFireworks extends Item {
             ItemStack itemstack = entityhuman.b(enumhand);
             if (!world.isClientSide) {
                 EntityFireworks entityfireworks = new EntityFireworks(world, itemstack, entityhuman);
+                entityfireworks.spawningEntity = entityhuman.getUniqueID(); // Paper
                 world.addEntity(entityfireworks);
                 if (!entityhuman.abilities.canInstantlyBuild) {
                     itemstack.subtract(1);
diff --git a/src/main/java/net/minecraft/server/NBTTagCompound.java b/src/main/java/net/minecraft/server/NBTTagCompound.java
index 2a66a30264..6046e3e7b9 100644
--- a/src/main/java/net/minecraft/server/NBTTagCompound.java
+++ b/src/main/java/net/minecraft/server/NBTTagCompound.java
@@ -101,7 +101,7 @@ public class NBTTagCompound implements NBTBase {
         return new UUID(this.getLong(s + "Most"), this.getLong(s + "Least"));
     }
 
-    public boolean b(String s) {
+    public boolean hasUUID(String s) { return b(s); } public boolean b(String s) { // Paper - OBFHELPER
         return this.hasKeyOfType(s + "Most", 99) && this.hasKeyOfType(s + "Least", 99);
     }
 
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
index 7b3b206823..b39e33f4f0 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
@@ -1,6 +1,7 @@
 package org.bukkit.craftbukkit.entity;
 
 import net.minecraft.server.EntityFireworks;
+import net.minecraft.server.EntityLiving;
 import net.minecraft.server.ItemStack;
 import net.minecraft.server.Items;
 
@@ -9,9 +10,11 @@ import org.bukkit.craftbukkit.CraftServer;
 import org.bukkit.craftbukkit.inventory.CraftItemStack;
 import org.bukkit.entity.EntityType;
 import org.bukkit.entity.Firework;
+import org.bukkit.entity.LivingEntity;
 import org.bukkit.inventory.meta.FireworkMeta;
 
 import java.util.Random;
+import java.util.UUID;
 
 public class CraftFirework extends CraftEntity implements Firework {
 
@@ -70,4 +73,18 @@ public class CraftFirework extends CraftEntity implements Firework {
     public void detonate() {
         getHandle().expectedLifespan = 0;
     }
+
+    // Paper start
+
+    @Override
+    public UUID getSpawningEntity() {
+        return getHandle().spawningEntity;
+    }
+
+    @Override
+    public LivingEntity getBoostedEntity() {
+        EntityLiving boostedEntity = getHandle().getBoostedEntity();
+        return boostedEntity != null ? (LivingEntity) boostedEntity.getBukkitEntity() : null;
+    }
+    // Paper end
 }
-- 
2.19.0