package co.forsaken.projectindigo.utils;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import javax.imageio.ImageIO;
import co.forsaken.projectindigo.IndigoLauncher;
public class ResourceUtils {
private static final String BASE_PATH = "";
private static final URL SPLASH_SCREEN = ResourceUtils.class.getResource(BASE_PATH + "/images/splash_screen.png");
private static final URL BASE_CHAR = ResourceUtils.class.getResource(BASE_PATH + "/images/char.png");
private static final URL BG = ResourceUtils.class.getResource(BASE_PATH + "/images/bg.jpg");
private static final URL HEADER = ResourceUtils.class.getResource(BASE_PATH + "/images/header.png");
private static final URL SETTINGS = ResourceUtils.class.getResource(BASE_PATH + "/images/settings.png");
private static final URL FOLDER = ResourceUtils.class.getResource(BASE_PATH + "/images/folder.png");
private static final URL ICON_MAC = ResourceUtils.class.getResource(BASE_PATH + "/build/app/icon.icns");
private static final URL ICON_WIN = ResourceUtils.class.getResource(BASE_PATH + "/build/exe/icon.ico");
public static URL getResource(String name) {
if (name.equalsIgnoreCase("splash_screen")) {
return SPLASH_SCREEN;
} else if (name.equalsIgnoreCase("base_char")) {
return BASE_CHAR;
} else if (name.equalsIgnoreCase("bg")) {
return BG;
} else if (name.equalsIgnoreCase("settings")) {
return SETTINGS;
} else if (name.equalsIgnoreCase("folder")) {
return FOLDER;
} else if (name.equalsIgnoreCase("header")) {
return HEADER;
} else if (name.equalsIgnoreCase("icon_file_mac")) {
return ICON_MAC;
} else if (name.equalsIgnoreCase("icon_file_win")) { return ICON_WIN; }
return null;
}
public static InputStream getResourceAsStream(String name) {
if (name.equalsIgnoreCase("minecraft_font")) {
return getResourceAsStream(BASE_PATH + "/fonts/minecraft.ttf", "");
} else if (name.equalsIgnoreCase("defaultServers")) {
return getResourceAsStream(BASE_PATH + "/data/servers", "");
} else if (name.equalsIgnoreCase("settings")) { return getResourceAsStream(BASE_PATH + "/data/settings", ""); }
return null;
}
private static InputStream getResourceAsStream(String path, String t) {
InputStream stream = IndigoLauncher.class.getResourceAsStream(path);
String[] split = path.split("/");
path = split[(split.length - 1)];
if (stream == null) {
File resource = new File(".\\src\\main\\resources\\" + path);
if (resource.exists()) try {
stream = new BufferedInputStream(new FileInputStream(resource));
} catch (IOException ignore) {}
}
return stream;
}
public static BufferedImage getImage(String img) {
try {
return ImageIO.read(ResourceUtils.class.getResource(BASE_PATH + "/images/" + img));
} catch (Exception ex) {
ex.printStackTrace(System.err);
return null;
}
}
public static BufferedImage loadCachedImage(String name, String path, BufferedImage defaultImage) {
if (!name.contains(".png")) {
name += ".png";
}
BufferedImage image = Utils.loadCachedImage(DirectoryLocations.BACKEND_CACHE_DIR.format(name));
if (image == null) {
try {
URLConnection conn = new URL(path).openConnection();
conn.setDoInput(true);
conn.setDoOutput(false);
System.setProperty("http.agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19");
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19");
HttpURLConnection.setFollowRedirects(true);
conn.setUseCaches(false);
((HttpURLConnection) conn).setInstanceFollowRedirects(true);
int response = ((HttpURLConnection) conn).getResponseCode();
if (response == 200) {
image = DrawingUtils.makeColorTransparent(ImageIO.read(conn.getInputStream()), Color.magenta);
if ((image.getWidth() != defaultImage.getWidth()) || (image.getHeight() != defaultImage.getHeight())) {
BufferedImage resized = new BufferedImage(defaultImage.getWidth(), defaultImage.getHeight(), image.getType());
Graphics2D g = resized.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(image, 0, 0, defaultImage.getWidth(), defaultImage.getHeight(), 0, 0, image.getWidth(), image.getHeight(), null);
g.dispose();
image = resized;
}
}
if (image != null) {
File f = new File(DirectoryLocations.BACKEND_CACHE_DIR.format(name));
if (!f.exists()) {
f.createNewFile();
}
ImageIO.write(image, "png", f);
return image;
}
return defaultImage;
} catch (Exception e) {
return defaultImage;
}
} else {
return image;
}
}
}