From d987c1227bdeeb40ea7e10e6d45d515a96c9ba40 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 9 Jul 2023 13:27:18 -0400 Subject: [PATCH] Scan fallback resource managers as well as main resource manager For buggy mods such as https://github.com/FoundationGames/EnhancedBlockEntities/issues/162 --- .../dynamicresources/ModelBakeryHelpers.java | 23 +++++++++++++++++++ .../main/resources/modernfix.accesswidener | 3 ++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java index 799b92d2..b1461724 100644 --- a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java +++ b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java @@ -8,6 +8,8 @@ import com.google.gson.*; import com.mojang.datafixers.util.Pair; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; +import it.unimi.dsi.fastutil.objects.ReferenceSet; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.*; import net.minecraft.resources.ResourceLocation; @@ -16,6 +18,7 @@ import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.resources.FallbackResourceManager; import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.SimpleReloadableResourceManager; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; @@ -83,6 +86,23 @@ public class ModelBakeryHelpers { ModernFix.LOGGER.error("Error reading {} {}: {}", type, location, e); } + /** + * Some mods (cough, EBE) inject their custom resource pack into the namespaced resource managers, but not into the + * main list contained inside the parent resource manager, so we need to scan each of the namespaced managers as + * well. + */ + private static void checkFallbacks(SimpleReloadableResourceManager manager, List resourcePackList) { + ReferenceSet knownPacks = new ReferenceOpenHashSet<>(resourcePackList); + Map namespacedMap = manager.namespacedPacks; + namespacedMap.values().stream().flatMap(FallbackResourceManager::listPacks).forEach(pack -> { + if(knownPacks.add(pack)) { + /* the pack was not previously known, add to our list */ + ModernFix.LOGGER.debug("Injecting unlisted pack '{}': {}", pack.getName(), pack.getClass().getName()); + resourcePackList.add(pack); + } + }); + } + public static void gatherModelMaterials(ResourceManager manager, Predicate isTrustedPack, Set materialSet, Set blockStateFiles, Set modelFiles, UnbakedModel missingModel, @@ -95,6 +115,9 @@ public class ModelBakeryHelpers { * scanning most packs a lot. */ List allPackResources = new ArrayList<>(manager.listPacks().collect(Collectors.toList())); + if(manager instanceof SimpleReloadableResourceManager) { + checkFallbacks((SimpleReloadableResourceManager)manager, allPackResources); + } Collections.reverse(allPackResources); ObjectOpenHashSet allAvailableModels = new ObjectOpenHashSet<>(), allAvailableStates = new ObjectOpenHashSet<>(); /* try to fix CME in some runtime packs by forcing generation */ diff --git a/common/src/main/resources/modernfix.accesswidener b/common/src/main/resources/modernfix.accesswidener index bc312130..a9dd0458 100644 --- a/common/src/main/resources/modernfix.accesswidener +++ b/common/src/main/resources/modernfix.accesswidener @@ -28,4 +28,5 @@ accessible method net/minecraft/client/renderer/texture/TextureAtlasSprite