@Override
 public final ItemStack getPickBlock(
     MovingObjectPosition target, World world, int x, int y, int z) {
   int meta = world.getBlockMetadata(target.blockX, target.blockY, target.blockZ);
   ChromaTiles m = ChromaTiles.getTileFromIDandMetadata(this, meta);
   ItemStack is =
       this.getHarvestedItemStack(world, target.blockX, target.blockY, target.blockZ, meta, m);
   NBTTagCompound nbt = new NBTTagCompound();
   ((TileEntityAdjacencyUpgrade) world.getTileEntity(target.blockX, target.blockY, target.blockZ))
       .getTagsToWriteToStack(nbt);
   is.stackTagCompound = nbt.hasNoTags() ? null : (NBTTagCompound) nbt.copy();
   return is;
 }
  public static boolean setTileEntityNBT(
      World worldIn, BlockPos p_179224_1_, ItemStack p_179224_2_) {
    if (p_179224_2_.hasTagCompound() && p_179224_2_.getTagCompound().hasKey("BlockEntityTag", 10)) {
      TileEntity var3 = worldIn.getTileEntity(p_179224_1_);
      if (var3 != null) {
        NBTTagCompound var4 = new NBTTagCompound();
        NBTTagCompound var5 = (NBTTagCompound) var4.copy();
        var3.writeToNBT(var4);
        NBTTagCompound var6 =
            (NBTTagCompound) p_179224_2_.getTagCompound().getTag("BlockEntityTag");
        var4.merge(var6);
        var4.setInteger("x", p_179224_1_.getX());
        var4.setInteger("y", p_179224_1_.getY());
        var4.setInteger("z", p_179224_1_.getZ());
        if (!var4.equals(var5)) {
          var3.readFromNBT(var4);
          var3.markDirty();
          return true;
        }
      }
    }

    return false;
  }
 @Override
 protected void writeEntityToNBT(NBTTagCompound tag) {
   tag.setString(TAG_BLOCK_NAME, getBlockName());
   tag.setInteger(TAG_BLOCK_META, getBlockMeta());
   if (tileEntity != null) tag.setTag(TAG_TILE_ENTITY, tileEntity.copy());
 }