From a9b3fb14298f6c73073385c7ff87d08da175f590 Mon Sep 17 00:00:00 2001 From: Matthew Miller Date: Mon, 22 Jul 2019 22:24:45 +1000 Subject: [PATCH] Fixed tile entity interaction with Fabric --- .../sk89q/worldedit/fabric/FabricWorld.java | 14 +++- .../worldedit/fabric/TileEntityUtils.java | 79 ------------------- 2 files changed, 10 insertions(+), 83 deletions(-) delete mode 100644 worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/TileEntityUtils.java diff --git a/worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/FabricWorld.java b/worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/FabricWorld.java index afc6cc99e..93d14b753 100644 --- a/worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/FabricWorld.java +++ b/worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/FabricWorld.java @@ -202,9 +202,13 @@ public class FabricWorld extends AbstractWorld { CompoundTag tag = ((BaseBlock) block).getNbtData(); if (tag != null) { net.minecraft.nbt.CompoundTag nativeTag = NBTConverter.toNative(tag); - nativeTag.putString("id", ((BaseBlock) block).getNbtId()); - TileEntityUtils.setTileEntity(world, position, nativeTag); - successful = true; // update if TE changed as well + BlockEntity tileEntity = getWorld().getWorldChunk(pos).getBlockEntity(pos); + if (tileEntity != null) { + tileEntity.fromTag(nativeTag); + tileEntity.setPos(pos); + tileEntity.setWorld(world); + successful = true; // update if TE changed as well + } } } } @@ -503,7 +507,9 @@ public class FabricWorld extends AbstractWorld { BlockEntity tile = ((WorldChunk) getWorld().getChunk(pos)).getBlockEntity(pos, WorldChunk.CreationType.CHECK); if (tile != null) { - return getBlock(position).toBaseBlock(NBTConverter.fromNative(TileEntityUtils.copyNbtData(tile))); + net.minecraft.nbt.CompoundTag tag = new net.minecraft.nbt.CompoundTag(); + tile.toTag(tag); + return getBlock(position).toBaseBlock(NBTConverter.fromNative(tag)); } else { return getBlock(position).toBaseBlock(); } diff --git a/worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/TileEntityUtils.java b/worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/TileEntityUtils.java deleted file mode 100644 index 4faec9d9e..000000000 --- a/worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/TileEntityUtils.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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.fabric; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.sk89q.worldedit.math.BlockVector3; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.IntTag; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -/** - * Utility methods for setting tile entities in the world. - */ -final class TileEntityUtils { - - private TileEntityUtils() { - } - - /** - * Update the given tag compound with position information. - * - * @param tag the tag - * @param position the position - */ - private static void updateForSet(CompoundTag tag, BlockVector3 position) { - checkNotNull(tag); - checkNotNull(position); - - tag.put("x", new IntTag(position.getBlockX())); - tag.put("y", new IntTag(position.getBlockY())); - tag.put("z", new IntTag(position.getBlockZ())); - } - - /** - * Set a tile entity at the given location using the tile entity ID from - * the tag. - * - * @param world the world - * @param position the position - * @param tag the tag for the tile entity (may be null to do nothing) - */ - static void setTileEntity(World world, BlockVector3 position, @Nullable CompoundTag tag) { - if (tag != null) { - updateForSet(tag, position); - BlockEntity tileEntity = BlockEntity.createFromTag(tag); - if (tileEntity != null) { - world.setBlockEntity(new BlockPos(position.getBlockX(), position.getBlockY(), position.getBlockZ()), tileEntity); - } - } - } - - public static CompoundTag copyNbtData(BlockEntity tile) { - CompoundTag tag = new CompoundTag(); - tile.toTag(tag); - return tag; - } -}