From 477f25944a48d6758127751c710a055ce38771a5 Mon Sep 17 00:00:00 2001 From: Aikar 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 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