From d4a7bbde1d0e816f4346a25092c2d46ca676b540 Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Sun, 8 Jun 2025 20:34:06 +0200 Subject: [PATCH] fix Phantom#setAnchorLocation(null) --- .../sources/net/minecraft/world/entity/Entity.java.patch | 2 +- .../java/org/bukkit/craftbukkit/entity/CraftEntity.java | 2 +- .../org/bukkit/craftbukkit/entity/CraftHumanEntity.java | 6 ++++++ .../java/org/bukkit/craftbukkit/entity/CraftPhantom.java | 1 - 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch index f03594cc77..0ae04510b6 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/Entity.java.patch @@ -942,7 +942,7 @@ EntityType type = this.getType(); ResourceLocation key = EntityType.getKey(type); - return type.canSerialize() && key != null ? key.toString() : null; -+ return (type.canSerialize() || includeNonSaveable) && key != null ? key.toString() : null; // Paper - Raw entity serialization API ++ return (type.canSerialize() || includeNonSaveable) ? key.toString() : null; // Paper - Raw entity serialization API } protected abstract void readAdditionalSaveData(ValueInput input); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index 71ae150811..a41f481a1e 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -1056,7 +1056,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { this.getHandle().registryAccess() ); - tagValueOutput.putString(Entity.TAG_ID, this.getHandle().getEncodeId()); // todo NPE? + tagValueOutput.putString(Entity.TAG_ID, this.getHandle().getEncodeId(true)); this.getHandle().saveWithoutId(tagValueOutput); return tagValueOutput.buildResult(); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java index 9b862c0c1f..8fba3cbac5 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -789,6 +789,9 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @Override public void setShoulderEntityLeft(org.bukkit.entity.Entity entity) { + if (entity != null) { + Preconditions.checkArgument(((CraftEntity) entity).getHandle().getType().canSerialize(), "Cannot set entity of type %s as a shoulder entity", entity.getType().getKey()); + } this.getHandle().setShoulderEntityLeft(entity == null ? new CompoundTag() : ((CraftEntity) entity).save()); if (entity != null) { entity.remove(); @@ -812,6 +815,9 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @Override public void setShoulderEntityRight(org.bukkit.entity.Entity entity) { + if (entity != null) { + Preconditions.checkArgument(((CraftEntity) entity).getHandle().getType().canSerialize(), "Cannot set entity of type %s as a shoulder entity", entity.getType().getKey()); + } this.getHandle().setShoulderEntityRight(entity == null ? new CompoundTag() : ((CraftEntity) entity).save()); if (entity != null) { entity.remove(); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java index 8ef7b968b4..cabdcbef0e 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java @@ -50,7 +50,6 @@ public class CraftPhantom extends CraftMob implements Phantom, CraftEnemy { @Override public void setAnchorLocation(Location location) { - com.google.common.base.Preconditions.checkArgument(location != null, "location cannot be null"); this.getHandle().anchorPoint = location == null ? null : CraftLocation.toBlockPosition(location); } }