001/* 002 * Forge Mod Loader 003 * Copyright (c) 2012-2013 cpw. 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser Public License v2.1 006 * which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 008 * 009 * Contributors: 010 * cpw - implementation 011 */ 012 013package cpw.mods.fml.client; 014 015import java.awt.Dimension; 016import java.awt.image.BufferedImage; 017import java.io.IOException; 018import java.io.InputStream; 019import java.util.Map; 020 021import javax.imageio.ImageIO; 022 023import com.google.common.collect.Maps; 024 025import net.minecraft.client.Minecraft; 026import net.minecraft.client.renderer.RenderEngine; 027 028public class TextureFXManager 029{ 030 private static final TextureFXManager INSTANCE = new TextureFXManager(); 031 032 private Minecraft client; 033 034 private Map<Integer,TextureHolder> texturesById = Maps.newHashMap(); 035 private Map<String, TextureHolder> texturesByName = Maps.newHashMap(); 036 037 void setClient(Minecraft client) 038 { 039 this.client = client; 040 } 041 public BufferedImage loadImageFromTexturePack(RenderEngine renderEngine, String path) throws IOException 042 { 043 InputStream image=client.texturePackList.getSelectedTexturePack().getResourceAsStream(path); 044 if (image==null) { 045 throw new RuntimeException(String.format("The requested image path %s is not found",path)); 046 } 047 BufferedImage result=ImageIO.read(image); 048 if (result==null) 049 { 050 throw new RuntimeException(String.format("The requested image path %s appears to be corrupted",path)); 051 } 052 return result; 053 } 054 055 public static TextureFXManager instance() 056 { 057 return INSTANCE; 058 } 059 060 public void fixTransparency(BufferedImage loadedImage, String textureName) 061 { 062 if (textureName.matches("^/mob/.*_eyes.*.png$")) 063 { 064 for (int x = 0; x < loadedImage.getWidth(); x++) { 065 for (int y = 0; y < loadedImage.getHeight(); y++) { 066 int argb = loadedImage.getRGB(x, y); 067 if ((argb & 0xff000000) == 0 && argb != 0) { 068 loadedImage.setRGB(x, y, 0); 069 } 070 } 071 } 072 } 073 } 074 public void bindTextureToName(String name, int index) 075 { 076 TextureHolder holder = new TextureHolder(); 077 holder.textureId = index; 078 holder.textureName = name; 079 texturesById.put(index,holder); 080 texturesByName.put(name,holder); 081 } 082 083 public void setTextureDimensions(int index, int j, int k) 084 { 085 TextureHolder holder = texturesById.get(index); 086 if (holder == null) 087 { 088 return; 089 } 090 holder.x = j; 091 holder.y = k; 092 } 093 094 private class TextureHolder { 095 private int textureId; 096 private String textureName; 097 private int x; 098 private int y; 099 } 100 101 public Dimension getTextureDimensions(String texture) 102 { 103 return texturesByName.containsKey(texture) ? new Dimension(texturesByName.get(texture).x, texturesByName.get(texture).y) : new Dimension(1,1); 104 } 105}