public int colorMultiplier(int color) {
   if (colorMap == null) {
     return color;
   } else if (ctm.isInWorld()) {
     return colorMap.getColorMultiplier(ctm.getBlockAccess(), ctm.getI(), ctm.getJ(), ctm.getK());
   } else {
     return colorMap.getColorMultiplier();
   }
 }
 // public static methods requested by MamiyaOtaru for VoxelMap
 public static int getColorMultiplier(
     IBlockAccess blockAccess, IBlockState blockState, Position position, int defaultColor) {
   List<BlockStateMatcher> maps = ColorizeBlock.findColorMaps(blockState.getBlock());
   if (maps != null) {
     for (BlockStateMatcher matcher : maps) {
       if (matcher.matchBlockState(blockState)) {
         IColorMap colorMap = ColorizeBlock.getThreadLocal(matcher);
         return colorMap.getColorMultiplier(
             blockAccess, position.getI(), position.getJ(), position.getK());
       }
     }
   }
   return defaultColor;
 }
 private void computeVertexColor(int[] offsets, float[] color) {
   int i = ctm.getI() + offsets[0];
   int j = ctm.getJ() + offsets[1];
   int k = ctm.getK() + offsets[2];
   if (ColorizeBlock.enableTestColorSmoothing) {
     int rgb = 0;
     if (i % 2 == 0) {
       rgb |= 0xff0000;
     }
     if (j % 2 == 0) {
       rgb |= 0x00ff00;
     }
     if (k % 2 == 0) {
       rgb |= 0x0000ff;
     }
     ColorUtils.intToFloat3(rgb, color);
   } else {
     float[] tmp = colorMap.getColorMultiplierF(ctm.getBlockAccess(), i, j, k);
     color[0] = tmp[0];
     color[1] = tmp[1];
     color[2] = tmp[2];
   }
 }