code: public static void register(IRegisterable<?> registerable)
  	{
  		ResourceLocation name = registerable.getName();
  		if (name == null)
  			throw new IllegalArgumentException("No name specified for registration for " + registerable.getClass().getName());
  		if (!(registerable instanceof Block || registerable instanceof Item))
  			throw new IllegalArgumentException("Cannot register " + registerable.getClass().getName() + " (" + name
  					+ ") because it's neither a block or an item.");
  
  		if (registerable instanceof Block)
  		{
  			Block block = (Block) registerable;
  			ForgeRegistries.BLOCKS.register(block);
  			Item item = registerable.getItem(block);
  			if (item != null)
  				ForgeRegistries.ITEMS.register(item);
  
  			//register the mapper for the block and the model for the item
  			if (MalisisCore.isClient())
  			{
  				ModelLoader.setCustomStateMapper(block, b -> ImmutableMap.of());
  				if (item != null)
  					EmptyModelLoader.register(item);
  			}
  
  			ClientNotificationManager.discover(block);
  		}
  		else if (registerable instanceof Item)
  		{
  			Item item = (Item) registerable;
  			ForgeRegistries.ITEMS.register(item);
  			if (MalisisCore.isClient())
  				EmptyModelLoader.register(item);
  		}
  	}
docs: Registers a {@link IRegisterable}.<br>
  The object has to be either a {@link Block} or an {@link Item}.
  
  @param registerable the registerable