// Path: src/main/java/two/davincing/ProxyBase.java
// public class ProxyBase {
// 
//   public static final BlockLoader<SculptureBlock> blockSculpture = new BlockLoader(new SculptureBlock(), SculptureEntity.class);
//   public static final BlockLoader<PaintingBlock> blockPainting = new BlockLoader(new PaintingBlock(), PaintingEntity.class);
// 
//   public static ItemHandle itemHandle;
//   public static ChiselItem itemChisel;
//   public static ChiselItem itemBarcutter;
//   public static ChiselItem itemSaw;
//   public static PaintTool itemEraser;
//   public static PaintTool itemBucket;
//   public static PaintTool itemMixerbrush;
//   public static PaintTool itemMinibrush;
//   public static CopygunItem itemCopygun;
//   public static Palette itemPalette;
//   /* Items with special renderer */
//   public static PieceItem itemBar;
//   public static DroppedSculptureItem itemDroppedSculpture;
//   public static PieceItem itemCover;
//   public static CanvasItem itemCanvas;
//   public static PieceItem itemPiece;
//   /* Initialization list for content that needs post-initialization. */
//   protected LinkedList<InitializableModContent> pendingInitialization = new LinkedList<InitializableModContent>();
//   /* Global Config vars */
//   public boolean doAmbientOcclusion; // whether or not to do ambient occlusion during rendering
//   public final ArrayList<Block> blockBlacklist = new ArrayList<Block>();
// 
//   public ProxyBase() {
//   }
// 
//   protected void loadGlobalConfigValues() {
//     doAmbientOcclusion = DaVincing.config.getMiscBoolean("Render with Ambient Occlusion", false);
//     final List<Block> defaultBlackList = Arrays.asList(new Block[]{
//       Blocks.bedrock, Blocks.cactus, Blocks.glass, Blocks.grass, Blocks.leaves, Blocks.stained_glass
//     });
// 
//     blockBlacklist.clear();
//     blockBlacklist.addAll(DaVincing.config.getMiscBlocks("Chisel blacklist", defaultBlackList, "A list of blocks that cannot be chiseled. Note that all blocks with a tile entity or blocks that are not full blocks cannot be chiseled in general."));
//   }
// 
//   protected void registerBlocks() {
//     blockSculpture.load();
//     blockPainting.load();
//   }
// 
//   protected void registerItems() {
//     itemHandle = new ItemHandle();
//     pendingInitialization.add(itemHandle);
//     itemChisel = new ChiselItem();
//     pendingInitialization.add(itemChisel);
//     itemBarcutter = new ChiselItem.Barcutter();
//     pendingInitialization.add(itemBarcutter);
//     itemSaw = new ChiselItem.Saw();
//     pendingInitialization.add(itemSaw);
//     itemCopygun = new CopygunItem();
//     pendingInitialization.add(itemCopygun);
//     itemMinibrush = new PaintTool.Mini();
//     pendingInitialization.add(itemMinibrush);
//     itemMixerbrush = new PaintTool.Mixer();
//     pendingInitialization.add(itemMixerbrush);
//     itemBucket = new PaintTool.Bucket();
//     pendingInitialization.add(itemBucket);
//     itemEraser = new PaintTool.Eraser();
//     pendingInitialization.add(itemEraser);
//     itemPalette = new Palette();
//     pendingInitialization.add(itemPalette);
// 
//     itemCanvas = new CanvasItem();
//     pendingInitialization.add(itemCanvas);
//     itemPiece = new PieceItem();
//     pendingInitialization.add(itemPiece);
//     itemBar = new PieceItem.Bar();
//     pendingInitialization.add(itemBar);
//     itemCover = new PieceItem.Cover();
//     pendingInitialization.add(itemCover);
//     itemDroppedSculpture = new DroppedSculptureItem();
//     pendingInitialization.add(itemDroppedSculpture);
//   }
// 
//   protected void registerRenderers() {
//   }
// 
//   public void onPreInit() {
//     MinecraftForge.EVENT_BUS.register(this);
//   }
// 
//   public void onInit() {
//     loadGlobalConfigValues();
//     registerBlocks();
//     registerItems();
//     registerRenderers();
// 
//     InitializableModContent content;
//     while ((content = pendingInitialization.poll()) != null) {
//       content.initialize();
//     }
//   }
// 
//   public void onPostInit() {
//   }
// }


import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
import org.lwjgl.opengl.GL11;
import two.davincing.ProxyBase;
package two.davincing.renderer;


@SideOnly(Side.CLIENT)
public class CanvasRenderer implements IItemRenderer {

  public static boolean overrideUseRenderHelper = false;

  @Override
  public boolean handleRenderType(ItemStack item, ItemRenderType type) {
    return type == ItemRenderType.INVENTORY
            || type == ItemRenderType.EQUIPPED
            || type == ItemRenderType.EQUIPPED_FIRST_PERSON
            || type == ItemRenderType.ENTITY;
  }

  @Override
  public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
    if (overrideUseRenderHelper) {
      return true;
    }
    if (type == ItemRenderType.ENTITY) {
      return helper == ItemRendererHelper.ENTITY_ROTATION
              || helper == ItemRendererHelper.ENTITY_BOBBING;
    }
    return false;
  }

  @Override
  public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
    IIcon icon;
    if (item.hasTagCompound()) {
      final PaintingTexture paintingTexture = ItemTextureCache.instance.get(item);
      paintingTexture.bind();
      icon = paintingTexture;
    } else {
// Path: src/main/java/two/davincing/ProxyBase.java
// public class ProxyBase {
// 
//   public static final BlockLoader<SculptureBlock> blockSculpture = new BlockLoader(new SculptureBlock(), SculptureEntity.class);
//   public static final BlockLoader<PaintingBlock> blockPainting = new BlockLoader(new PaintingBlock(), PaintingEntity.class);
// 
//   public static ItemHandle itemHandle;
//   public static ChiselItem itemChisel;
//   public static ChiselItem itemBarcutter;
//   public static ChiselItem itemSaw;
//   public static PaintTool itemEraser;
//   public static PaintTool itemBucket;
//   public static PaintTool itemMixerbrush;
//   public static PaintTool itemMinibrush;
//   public static CopygunItem itemCopygun;
//   public static Palette itemPalette;
//   /* Items with special renderer */
//   public static PieceItem itemBar;
//   public static DroppedSculptureItem itemDroppedSculpture;
//   public static PieceItem itemCover;
//   public static CanvasItem itemCanvas;
//   public static PieceItem itemPiece;
//   /* Initialization list for content that needs post-initialization. */
//   protected LinkedList<InitializableModContent> pendingInitialization = new LinkedList<InitializableModContent>();
//   /* Global Config vars */
//   public boolean doAmbientOcclusion; // whether or not to do ambient occlusion during rendering
//   public final ArrayList<Block> blockBlacklist = new ArrayList<Block>();
// 
//   public ProxyBase() {
//   }
// 
//   protected void loadGlobalConfigValues() {
//     doAmbientOcclusion = DaVincing.config.getMiscBoolean("Render with Ambient Occlusion", false);
//     final List<Block> defaultBlackList = Arrays.asList(new Block[]{
//       Blocks.bedrock, Blocks.cactus, Blocks.glass, Blocks.grass, Blocks.leaves, Blocks.stained_glass
//     });
// 
//     blockBlacklist.clear();
//     blockBlacklist.addAll(DaVincing.config.getMiscBlocks("Chisel blacklist", defaultBlackList, "A list of blocks that cannot be chiseled. Note that all blocks with a tile entity or blocks that are not full blocks cannot be chiseled in general."));
//   }
// 
//   protected void registerBlocks() {
//     blockSculpture.load();
//     blockPainting.load();
//   }
// 
//   protected void registerItems() {
//     itemHandle = new ItemHandle();
//     pendingInitialization.add(itemHandle);
//     itemChisel = new ChiselItem();
//     pendingInitialization.add(itemChisel);
//     itemBarcutter = new ChiselItem.Barcutter();
//     pendingInitialization.add(itemBarcutter);
//     itemSaw = new ChiselItem.Saw();
//     pendingInitialization.add(itemSaw);
//     itemCopygun = new CopygunItem();
//     pendingInitialization.add(itemCopygun);
//     itemMinibrush = new PaintTool.Mini();
//     pendingInitialization.add(itemMinibrush);
//     itemMixerbrush = new PaintTool.Mixer();
//     pendingInitialization.add(itemMixerbrush);
//     itemBucket = new PaintTool.Bucket();
//     pendingInitialization.add(itemBucket);
//     itemEraser = new PaintTool.Eraser();
//     pendingInitialization.add(itemEraser);
//     itemPalette = new Palette();
//     pendingInitialization.add(itemPalette);
// 
//     itemCanvas = new CanvasItem();
//     pendingInitialization.add(itemCanvas);
//     itemPiece = new PieceItem();
//     pendingInitialization.add(itemPiece);
//     itemBar = new PieceItem.Bar();
//     pendingInitialization.add(itemBar);
//     itemCover = new PieceItem.Cover();
//     pendingInitialization.add(itemCover);
//     itemDroppedSculpture = new DroppedSculptureItem();
//     pendingInitialization.add(itemDroppedSculpture);
//   }
// 
//   protected void registerRenderers() {
//   }
// 
//   public void onPreInit() {
//     MinecraftForge.EVENT_BUS.register(this);
//   }
// 
//   public void onInit() {
//     loadGlobalConfigValues();
//     registerBlocks();
//     registerItems();
//     registerRenderers();
// 
//     InitializableModContent content;
//     while ((content = pendingInitialization.poll()) != null) {
//       content.initialize();
//     }
//   }
// 
//   public void onPostInit() {
//   }
// }


// Path: src/main/java/two/davincing/renderer/CanvasRenderer.java
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
import org.lwjgl.opengl.GL11;
import two.davincing.ProxyBase;

package two.davincing.renderer;


@SideOnly(Side.CLIENT)
public class CanvasRenderer implements IItemRenderer {

  public static boolean overrideUseRenderHelper = false;

  @Override
  public boolean handleRenderType(ItemStack item, ItemRenderType type) {
    return type == ItemRenderType.INVENTORY
            || type == ItemRenderType.EQUIPPED
            || type == ItemRenderType.EQUIPPED_FIRST_PERSON
            || type == ItemRenderType.ENTITY;
  }

  @Override
  public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
    if (overrideUseRenderHelper) {
      return true;
    }
    if (type == ItemRenderType.ENTITY) {
      return helper == ItemRendererHelper.ENTITY_ROTATION
              || helper == ItemRendererHelper.ENTITY_BOBBING;
    }
    return false;
  }

  @Override
  public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
    IIcon icon;
    if (item.hasTagCompound()) {
      final PaintingTexture paintingTexture = ItemTextureCache.instance.get(item);
      paintingTexture.bind();
      icon = paintingTexture;
    } else {
      icon = ProxyBase.itemCanvas.getIconFromDamage(0);