diff --git a/src/main/java/com/gtnewhorizons/angelica/render/EmissiveTextureAutoloader.java b/src/main/java/com/gtnewhorizons/angelica/render/EmissiveTextureAutoloader.java index 019a23ddd..5897efd79 100644 --- a/src/main/java/com/gtnewhorizons/angelica/render/EmissiveTextureAutoloader.java +++ b/src/main/java/com/gtnewhorizons/angelica/render/EmissiveTextureAutoloader.java @@ -57,8 +57,8 @@ public class EmissiveTextureAutoloader { final IResourceManager resMan = Minecraft.getMinecraft().getResourceManager(); if (resMan instanceof SimpleReloadableResourceManager simple) { - FallbackResourceManager fallback = simple.domainResourceManagers.get(full.getResourceDomain()); - if (fallback != null) { + final Map domainManagers = simple.domainResourceManagers; + if (domainManagers.get(full.getResourceDomain()) instanceof FallbackResourceManager fallback) { for (IResourcePack rp : fallback.resourcePacks) { if (rp != null && rp.resourceExists(full)) { return true; diff --git a/src/main/java/com/gtnewhorizons/angelica/textures/atlas/AtlasPackPolicy.java b/src/main/java/com/gtnewhorizons/angelica/textures/atlas/AtlasPackPolicy.java index 677a788f9..98678d6bc 100644 --- a/src/main/java/com/gtnewhorizons/angelica/textures/atlas/AtlasPackPolicy.java +++ b/src/main/java/com/gtnewhorizons/angelica/textures/atlas/AtlasPackPolicy.java @@ -78,7 +78,8 @@ public final class AtlasPackPolicy { final Trust trust = new Trust(); final Map> eligible = new HashMap<>(); final Map> untrustedDomains = new HashMap<>(); - for (Map.Entry entry : manager.domainResourceManagers.entrySet()) { + final Map domainManagers = manager.domainResourceManagers; + for (Map.Entry entry : domainManagers.entrySet()) { final List claimChecked = eligiblePacks(entry.getKey(), entry.getValue(), trust, untrustedDomains); if (claimChecked != null) { eligible.put(entry.getKey(), claimChecked); @@ -88,9 +89,9 @@ public final class AtlasPackPolicy { return eligible; } - private static List eligiblePacks(String domainName, FallbackResourceManager domain, Trust trust, + private static List eligiblePacks(String domainName, Object domainManager, Trust trust, Map> untrustedDomains) { - if (domain == null || domain.getClass() != FallbackResourceManager.class) { + if (!(domainManager instanceof FallbackResourceManager domain) || domain.getClass() != FallbackResourceManager.class) { return null; } boolean eligible = true; diff --git a/src/main/java/com/prupe/mcpatcher/mal/resource/TexturePackAPI.java b/src/main/java/com/prupe/mcpatcher/mal/resource/TexturePackAPI.java index 771724ab1..834f278a4 100644 --- a/src/main/java/com/prupe/mcpatcher/mal/resource/TexturePackAPI.java +++ b/src/main/java/com/prupe/mcpatcher/mal/resource/TexturePackAPI.java @@ -52,12 +52,10 @@ public class TexturePackAPI { List resourcePacks = new ArrayList<>(); IResourceManager resourceManager = Minecraft.getMinecraft().getResourceManager(); if (resourceManager instanceof SimpleReloadableResourceManager) { - @SuppressWarnings("unchecked") - Set> entrySet = ((SimpleReloadableResourceManager) resourceManager).domainResourceManagers - .entrySet(); - for (Map.Entry entry : entrySet) { - if (namespace == null || namespace.equals(entry.getKey())) { - List packs = entry.getValue().resourcePacks; + final Map domainManagers = ((SimpleReloadableResourceManager) resourceManager).domainResourceManagers; + for (Map.Entry entry : domainManagers.entrySet()) { + if ((namespace == null || namespace.equals(entry.getKey())) && entry.getValue() instanceof FallbackResourceManager fallback) { + List packs = fallback.resourcePacks; if (packs != null) { resourcePacks.removeAll(packs); resourcePacks.addAll(packs); diff --git a/src/test/java/com/gtnewhorizons/angelica/textures/atlas/AtlasPackPolicyTest.java b/src/test/java/com/gtnewhorizons/angelica/textures/atlas/AtlasPackPolicyTest.java index 97dbd3f19..9d8b6ce8e 100644 --- a/src/test/java/com/gtnewhorizons/angelica/textures/atlas/AtlasPackPolicyTest.java +++ b/src/test/java/com/gtnewhorizons/angelica/textures/atlas/AtlasPackPolicyTest.java @@ -17,6 +17,8 @@ import java.util.Set; import com.gtnewhorizons.angelica.config.AngelicaConfig; import net.minecraft.client.resources.FallbackResourceManager; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourcePack; import net.minecraft.client.resources.SimpleReloadableResourceManager; import net.minecraft.client.resources.data.IMetadataSection; @@ -205,6 +207,41 @@ class AtlasPackPolicyTest { assertTrue(result.get("domainB").isEmpty()); } + private static final class ForeignDomainManager implements IResourceManager { + + @Override + public Set getResourceDomains() { + return Collections.emptySet(); + } + + @Override + public IResource getResource(ResourceLocation location) throws IOException { + throw new IOException("not used"); + } + + @Override + public List getAllResources(ResourceLocation location) throws IOException { + throw new IOException("not used"); + } + } + + @Test + @SuppressWarnings({ "unchecked", "rawtypes" }) + void eligibleDomainsSkipsForeignDomainManager() { + AngelicaConfig.atlasTrustedPacks = new String[] { FakePack.class.getName() }; + + final IMetadataSerializer serializer = new IMetadataSerializer(); + final SimpleReloadableResourceManager manager = new SimpleReloadableResourceManager(serializer); + final FallbackResourceManager domain = new FallbackResourceManager(serializer); + domain.resourcePacks.add(new FakePack(new ResourceLocation("tinker", "unrelated.png"))); + manager.domainResourceManagers.put("domainD", domain); + ((Map) manager.domainResourceManagers).put("sound_x", new ForeignDomainManager()); + + final Map> result = AtlasPackPolicy.eligibleDomains(manager); + assertTrue(result.containsKey("domainD")); + assertFalse(result.containsKey("sound_x")); + } + @Test void eligibleDomainsRecordsUnknownPackOnce() { final IMetadataSerializer serializer = new IMetadataSerializer();