Four things to get right first
Start with the folder, not the art
A pack is a folder with pack.mcmeta at the top and an assets/minecraft/ tree under it. Put one texture in the right place and load it before you draw anything else — a pack that will not load is the most common dead end.
The pack format number has to match
pack.mcmeta carries a pack_format number that goes up almost every release. A pack built for an older number shows as incompatible, although the game will still load it if you accept the warning.
Keep the vanilla file names
The game finds your texture by path, not by name in a list. assets/minecraft/textures/block/stone.png replaces stone; one letter wrong and nothing happens, with no error anywhere.
Match the size the game expects
Vanilla textures are 16×16. Any power of two works, but mixing sizes in one pack makes blocks look inconsistent next to each other.
Tools that do the work
Reference, straight from the game files
Read out of the game with Mojang’s own data generator, so it matches the version exactly.
