Skip to content

Commit 1f8c3a7

Browse files
committed
Do not paste unsaveable entities in their default state
Remove a redundant passenger check, as entity.save() returns false in that case. This also causes leash knots to not be copied. I don't think this is a problem because: - They would not be saved to disk, it's misleading for users that they appear. - Pasted leashed mobs still think they're leashed to the original position and get unleashed* - no change in behaviour. \* Unless they're pasted close enough to the original position, in which case this has better behaviour because they create their own leash_knot entity.
1 parent 4ac9103 commit 1f8c3a7

File tree

6 files changed

+34
-32
lines changed

6 files changed

+34
-32
lines changed

worldedit-bukkit/adapters/adapter-1.21.3/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_3/PaperweightAdapter.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,8 @@ private static String getEntityId(Entity entity) {
290290
* @param entity the entity
291291
* @param tag the tag
292292
*/
293-
private static void readEntityIntoTag(Entity entity, net.minecraft.nbt.CompoundTag tag) {
294-
entity.save(tag);
293+
private static boolean readEntityIntoTag(Entity entity, net.minecraft.nbt.CompoundTag tag) {
294+
return entity.save(tag);
295295
}
296296

297297
private static Block getBlockFromType(BlockType blockType) {
@@ -471,15 +471,12 @@ public BaseEntity getEntity(org.bukkit.entity.Entity entity) {
471471
CraftEntity craftEntity = ((CraftEntity) entity);
472472
Entity mcEntity = craftEntity.getHandle();
473473

474-
// Do not allow creating of passenger entity snapshots, passengers are included in the vehicle entity
475-
if (mcEntity.isPassenger()) {
476-
return null;
477-
}
478-
479474
String id = getEntityId(mcEntity);
480475

481476
net.minecraft.nbt.CompoundTag tag = new net.minecraft.nbt.CompoundTag();
482-
readEntityIntoTag(mcEntity, tag);
477+
if (!readEntityIntoTag(mcEntity, tag)) {
478+
return null;
479+
}
483480
return new BaseEntity(
484481
EntityTypes.get(id),
485482
LazyReference.from(() -> (LinCompoundTag) toNative(tag))

worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightAdapter.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,8 @@ private static String getEntityId(Entity entity) {
290290
* @param entity the entity
291291
* @param tag the tag
292292
*/
293-
private static void readEntityIntoTag(Entity entity, net.minecraft.nbt.CompoundTag tag) {
294-
entity.save(tag);
293+
private static boolean readEntityIntoTag(Entity entity, net.minecraft.nbt.CompoundTag tag) {
294+
return entity.save(tag);
295295
}
296296

297297
private static Block getBlockFromType(BlockType blockType) {
@@ -471,15 +471,12 @@ public BaseEntity getEntity(org.bukkit.entity.Entity entity) {
471471
CraftEntity craftEntity = ((CraftEntity) entity);
472472
Entity mcEntity = craftEntity.getHandle();
473473

474-
// Do not allow creating of passenger entity snapshots, passengers are included in the vehicle entity
475-
if (mcEntity.isPassenger()) {
476-
return null;
477-
}
478-
479474
String id = getEntityId(mcEntity);
480475

481476
net.minecraft.nbt.CompoundTag tag = new net.minecraft.nbt.CompoundTag();
482-
readEntityIntoTag(mcEntity, tag);
477+
if (!readEntityIntoTag(mcEntity, tag)) {
478+
return null;
479+
}
483480
return new BaseEntity(
484481
EntityTypes.get(id),
485482
LazyReference.from(() -> (LinCompoundTag) toNative(tag))

worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightAdapter.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,8 @@ private static String getEntityId(Entity entity) {
290290
* @param entity the entity
291291
* @param tag the tag
292292
*/
293-
private static void readEntityIntoTag(Entity entity, net.minecraft.nbt.CompoundTag tag) {
294-
entity.save(tag);
293+
private static boolean readEntityIntoTag(Entity entity, net.minecraft.nbt.CompoundTag tag) {
294+
return entity.save(tag);
295295
}
296296

297297
private static Block getBlockFromType(BlockType blockType) {
@@ -471,15 +471,12 @@ public BaseEntity getEntity(org.bukkit.entity.Entity entity) {
471471
CraftEntity craftEntity = ((CraftEntity) entity);
472472
Entity mcEntity = craftEntity.getHandle();
473473

474-
// Do not allow creating of passenger entity snapshots, passengers are included in the vehicle entity
475-
if (mcEntity.isPassenger()) {
476-
return null;
477-
}
478-
479474
String id = getEntityId(mcEntity);
480475

481476
net.minecraft.nbt.CompoundTag tag = new net.minecraft.nbt.CompoundTag();
482-
readEntityIntoTag(mcEntity, tag);
477+
if (!readEntityIntoTag(mcEntity, tag)) {
478+
return null;
479+
}
483480
return new BaseEntity(
484481
EntityTypes.get(id),
485482
LazyReference.from(() -> (LinCompoundTag) toNative(tag))

worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/internal/FabricEntity.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,14 @@ public FabricEntity(net.minecraft.world.entity.Entity entity) {
5252
@Override
5353
public BaseEntity getState() {
5454
net.minecraft.world.entity.Entity entity = entityRef.get();
55-
if (entity == null || entity.isPassenger()) {
55+
if (entity == null) {
5656
return null;
5757
}
58-
ResourceLocation id = FabricWorldEdit.getRegistry(Registries.ENTITY_TYPE).getKey(entity.getType());
5958
CompoundTag tag = new CompoundTag();
60-
entity.saveWithoutId(tag);
59+
if (!entity.save(tag)) {
60+
return null;
61+
}
62+
ResourceLocation id = FabricWorldEdit.getRegistry(Registries.ENTITY_TYPE).getKey(entity.getType());
6163
return new BaseEntity(
6264
EntityTypes.get(id.toString()),
6365
LazyReference.from(() -> NBTConverter.fromNative(tag))

worldedit-neoforge/src/main/java/com/sk89q/worldedit/neoforge/internal/NeoForgeEntity.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,18 @@ public NeoForgeEntity(net.minecraft.world.entity.Entity entity) {
5252
@Override
5353
public BaseEntity getState() {
5454
net.minecraft.world.entity.Entity entity = entityRef.get();
55-
if (entity == null || entity.isPassenger()) {
55+
if (entity == null) {
5656
return null;
5757
}
58-
ResourceLocation id = BuiltInRegistries.ENTITY_TYPE.getKey(entity.getType());
5958
CompoundTag tag = new CompoundTag();
60-
entity.saveWithoutId(tag);
61-
return new BaseEntity(EntityTypes.get(id.toString()), LazyReference.from(() -> NBTConverter.fromNative(tag)));
59+
if (!entity.save(tag)) {
60+
return null;
61+
}
62+
ResourceLocation id = BuiltInRegistries.ENTITY_TYPE.getKey(entity.getType());
63+
return new BaseEntity(
64+
EntityTypes.get(id.toString()),
65+
LazyReference.from(() -> NBTConverter.fromNative(tag))
66+
);
6267
}
6368

6469
@Override

worldedit-sponge/src/main/java/com/sk89q/worldedit/sponge/SpongeEntity.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ public BaseEntity getState() {
5353
if (entity == null || entity.vehicle().isPresent()) {
5454
return null;
5555
}
56-
EntityType entityType = EntityType.REGISTRY.get(entity.type().key(RegistryTypes.ENTITY_TYPE).asString());
56+
org.spongepowered.api.entity.EntityType<?> spongeEntityType = entity.type();
57+
if (spongeEntityType.isTransient()) {
58+
return null;
59+
}
60+
EntityType entityType = EntityType.REGISTRY.get(spongeEntityType.key(RegistryTypes.ENTITY_TYPE).asString());
5761
if (entityType == null) {
5862
return null;
5963
}

0 commit comments

Comments
 (0)