package net.minecraft.client.resources; import com.google.common.collect.ImmutableList; 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.awt.image.BufferedImage; import java.io.Closeable; import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreenWorking; import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.resources.data.IMetadataSerializer; import net.minecraft.client.resources.data.PackMetadataSection; import net.minecraft.client.settings.GameSettings; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.HttpUtil; import net.minecraft.util.ResourceLocation; import org.apache.commons.io.IOUtils; @SideOnly(Side.CLIENT) public class ResourcePackRepository { protected static final FileFilter resourcePackFilter = new FileFilter() { private static final String __OBFID = "CL_00001088"; public boolean accept(File p_accept_1_) { boolean flag = p_accept_1_.isFile() && p_accept_1_.getName().endsWith(".zip"); boolean flag1 = p_accept_1_.isDirectory() && (new File(p_accept_1_, "pack.mcmeta")).isFile(); return flag || flag1; } }; private final File dirResourcepacks; public final IResourcePack rprDefaultResourcePack; private final File field_148534_e; public final IMetadataSerializer rprMetadataSerializer; private IResourcePack field_148532_f; private boolean field_148533_g; private List repositoryEntriesAll = Lists.newArrayList(); private List repositoryEntries = Lists.newArrayList(); private static final String __OBFID = "CL_00001087"; public ResourcePackRepository(File p_i45101_1_, File p_i45101_2_, IResourcePack p_i45101_3_, IMetadataSerializer p_i45101_4_, GameSettings p_i45101_5_) { this.dirResourcepacks = p_i45101_1_; this.field_148534_e = p_i45101_2_; this.rprDefaultResourcePack = p_i45101_3_; this.rprMetadataSerializer = p_i45101_4_; this.fixDirResourcepacks(); this.updateRepositoryEntriesAll(); Iterator iterator = p_i45101_5_.resourcePacks.iterator(); while (iterator.hasNext()) { String s = (String)iterator.next(); Iterator iterator1 = this.repositoryEntriesAll.iterator(); while (iterator1.hasNext()) { ResourcePackRepository.Entry entry = (ResourcePackRepository.Entry)iterator1.next(); if (entry.getResourcePackName().equals(s)) { this.repositoryEntries.add(entry); break; } } } } private void fixDirResourcepacks() { if (!this.dirResourcepacks.isDirectory()) { this.dirResourcepacks.delete(); this.dirResourcepacks.mkdirs(); } } private List getResourcePackFiles() { return this.dirResourcepacks.isDirectory() ? Arrays.asList(this.dirResourcepacks.listFiles(resourcePackFilter)) : Collections.emptyList(); } public void updateRepositoryEntriesAll() { ArrayList arraylist = Lists.newArrayList(); Iterator iterator = this.getResourcePackFiles().iterator(); while (iterator.hasNext()) { File file1 = (File)iterator.next(); ResourcePackRepository.Entry entry = new ResourcePackRepository.Entry(file1, null); if (!this.repositoryEntriesAll.contains(entry)) { try { entry.updateResourcePack(); arraylist.add(entry); } catch (Exception exception) { arraylist.remove(entry); } } else { int i = this.repositoryEntriesAll.indexOf(entry); if (i > -1 && i < this.repositoryEntriesAll.size()) { arraylist.add(this.repositoryEntriesAll.get(i)); } } } this.repositoryEntriesAll.removeAll(arraylist); iterator = this.repositoryEntriesAll.iterator(); while (iterator.hasNext()) { ResourcePackRepository.Entry entry1 = (ResourcePackRepository.Entry)iterator.next(); entry1.closeResourcePack(); } this.repositoryEntriesAll = arraylist; } public List getRepositoryEntriesAll() { return ImmutableList.copyOf(this.repositoryEntriesAll); } public List getRepositoryEntries() { return ImmutableList.copyOf(this.repositoryEntries); } public void func_148527_a(List p_148527_1_) { this.repositoryEntries.clear(); this.repositoryEntries.addAll(p_148527_1_); } public File getDirResourcepacks() { return this.dirResourcepacks; } public void obtainResourcePack(String p_148526_1_) { String s1 = p_148526_1_.substring(p_148526_1_.lastIndexOf("/") + 1); if (s1.contains("?")) { s1 = s1.substring(0, s1.indexOf("?")); } if (s1.endsWith(".zip")) { File file1 = new File(this.field_148534_e, s1.replaceAll("\\W", "")); this.func_148529_f(); this.func_148528_a(p_148526_1_, file1); } } private void func_148528_a(String p_148528_1_, File p_148528_2_) { HashMap hashmap = Maps.newHashMap(); GuiScreenWorking guiscreenworking = new GuiScreenWorking(); hashmap.put("X-Minecraft-Username", Minecraft.getMinecraft().getSession().getUsername()); hashmap.put("X-Minecraft-UUID", Minecraft.getMinecraft().getSession().getPlayerID()); hashmap.put("X-Minecraft-Version", "1.7.10"); this.field_148533_g = true; Minecraft.getMinecraft().displayGuiScreen(guiscreenworking); HttpUtil.downloadResourcePack(p_148528_2_, p_148528_1_, new HttpUtil.DownloadListener() { private static final String __OBFID = "CL_00001089"; public void onDownloadComplete(File p_148522_1_) { if (ResourcePackRepository.this.field_148533_g) { ResourcePackRepository.this.field_148533_g = false; ResourcePackRepository.this.field_148532_f = new FileResourcePack(p_148522_1_); Minecraft.getMinecraft().scheduleResourcesRefresh(); } } }, hashmap, 52428800, guiscreenworking, Minecraft.getMinecraft().getProxy()); } /** * Getter for the IResourcePack instance associated with this ResourcePackRepository */ public IResourcePack getResourcePackInstance() { return this.field_148532_f; } public void func_148529_f() { this.field_148532_f = null; this.field_148533_g = false; } @SideOnly(Side.CLIENT) public class Entry { private final File resourcePackFile; private IResourcePack reResourcePack; private PackMetadataSection rePackMetadataSection; private BufferedImage texturePackIcon; private ResourceLocation locationTexturePackIcon; private static final String __OBFID = "CL_00001090"; private Entry(File p_i1295_2_) { this.resourcePackFile = p_i1295_2_; } public void updateResourcePack() throws IOException { this.reResourcePack = (IResourcePack)(this.resourcePackFile.isDirectory() ? new FolderResourcePack(this.resourcePackFile) : new FileResourcePack(this.resourcePackFile)); this.rePackMetadataSection = (PackMetadataSection)this.reResourcePack.getPackMetadata(ResourcePackRepository.this.rprMetadataSerializer, "pack"); try { this.texturePackIcon = this.reResourcePack.getPackImage(); } catch (IOException ioexception) { ; } if (this.texturePackIcon == null) { this.texturePackIcon = ResourcePackRepository.this.rprDefaultResourcePack.getPackImage(); } this.closeResourcePack(); } public void bindTexturePackIcon(TextureManager p_110518_1_) { if (this.locationTexturePackIcon == null) { this.locationTexturePackIcon = p_110518_1_.getDynamicTextureLocation("texturepackicon", new DynamicTexture(this.texturePackIcon)); } p_110518_1_.bindTexture(this.locationTexturePackIcon); } public void closeResourcePack() { if (this.reResourcePack instanceof Closeable) { IOUtils.closeQuietly((Closeable)this.reResourcePack); } } public IResourcePack getResourcePack() { return this.reResourcePack; } public String getResourcePackName() { return this.reResourcePack.getPackName(); } public String getTexturePackDescription() { return this.rePackMetadataSection == null ? EnumChatFormatting.RED + "Invalid pack.mcmeta (or missing \'pack\' section)" : this.rePackMetadataSection.func_152805_a().getFormattedText(); } public boolean equals(Object p_equals_1_) { return this == p_equals_1_ ? true : (p_equals_1_ instanceof ResourcePackRepository.Entry ? this.toString().equals(p_equals_1_.toString()) : false); } public int hashCode() { return this.toString().hashCode(); } public String toString() { return String.format("%s:%s:%d", new Object[] {this.resourcePackFile.getName(), this.resourcePackFile.isDirectory() ? "folder" : "zip", Long.valueOf(this.resourcePackFile.lastModified())}); } Entry(File p_i1296_2_, Object p_i1296_3_) { this(p_i1296_2_); } } }