From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> Date: Fri, 31 Mar 2023 00:39:40 +0300 Subject: [PATCH] Fix entity serialization diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index f6c9bff8ef4e370dcb351490294181282ad156e3..bc0abec15b6d8e1299a0d8c86265027e74c705d1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -2343,15 +2343,6 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } - // Paper start - Entity serialization api - public boolean serializeEntity(CompoundTag compound) { - List pass = new java.util.ArrayList<>(this.getPassengers()); - this.passengers = ImmutableList.of(); - boolean result = save(compound); - this.passengers = ImmutableList.copyOf(pass); - return result; - } - // Paper end - Entity serialization api public boolean save(CompoundTag nbt) { return this.isPassenger() ? false : this.saveAsPassenger(nbt); } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index d5f642e4b1c1ede7e9d2dea072aa5f22c73b5c23..11110398ebd42e4049e36a90d5677bdd8a7d550c 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -523,8 +523,13 @@ public final class CraftMagicNumbers implements UnsafeValues { Preconditions.checkNotNull(entity, "null cannot be serialized"); Preconditions.checkArgument(entity instanceof org.bukkit.craftbukkit.entity.CraftEntity, "only CraftEntities can be serialized"); + net.minecraft.world.entity.Entity nmsEntity = ((org.bukkit.craftbukkit.entity.CraftEntity) entity).getHandle(); CompoundTag compound = new CompoundTag(); - ((org.bukkit.craftbukkit.entity.CraftEntity) entity).getHandle().serializeEntity(compound); + compound.putString("id", net.minecraft.world.entity.EntityType.getKey(nmsEntity.getType()).toString()); + List pass = new java.util.ArrayList<>(nmsEntity.getPassengers()); + nmsEntity.passengers = com.google.common.collect.ImmutableList.of(); + nmsEntity.saveWithoutId(compound); + nmsEntity.passengers = com.google.common.collect.ImmutableList.copyOf(pass); return serializeNbtToBytes(compound); }