diff --git a/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelLocationCache.java b/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelLocationCache.java index 5a1bcc8e..25886e20 100644 --- a/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelLocationCache.java +++ b/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelLocationCache.java @@ -1,5 +1,8 @@ package org.embeddedt.modernfix.dynamicresources; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableMap; import com.mojang.datafixers.util.Pair; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -14,28 +17,23 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; public class ModelLocationCache { - private static Map locationCache = Collections.emptyMap(); - public static void rebuildLocationCache() { - ArrayList>> futures = new ArrayList<>(); - for(Block block : Registry.BLOCK) { - block.getStateDefinition().getPossibleStates().forEach((state) -> { - futures.add(CompletableFuture.supplyAsync(() -> { - return Pair.of(state, BlockModelShaper.stateToModelLocation(state)); - }, Util.backgroundExecutor())); + private static final LoadingCache locationCache = CacheBuilder.newBuilder() + .maximumSize(10000) + .build(new CacheLoader() { + @Override + public ModelResourceLocation load(BlockState key) throws Exception { + return BlockModelShaper.stateToModelLocation(key); + } }); - } - - ImmutableMap.Builder builder = ImmutableMap.builder(); - for(CompletableFuture> future : futures) { - Pair pair = future.join(); - builder.put(pair.getFirst(), pair.getSecond()); - } - locationCache = builder.build(); - } public static ModelResourceLocation get(BlockState state) { - return locationCache.get(state); + try { + return locationCache.get(state); + } catch(ExecutionException e) { + throw new RuntimeException(e.getCause()); + } } } diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java index 0cb14a1a..6d993288 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java @@ -128,8 +128,6 @@ public abstract class ModelBakeryMixin { private UnbakedModel missingModel; - private static boolean firstReload = true; - /** * @author embeddedt * @reason don't load any models initially, just set up initial data structures @@ -137,10 +135,6 @@ public abstract class ModelBakeryMixin { @Overwrite protected void processLoading(ProfilerFiller arg, int maxMipLevels) { ModelLoaderRegistry.onModelLoadingStart(); - if(firstReload) { - ModelLocationCache.rebuildLocationCache(); - firstReload = false; - } try { this.missingModel = this.loadBlockModel(MISSING_MODEL_LOCATION); } catch (IOException var10) {