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; import org.bukkit.Material; 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 { private final Random random = new Random(); private final CraftItemStack item; public CraftFirework(CraftServer server, EntityFireworks entity) { super(server, entity); ItemStack item = getHandle().getDataWatcher().get(EntityFireworks.FIREWORK_ITEM); if (item.isEmpty()) { item = new ItemStack(Items.FIREWORKS); getHandle().getDataWatcher().set(EntityFireworks.FIREWORK_ITEM, item); } this.item = CraftItemStack.asCraftMirror(item); // Ensure the item is a firework... if (this.item.getType() != Material.FIREWORK) { this.item.setType(Material.FIREWORK); } } @Override public EntityFireworks getHandle() { return (EntityFireworks) entity; } @Override public String toString() { return "CraftFirework"; } @Override public EntityType getType() { return EntityType.FIREWORK; } @Override public FireworkMeta getFireworkMeta() { return (FireworkMeta) item.getItemMeta(); } @Override public void setFireworkMeta(FireworkMeta meta) { item.setItemMeta(meta); // Copied from EntityFireworks constructor, update firework lifetime/power getHandle().expectedLifespan = 10 * (1 + meta.getPower()) + random.nextInt(6) + random.nextInt(7); getHandle().getDataWatcher().markDirty(EntityFireworks.FIREWORK_ITEM); } @Override 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 }