
========================================================================================

By STITCH.SPRITES
You may contact me on Discord if you need any assistance.

========================================================================================

OVERVIEW
This resource pack allows you to modify and animate Minecraft's UI with more flexibility using custom shaders and control pixels.

========================================================================================

- For Any UI in the GUI folder. (EXCLUDING the sprites folder)
The top-left pixel of the texture should be

Alpha	: Set to exactly '2' to indicate the UI will be modified by the shader.
Red		: Expands the UI on the X-axis.
Green	: Expands the UI on the Y-axis.
Blue	: Controls animations (explained in the animation section at the bottom).

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- For any UI in the SPRITES folder
All 4 corner pixels can be adjusted independently. 

Alpha	: Set to exactly '1' to indicate the sprite will be modified by the shader.
Red		: Determines X-axis movement. Values less than 128 move LEFT, and values greater than 128 move RIGHT.
Green	: Determines Y-axis movement. Values less than 128 move DOWN, and values greater than 128 move UP.
Blue	: Currently experimental and non-functional.

========================================================================================

SETTING UP CONTAINER ANIMATIONS: Edit the shader in "assets/minecraft/shaders/core/position_tex_color.vsh"

Define the 'Speed (lower values are slower)', 'number of unique still frames', & 'frame-index array size' in the ANIMATION_params array.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//[CONTAINER ANIMATIONS]: SPEED, SHEET_FRAMES, TOTAL_FRAMES
	const ivec3 ANIMATION_params[3] = ivec3[](
		ivec3(	  0, 1,  1),   	// Default
		ivec3(15000, 2,  3),	// Stonecutter
		ivec3(10000, 2, 14),	// Villager
		ivec3( 2400, 2,  6)		// MyAnimation //INSERT (Don't forget the comma)
	);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Add a frame-index array (e.g., MyAnimation[6]) to specify the frame order for each container type.
Then add the frame index array to the switch statement lower in the shader. 
Make the 'case #:' equal to the blue value of the control pixel of your container.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	const int Stonecutter[3] = int[](0, 0, 1);
	const int Villager[14] = int[](0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0);
	const int MyAnimation[6] = int[](0, 1, 2, 3, 4, 5); //INSERT
	
	...
	
	switch (ctrlL.b) {
		case 1: frameIndex = Stonecutter[frameIndex]; break;
		case 2: frameIndex = Villager[frameIndex]; break;
		case 3: frameIndex = MyAnimation[frameIndex]; break; //INSERT, matching your animation name.
	}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -