|
20 | 20 | package com.sk89q.worldedit.function.entity; |
21 | 21 |
|
22 | 22 | import com.fastasyncworldedit.core.util.TaskManager; |
| 23 | +import com.sk89q.worldedit.WorldEdit; |
23 | 24 | import com.sk89q.worldedit.WorldEditException; |
24 | 25 | import com.sk89q.worldedit.entity.BaseEntity; |
25 | 26 | import com.sk89q.worldedit.entity.Entity; |
| 27 | +import com.sk89q.worldedit.extension.platform.Capability; |
26 | 28 | import com.sk89q.worldedit.extent.Extent; |
27 | 29 | import com.sk89q.worldedit.function.EntityFunction; |
| 30 | +import com.sk89q.worldedit.internal.Constants; |
28 | 31 | import com.sk89q.worldedit.internal.helper.MCDirections; |
29 | 32 | import com.sk89q.worldedit.math.BlockVector3; |
30 | 33 | import com.sk89q.worldedit.math.Vector3; |
|
38 | 41 | import org.enginehub.linbus.tree.LinFloatTag; |
39 | 42 | import org.enginehub.linbus.tree.LinIntArrayTag; |
40 | 43 | import org.enginehub.linbus.tree.LinListTag; |
| 44 | +import org.enginehub.linbus.tree.LinIntArrayTag; |
41 | 45 | import org.enginehub.linbus.tree.LinNumberTag; |
42 | 46 | import org.enginehub.linbus.tree.LinTag; |
43 | 47 | import org.enginehub.linbus.tree.LinTagType; |
@@ -240,18 +244,35 @@ private BaseEntity transformNbtData(BaseEntity state) { |
240 | 244 | LinTag<?> rotation = tag.value().get("Rotation"); |
241 | 245 | //FAWE end |
242 | 246 |
|
243 | | - if (hasTilePosition) { |
244 | | - Vector3 tilePosition = Vector3.at( |
245 | | - ((LinNumberTag<?>) tag.value().get("TileX")).value().intValue(), |
246 | | - ((LinNumberTag<?>) tag.value().get("TileY")).value().intValue(), ((LinNumberTag<?>) tag.value().get( |
247 | | - "TileZ")).value().intValue() |
| 247 | + Vector3 tilePosition = null; |
| 248 | + |
| 249 | + if (tag.value().get("block_pos") instanceof LinIntArrayTag blockPos) { |
| 250 | + tilePosition = Vector3.at( |
| 251 | + blockPos.value()[0], blockPos.value()[1], blockPos.value()[2] |
| 252 | + ); |
| 253 | + } |
| 254 | + |
| 255 | + if (tag.value().get("TileX") instanceof LinNumberTag<?> tagX |
| 256 | + && tag.value().get("TileY") instanceof LinNumberTag<?> tagY |
| 257 | + && tag.value().get("TileZ") instanceof LinNumberTag<?> tagZ) { |
| 258 | + tilePosition = Vector3.at( |
| 259 | + tagX.value().intValue(), tagY.value().intValue(), tagZ.value().intValue() |
248 | 260 | ); |
| 261 | + } |
| 262 | + |
| 263 | + if (tilePosition != null) { |
249 | 264 | BlockVector3 newTilePosition = transform.apply(tilePosition.subtract(from)).add(to).toBlockPoint(); |
250 | 265 |
|
251 | | - LinCompoundTag.Builder builder = tag.toBuilder() |
252 | | - .putInt("TileX", newTilePosition.x()) |
253 | | - .putInt("TileY", newTilePosition.y()) |
254 | | - .putInt("TileZ", newTilePosition.z()); |
| 266 | + LinCompoundTag.Builder builder = tag.toBuilder(); |
| 267 | + |
| 268 | + if (WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING).getDataVersion() < Constants.DATA_VERSION_MC_1_21_5) { |
| 269 | + // TODO remove when we drop support for 1.21.4 |
| 270 | + builder.putInt("TileX", newTilePosition.x()) |
| 271 | + .putInt("TileY", newTilePosition.y()) |
| 272 | + .putInt("TileZ", newTilePosition.z()); |
| 273 | + } else { |
| 274 | + builder.putIntArray("block_pos", new int[]{newTilePosition.x(), newTilePosition.y(), newTilePosition.z()}); |
| 275 | + } |
255 | 276 |
|
256 | 277 | if (tryGetFacingData(tag) instanceof FacingTagData(String facingKey, LinNumberTag<?> tagFacing)) { |
257 | 278 | boolean isPainting = state.getType() == EntityTypes.PAINTING; // Paintings have different facing values |
|
0 commit comments