Paper/Spigot-Server-Patches/0166-Firework-API-s.patch
2018-07-23 09:44:57 +01:00

134 lines
5.4 KiB
Diff

From 9e4afcd7dd8a13723ed96074ecc3f71bef52f7d1 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..f9332d3fda 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);
@@ -196,6 +199,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
}
@@ -207,7 +215,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 5eae1724ed..d4420e68fb 100644
--- a/src/main/java/net/minecraft/server/ItemFireworks.java
+++ b/src/main/java/net/minecraft/server/ItemFireworks.java
@@ -19,6 +19,7 @@ public class ItemFireworks extends Item {
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);
}
@@ -33,6 +34,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 e658816c24..0d69deb51c 100644
--- a/src/main/java/net/minecraft/server/NBTTagCompound.java
+++ b/src/main/java/net/minecraft/server/NBTTagCompound.java
@@ -108,7 +108,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.18.0