From 1d664d9326e3b0efc0924d92a47926ab2420661f 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 5e452b93c..28e12f7cc 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(world); @@ -203,6 +206,11 @@ public class EntityFireworks extends Entity { if (!itemstack.isEmpty()) { nbttagcompound.set("FireworksItem", itemstack.save(new NBTTagCompound())); } + // Paper start + if (spawningEntity != null) { + nbttagcompound.setUUID("SpawningEntity", spawningEntity); + } + // Paper end } @@ -218,7 +226,11 @@ public class EntityFireworks extends Entity { this.datawatcher.set(EntityFireworks.FIREWORK_ITEM, itemstack); } } - + // Paper start + if (nbttagcompound.hasUUID("SpawningEntity")) { + spawningEntity = nbttagcompound.getUUID("SpawningEntity"); + } + // Paper end } public boolean bb() { diff --git a/src/main/java/net/minecraft/server/ItemFireworks.java b/src/main/java/net/minecraft/server/ItemFireworks.java index dc8952340..b7569b2bd 100644 --- a/src/main/java/net/minecraft/server/ItemFireworks.java +++ b/src/main/java/net/minecraft/server/ItemFireworks.java @@ -9,6 +9,7 @@ public class ItemFireworks extends Item { ItemStack itemstack = entityhuman.b(enumhand); EntityFireworks entityfireworks = new EntityFireworks(world, (double) ((float) blockposition.getX() + f), (double) ((float) blockposition.getY() + f1), (double) ((float) blockposition.getZ() + f2), itemstack); + entityfireworks.spawningEntity = entityhuman.getUniqueID(); // Paper world.addEntity(entityfireworks); if (!entityhuman.abilities.canInstantlyBuild) { itemstack.subtract(1); @@ -25,6 +26,7 @@ public class ItemFireworks extends Item { 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 e15c23367..82c2537b3 100644 --- a/src/main/java/net/minecraft/server/NBTTagCompound.java +++ b/src/main/java/net/minecraft/server/NBTTagCompound.java @@ -106,7 +106,7 @@ public class NBTTagCompound extends 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 99746b3c2..d4fbe31d6 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.13.0