papermc/Spigot-Server-Patches/0190-Shoulder-Entities-Release-API.patch
Aikar 05466e3b47
[Auto] Update Upstream
Upstream has released updates that appear to apply compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing.

Bukkit Changes:
d2834556 SPIGOT-4219: Event for PigZombies angering.

CraftBukkit Changes:
a9c796f1 SPIGOT-4184: Fix furnaces not matching Vanilla smelt or animations
195f071e SPIGOT-4219: Event for PigZombies angering.
5e3082c7 SPIGOT-4230: Improve legacy block types
2018-08-05 19:46:43 -04:00

103 lines
4.1 KiB
Diff

From d33bc2c9cfecea2a6c4d007cef97daafcaaa1360 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 17 Jun 2017 15:18:30 -0400
Subject: [PATCH] Shoulder Entities Release API
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
index 814202286c..d9f81e6348 100644
--- a/src/main/java/net/minecraft/server/EntityHuman.java
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
@@ -1819,21 +1819,48 @@ public abstract class EntityHuman extends EntityLiving {
}
// CraftBukkit end
}
+ // Paper start
+ public Entity releaseLeftShoulderEntity() {
+ Entity entity = this.spawnEntityFromShoulder0(this.getShoulderEntityLeft());
+ if (entity != null) {
+ this.setShoulderEntityLeft(new NBTTagCompound());
+ }
+ return entity;
+ }
- private boolean spawnEntityFromShoulder(@Nullable NBTTagCompound nbttagcompound) { // CraftBukkit void->boolean
- if (!this.world.isClientSide && !nbttagcompound.isEmpty()) {
+ public Entity releaseRightShoulderEntity() {
+ Entity entity = this.spawnEntityFromShoulder0(this.getShoulderEntityRight());
+ if (entity != null) {
+ this.setShoulderEntityRight(new NBTTagCompound());
+ }
+ return entity;
+ }
+
+ // Paper - incase any plugins used NMS to call this... old method signature to avoid other diff
+ private boolean spawnEntityFromShoulder(@Nullable NBTTagCompound nbttagcompound) {
+ return spawnEntityFromShoulder0(nbttagcompound) != null;
+ }
+ // Paper - Moved to new method that now returns entity, and properly null checks
+ private Entity spawnEntityFromShoulder0(@Nullable NBTTagCompound nbttagcompound) { // CraftBukkit void->boolean - Paper - return Entity
+ if (!this.world.isClientSide && nbttagcompound != null && !nbttagcompound.isEmpty()) { // Paper - null check
Entity entity = EntityTypes.a(nbttagcompound, this.world);
+ if (entity == null) { // Paper - null check
+ return null;
+ }
if (entity instanceof EntityTameableAnimal) {
((EntityTameableAnimal) entity).setOwnerUUID(this.uniqueID);
}
entity.setPosition(this.locX, this.locY + 0.699999988079071D, this.locZ);
- return this.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SHOULDER_ENTITY); // CraftBukkit
+ if (this.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SHOULDER_ENTITY)) { // CraftBukkit
+ return entity;
+ }
}
- return true; // CraftBukkit
+ return null;
}
+ // Paper end
public abstract boolean isSpectator();
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
index cce9366f4d..4afff2f262 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
@@ -455,6 +455,32 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
getHandle().getCooldownTracker().a(CraftMagicNumbers.getItem(material), ticks);
}
+ // Paper start
+ @Override
+ public org.bukkit.entity.Entity releaseLeftShoulderEntity() {
+ if (!getHandle().getShoulderEntityLeft().isEmpty()) {
+ Entity entity = getHandle().releaseLeftShoulderEntity();
+ if (entity != null) {
+ return entity.getBukkitEntity();
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public org.bukkit.entity.Entity releaseRightShoulderEntity() {
+ if (!getHandle().getShoulderEntityRight().isEmpty()) {
+ Entity entity = getHandle().releaseRightShoulderEntity();
+ if (entity != null) {
+ return entity.getBukkitEntity();
+ }
+ }
+
+ return null;
+ }
+ // Paper end
+
@Override
public org.bukkit.entity.Entity getShoulderEntityLeft() {
if (!getHandle().getShoulderEntityLeft().isEmpty()) {
--
2.18.0