Fix async atlas with KaizPatchX (#2175)

This commit is contained in:
Jason Mitchell authored and GitHub committed 2026-09-30 08:53:41 -07:00
1 parent fa71eda3db
commit cd0a9608d3
4 files changed
+47 -11

No files matched your search

@@ -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<String, ?> domainManagers = simple.domainResourceManagers;
if (domainManagers.get(full.getResourceDomain()) instanceof FallbackResourceManager fallback) {
for (IResourcePack rp : fallback.resourcePacks) {
if (rp != null && rp.resourceExists(full)) {
return true;
@@ -78,7 +78,8 @@ public final class AtlasPackPolicy {
final Trust trust = new Trust();
final Map<String, List<IResourcePack>> eligible = new HashMap<>();
final Map<String, List<String>> untrustedDomains = new HashMap<>();
for (Map.Entry<String, FallbackResourceManager> entry : manager.domainResourceManagers.entrySet()) {
final Map<String, ?> domainManagers = manager.domainResourceManagers;
for (Map.Entry<String, ?> entry : domainManagers.entrySet()) {
final List<IResourcePack> 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<IResourcePack> eligiblePacks(String domainName, FallbackResourceManager domain, Trust trust,
private static List<IResourcePack> eligiblePacks(String domainName, Object domainManager, Trust trust,
Map<String, List<String>> untrustedDomains) {
if (domain == null || domain.getClass() != FallbackResourceManager.class) {
if (!(domainManager instanceof FallbackResourceManager domain) || domain.getClass() != FallbackResourceManager.class) {
return null;
}
boolean eligible = true;
@@ -52,12 +52,10 @@ public class TexturePackAPI {
List<IResourcePack> resourcePacks = new ArrayList<>();
IResourceManager resourceManager = Minecraft.getMinecraft().getResourceManager();
if (resourceManager instanceof SimpleReloadableResourceManager) {
@SuppressWarnings("unchecked")
Set<Map.Entry<String, FallbackResourceManager>> entrySet = ((SimpleReloadableResourceManager) resourceManager).domainResourceManagers
.entrySet();
for (Map.Entry<String, FallbackResourceManager> entry : entrySet) {
if (namespace == null || namespace.equals(entry.getKey())) {
List<IResourcePack> packs = entry.getValue().resourcePacks;
final Map<String, ?> domainManagers = ((SimpleReloadableResourceManager) resourceManager).domainResourceManagers;
for (Map.Entry<String, ?> entry : domainManagers.entrySet()) {
if ((namespace == null || namespace.equals(entry.getKey())) && entry.getValue() instanceof FallbackResourceManager fallback) {
List<IResourcePack> packs = fallback.resourcePacks;
if (packs != null) {
resourcePacks.removeAll(packs);
resourcePacks.addAll(packs);
@@ -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<String> getResourceDomains() {
return Collections.emptySet();
}
@Override
public IResource getResource(ResourceLocation location) throws IOException {
throw new IOException("not used");
}
@Override
public List<IResource> 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<String, List<IResourcePack>> result = AtlasPackPolicy.eligibleDomains(manager);
assertTrue(result.containsKey("domainD"));
assertFalse(result.containsKey("sound_x"));
}
@Test
void eligibleDomainsRecordsUnknownPackOnce() {
final IMetadataSerializer serializer = new IMetadataSerializer();