public void preRenderHeld(IModel model, IBlockState blockState, Block block) {
   colorMap = null;
   isSmooth = false;
   List<BlockStateMatcher> maps = ColorizeBlock.findColorMaps(block);
   if (maps != null) {
     for (BlockStateMatcher matcher : maps) {
       if (matcher.matchBlockState(blockState)) {
         colorMap = ColorizeBlock.getThreadLocal(matcher);
         break;
       }
     }
   }
 }
 // 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;
 }
 public static void reset() {
   try {
     grassBlock = BlockAPI.getFixedBlock("minecraft:grass");
     mycelBlock = BlockAPI.getFixedBlock("minecraft:mycelium");
     ColorizeBlock.reset();
   } catch (Throwable e) {
     e.printStackTrace();
   }
 }
 public void preRender(
     IBlockAccess blockAccess,
     IModel model,
     IBlockState blockState,
     Position position,
     Block block,
     boolean useAO) {
   colorMap = null;
   useCM = RenderPassAPI.instance.useColorMultiplierThisPass(block);
   if (useCM) {
     List<BlockStateMatcher> maps = ColorizeBlock.findColorMaps(block);
     if (maps != null) {
       for (BlockStateMatcher matcher : maps) {
         if (matcher.matchBlockState(blockState)) {
           colorMap = ColorizeBlock.getThreadLocal(matcher);
           break;
         }
       }
     }
   }
   isSmooth = false;
 }