title: No instance(s) of type variable(s) exist so that BlockBase confirms to BlockOre
body: <p>I am following <a href="https://shadowfacts.net/tutorials/forge-modding-111/basic-blocks/" rel="nofollow noreferrer">this tutorial</a> on how to create Minecraft mods. I get the below error but I don't see any issues. I don't know what this error means and more importantly I don't really know what I am doing hence following a tutorial.</p>
  
  <p>I am using Forge 1.11 and IntelliJ IDEA 2016.3.2 IDE with Java 1.8.0_112 SDK.
  Based on some reading I think it has to do with a data type mismatch but it might just be my IDE is picky or it is Java 1.8 SDK thing. I am really lost, so I thought would reach out and see if anyone is willing to provide guidance.</p>
  
  <p>Error:</p>
  
  <blockquote>
    <p>register (T) in ModBlocks cannot be applied to
    (net.maramor.tutorial.block.BlockBase)</p>
    
    <p>reason: no instance(s) of type variable(s) exist so that BlockBase
    conforms to BlockOre inference variable T has incompatible bounds:
    lower bounds: BlockBase upper bounds: Block, BlockOre</p>
  </blockquote>
  
  <p>[BlockBase.java]</p>
  
  <pre><code>package net.maramor.tutorial.block;
  
  import net.minecraft.block.Block;
  import net.minecraft.block.material.Material;
  import net.minecraft.creativetab.CreativeTabs;
  import net.minecraft.item.ItemBlock;
  import net.maramor.tutorial.TutorialMod;
  
  /**
   * Created by Matt on 12/28/2016.
   */
  public class BlockBase extends Block
  {
      protected String name;
  
      public BlockBase(Material material, String name)
      {
          super(material);
  
          this.name = name;
  
          setUnlocalizedName(name);
          setRegistryName(name);
      }
  
      public void registerItemModel(ItemBlock itemBlock)
      {
          TutorialMod.proxy.registerItemRenderer(itemBlock,0, name);
      }
  
      @Override
      public BlockBase setCreativeTab(CreativeTabs tab)
      {
          super.setCreativeTab(tab);
          return this;
      }
  }
  </code></pre>
  
  <p>[BlockOre.java]</p>
  
  <pre><code>package net.maramor.tutorial.block;
  
  import net.minecraft.block.material.Material;
  import net.minecraft.creativetab.CreativeTabs;
  
  /**
   * Created by Matt on 12/28/2016.
   */
  public class BlockOre extends BlockBase
  {
      public BlockOre(String name)
      {
          super(Material.ROCK, name);
  
          setHardness(3f);
          setResistance(5f);
      }
  
      @Override
      public BlockBase setCreativeTab(CreativeTabs tab)
      {
          super.setCreativeTab(tab);
          return this;
      }
  }
  </code></pre>
  
  <p>[ModBlocks.java]</p>
  
  <pre><code>package net.maramor.tutorial.block;
  
  import net.minecraft.block.Block;
  import net.minecraft.creativetab.CreativeTabs;
  import net.minecraft.item.ItemBlock;
  import net.minecraftforge.fml.common.registry.GameRegistry;
  
  /**
   * Created by Matt on 12/28/2016.
   */
  public class ModBlocks
  {
      public static BlockOre oreCopper;
  
      public static void init()
      {
          oreCopper = register(new BlockOre("ore_copper").setCreativeTab(CreativeTabs.MATERIALS));
      }
  
      private static &lt;T extends Block&gt; T register(T block, ItemBlock itemBlock)
      {
          GameRegistry.register(block);
          GameRegistry.register(itemBlock);
  
          if (block instanceof BlockBase)
          {
              ((BlockBase)block).registerItemModel(itemBlock);
          }
  
          return block;
      }
  
      private static &lt;T extends Block&gt; T register(T block)
      {
          ItemBlock itemBlock = new ItemBlock(block);
          itemBlock.setRegistryName(block.getRegistryName());
          return register(block, itemBlock);
      }
  }
  </code></pre>