mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-08 04:41:51 +09:00
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
121 lines
2.8 KiB
Java
121 lines
2.8 KiB
Java
package org.newdawn.slick.util;
|
|
|
|
import java.io.BufferedInputStream;
|
|
import java.io.File;
|
|
import java.io.InputStream;
|
|
import java.net.URL;
|
|
import java.util.ArrayList;
|
|
|
|
/**
|
|
* A simple wrapper around resource loading should anyone decide to change
|
|
* their minds how this is meant to work in the future.
|
|
*
|
|
* @author Kevin Glass
|
|
*/
|
|
public class ResourceLoader {
|
|
/** The list of locations to be searched */
|
|
private static ArrayList locations = new ArrayList();
|
|
|
|
static {
|
|
locations.add(new ClasspathLocation());
|
|
locations.add(new FileSystemLocation(new File(".")));
|
|
}
|
|
|
|
/**
|
|
* Add a location that will be searched for resources
|
|
*
|
|
* @param location The location that will be searched for resoruces
|
|
*/
|
|
public static void addResourceLocation(ResourceLocation location) {
|
|
locations.add(location);
|
|
}
|
|
|
|
/**
|
|
* Remove a location that will be no longer be searched for resources
|
|
*
|
|
* @param location The location that will be removed from the search list
|
|
*/
|
|
public static void removeResourceLocation(ResourceLocation location) {
|
|
locations.remove(location);
|
|
}
|
|
|
|
/**
|
|
* Remove all the locations, no resources will be found until
|
|
* new locations have been added
|
|
*/
|
|
public static void removeAllResourceLocations() {
|
|
locations.clear();
|
|
}
|
|
|
|
/**
|
|
* Get a resource
|
|
*
|
|
* @param ref The reference to the resource to retrieve
|
|
* @return A stream from which the resource can be read
|
|
*/
|
|
public static InputStream getResourceAsStream(String ref) {
|
|
InputStream in = null;
|
|
|
|
for (int i=0;i<locations.size();i++) {
|
|
ResourceLocation location = (ResourceLocation) locations.get(i);
|
|
in = location.getResourceAsStream(ref);
|
|
if (in != null) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (in == null)
|
|
{
|
|
throw new RuntimeException("Resource not found: "+ref);
|
|
}
|
|
|
|
return new BufferedInputStream(in);
|
|
}
|
|
|
|
/**
|
|
* Check if a resource is available from any given resource loader
|
|
*
|
|
* @param ref A reference to the resource that should be checked
|
|
* @return True if the resource can be located
|
|
*/
|
|
public static boolean resourceExists(String ref) {
|
|
URL url = null;
|
|
|
|
for (int i=0;i<locations.size();i++) {
|
|
ResourceLocation location = (ResourceLocation) locations.get(i);
|
|
url = location.getResource(ref);
|
|
if (url != null) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get a resource as a URL
|
|
*
|
|
* @param ref The reference to the resource to retrieve
|
|
* @return A URL from which the resource can be read
|
|
*/
|
|
public static URL getResource(String ref) {
|
|
|
|
URL url = null;
|
|
|
|
for (int i=0;i<locations.size();i++) {
|
|
ResourceLocation location = (ResourceLocation) locations.get(i);
|
|
url = location.getResource(ref);
|
|
if (url != null) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (url == null)
|
|
{
|
|
throw new RuntimeException("Resource not found: "+ref);
|
|
}
|
|
|
|
return url;
|
|
}
|
|
}
|