Uses a cache instead of a hashmap to avoid a CME in java 9+.
New impl in this PR vs #362 implements the cache non-statically, since the baked model is only baked once, and allows us to use a LoadingCache instead of a standard cache, giving us access to getUnchecked(). Additionally this no longer necessitates a resource reload listener, since the model will be automatically rebaked on a resource reload, letting GC clean up the old cache instead of needing to clear it on reload
Supersedes #362
Uses a cache instead of a hashmap to avoid a CME in java 9+.
New impl in this PR vs #362 implements the cache non-statically, since the baked model is only baked once, and allows us to use a LoadingCache instead of a standard cache, giving us access to getUnchecked(). Additionally this no longer necessitates a resource reload listener, since the model will be automatically rebaked on a resource reload, letting GC clean up the old cache instead of needing to clear it on reload