package net.minecraft.client.renderer.texture; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.Callable; import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReportCategory; import net.minecraft.util.ReportedException; import net.minecraft.util.ResourceLocation; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @SideOnly(Side.CLIENT) public class TextureManager implements ITickable, IResourceManagerReloadListener { private static final Logger logger = LogManager.getLogger(); private final Map mapTextureObjects = Maps.newHashMap(); private final Map mapResourceLocations = Maps.newHashMap(); private final List listTickables = Lists.newArrayList(); private final Map mapTextureCounters = Maps.newHashMap(); private IResourceManager theResourceManager; private static final String __OBFID = "CL_00001064"; public TextureManager(IResourceManager p_i1284_1_) { this.theResourceManager = p_i1284_1_; } public void bindTexture(ResourceLocation resource) { Object object = (ITextureObject)this.mapTextureObjects.get(resource); if (object == null) { object = new SimpleTexture(resource); this.loadTexture(resource, (ITextureObject)object); } TextureUtil.bindTexture(((ITextureObject)object).getGlTextureId()); } public ResourceLocation getResourceLocation(int p_130087_1_) { return (ResourceLocation)this.mapResourceLocations.get(Integer.valueOf(p_130087_1_)); } public boolean loadTextureMap(ResourceLocation p_130088_1_, TextureMap p_130088_2_) { if (this.loadTickableTexture(p_130088_1_, p_130088_2_)) { this.mapResourceLocations.put(Integer.valueOf(p_130088_2_.getTextureType()), p_130088_1_); return true; } else { return false; } } public boolean loadTickableTexture(ResourceLocation p_110580_1_, ITickableTextureObject p_110580_2_) { if (this.loadTexture(p_110580_1_, p_110580_2_)) { this.listTickables.add(p_110580_2_); return true; } else { return false; } } public boolean loadTexture(ResourceLocation p_110579_1_, final ITextureObject p_110579_2_) { boolean flag = true; ITextureObject p_110579_2_2 = p_110579_2_; try { ((ITextureObject)p_110579_2_).loadTexture(this.theResourceManager); } catch (IOException ioexception) { logger.warn("Failed to load texture: " + p_110579_1_, ioexception); p_110579_2_2 = TextureUtil.missingTexture; this.mapTextureObjects.put(p_110579_1_, p_110579_2_2); flag = false; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Registering texture"); CrashReportCategory crashreportcategory = crashreport.makeCategory("Resource location being registered"); crashreportcategory.addCrashSection("Resource location", p_110579_1_); crashreportcategory.addCrashSectionCallable("Texture object class", new Callable() { private static final String __OBFID = "CL_00001065"; public String call() { return p_110579_2_.getClass().getName(); } }); throw new ReportedException(crashreport); } this.mapTextureObjects.put(p_110579_1_, p_110579_2_2); return flag; } public ITextureObject getTexture(ResourceLocation p_110581_1_) { return (ITextureObject)this.mapTextureObjects.get(p_110581_1_); } public ResourceLocation getDynamicTextureLocation(String p_110578_1_, DynamicTexture p_110578_2_) { Integer integer = (Integer)this.mapTextureCounters.get(p_110578_1_); if (integer == null) { integer = Integer.valueOf(1); } else { integer = Integer.valueOf(integer.intValue() + 1); } this.mapTextureCounters.put(p_110578_1_, integer); ResourceLocation resourcelocation = new ResourceLocation(String.format("dynamic/%s_%d", new Object[] {p_110578_1_, integer})); this.loadTexture(resourcelocation, p_110578_2_); return resourcelocation; } public void tick() { Iterator iterator = this.listTickables.iterator(); while (iterator.hasNext()) { ITickable itickable = (ITickable)iterator.next(); itickable.tick(); } } public void deleteTexture(ResourceLocation p_147645_1_) { ITextureObject itextureobject = this.getTexture(p_147645_1_); if (itextureobject != null) { TextureUtil.deleteTexture(itextureobject.getGlTextureId()); } } public void onResourceManagerReload(IResourceManager p_110549_1_) { cpw.mods.fml.common.ProgressManager.ProgressBar bar = cpw.mods.fml.common.ProgressManager.push("Reloading Texture Manager", this.mapTextureObjects.keySet().size(), true); Iterator iterator = this.mapTextureObjects.entrySet().iterator(); while (iterator.hasNext()) { Entry entry = (Entry)iterator.next(); bar.step(entry.getKey().toString()); this.loadTexture((ResourceLocation)entry.getKey(), (ITextureObject)entry.getValue()); } cpw.mods.fml.common.ProgressManager.pop(bar); } }