diff --git a/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java b/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java index 7c68e6cdf..b7f15e27f 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java @@ -32,6 +32,7 @@ import com.sk89q.worldedit.blocks.BaseItemStack; import com.sk89q.worldedit.blocks.LazyBlock; import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.Entity; +import com.sk89q.worldedit.internal.Constants; import com.sk89q.worldedit.internal.helper.MCDirections; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.Direction; @@ -491,10 +492,10 @@ public class ForgeWorld extends AbstractWorld { if (o == null) { return false; } else if ((o instanceof ForgeWorld)) { - ForgeWorld other = ((ForgeWorld) o); - World otherWorld = other.worldRef.get(); - World thisWorld = other.worldRef.get(); - return otherWorld != null && thisWorld != null && otherWorld.equals(thisWorld); + ForgeWorld other = ((ForgeWorld) o); + World otherWorld = other.worldRef.get(); + World thisWorld = other.worldRef.get(); + return otherWorld != null && thisWorld != null && otherWorld.equals(thisWorld); } else if (o instanceof com.sk89q.worldedit.world.World) { return ((com.sk89q.worldedit.world.World) o).getName().equals(getName()); } else { @@ -539,9 +540,13 @@ public class ForgeWorld extends AbstractWorld { World world = getWorld(); net.minecraft.entity.Entity createdEntity = EntityList.createEntityByName(entity.getTypeId(), world); if (createdEntity != null) { - CompoundTag tag = entity.getNbtData(); - if (tag != null) { - createdEntity.readFromNBT(NBTConverter.toNative(entity.getNbtData())); + CompoundTag nativeTag = entity.getNbtData(); + if (nativeTag != null) { + NBTTagCompound tag = NBTConverter.toNative(entity.getNbtData()); + for (String name : Constants.NO_COPY_ENTITY_NBT_FIELDS) { + tag.removeTag(name); + } + createdEntity.readFromNBT(tag); } createdEntity.setLocationAndAngles(location.getX(), location.getY(), location.getZ(), (float) Math.toDegrees(location.getYaw()), (float) Math.toDegrees(location.getPitch())); diff --git a/src/main/java/com/sk89q/worldedit/internal/Constants.java b/src/main/java/com/sk89q/worldedit/internal/Constants.java new file mode 100644 index 000000000..9194866b4 --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/internal/Constants.java @@ -0,0 +1,45 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.internal; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public final class Constants { + + private Constants() { + } + + /** + * List of top level NBT fields that should not be copied to a world, + * such as UUIDLeast and UUIDMost. + */ + public static final List NO_COPY_ENTITY_NBT_FIELDS; + + static { + NO_COPY_ENTITY_NBT_FIELDS = Collections.unmodifiableList(Arrays.asList( + "UUIDLeast", "UUIDMost", // Bukkit and Vanilla + "WorldUUIDLeast", "WorldUUIDMost", // Bukkit and Vanilla + "PersistentIDMSB", "PersistentIDLSB" // Forge + )); + } + +}