mirror of
https://github.com/GTNewHorizons/Angelica.git
synced 2026-10-25 20:22:22 +00:00
Fix async atlas with KaizPatchX (#2175)
This commit is contained in:
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();
|
||||
|
||||
Reference in new issue
Block a user