package net.minecraft.client.resources; import com.google.common.collect.Lists; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import net.minecraft.client.resources.data.IMetadataSerializer; import net.minecraft.util.ResourceLocation; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class FallbackResourceManager implements IResourceManager { private static final Logger field_177246_b = LogManager.getLogger(); protected final List resourcePacks = Lists.newArrayList(); private final IMetadataSerializer frmMetadataSerializer; private static final String __OBFID = "CL_00001074"; public FallbackResourceManager(IMetadataSerializer p_i1289_1_) { this.frmMetadataSerializer = p_i1289_1_; } public void addResourcePack(IResourcePack p_110538_1_) { this.resourcePacks.add(p_110538_1_); } public Set getResourceDomains() { return null; } public IResource getResource(ResourceLocation p_110536_1_) throws IOException { IResourcePack var2 = null; ResourceLocation var3 = getLocationMcmeta(p_110536_1_); for (int var4 = this.resourcePacks.size() - 1; var4 >= 0; --var4) { IResourcePack var5 = (IResourcePack)this.resourcePacks.get(var4); if (var2 == null && var5.resourceExists(var3)) { var2 = var5; } if (var5.resourceExists(p_110536_1_)) { InputStream var6 = null; if (var2 != null) { var6 = this.func_177245_a(var3, var2); } return new SimpleResource(var5.getPackName(), p_110536_1_, this.func_177245_a(p_110536_1_, var5), var6, this.frmMetadataSerializer); } } throw new FileNotFoundException(p_110536_1_.toString()); } protected InputStream func_177245_a(ResourceLocation p_177245_1_, IResourcePack p_177245_2_) throws IOException { InputStream var3 = p_177245_2_.getInputStream(p_177245_1_); return (InputStream)(field_177246_b.isDebugEnabled() ? new FallbackResourceManager.ImputStreamLeakedResourceLogger(var3, p_177245_1_, p_177245_2_.getPackName()) : var3); } public List getAllResources(ResourceLocation p_135056_1_) throws IOException { ArrayList var2 = Lists.newArrayList(); ResourceLocation var3 = getLocationMcmeta(p_135056_1_); Iterator var4 = this.resourcePacks.iterator(); while (var4.hasNext()) { IResourcePack var5 = (IResourcePack)var4.next(); if (var5.resourceExists(p_135056_1_)) { InputStream var6 = var5.resourceExists(var3) ? this.func_177245_a(var3, var5) : null; var2.add(new SimpleResource(var5.getPackName(), p_135056_1_, this.func_177245_a(p_135056_1_, var5), var6, this.frmMetadataSerializer)); } } if (var2.isEmpty()) { throw new FileNotFoundException(p_135056_1_.toString()); } else { return var2; } } static ResourceLocation getLocationMcmeta(ResourceLocation p_110537_0_) { return new ResourceLocation(p_110537_0_.getResourceDomain(), p_110537_0_.getResourcePath() + ".mcmeta"); } static class ImputStreamLeakedResourceLogger extends InputStream { private final InputStream field_177330_a; private final String field_177328_b; private boolean field_177329_c = false; private static final String __OBFID = "CL_00002395"; public ImputStreamLeakedResourceLogger(InputStream p_i46093_1_, ResourceLocation p_i46093_2_, String p_i46093_3_) { this.field_177330_a = p_i46093_1_; ByteArrayOutputStream var4 = new ByteArrayOutputStream(); (new Exception()).printStackTrace(new PrintStream(var4)); this.field_177328_b = "Leaked resource: \'" + p_i46093_2_ + "\' loaded from pack: \'" + p_i46093_3_ + "\'\n" + var4.toString(); } public void close() throws IOException { this.field_177330_a.close(); this.field_177329_c = true; } protected void finalize() throws Throwable { if (!this.field_177329_c) { FallbackResourceManager.field_177246_b.warn(this.field_177328_b); } super.finalize(); } public int read() throws IOException { return this.field_177330_a.read(); } } }