/mod_redstoneExtended/src/net/minecraft/src/util/TextureManager.java

https://github.com/ClemensB/mod_redstoneExtended · Java · 72 lines · 53 code · 19 blank · 0 comment · 13 complexity · b190198275650fdf3a8ae7a170f2ac0e MD5 · raw file

  1. package net.minecraft.src.util;
  2. import net.minecraft.src.BaseMod;
  3. import net.minecraft.src.ModLoader;
  4. import sun.reflect.Reflection;
  5. import java.util.HashMap;
  6. public class TextureManager {
  7. private static TextureManager instance;
  8. private final HashMap<String, HashMap<String, Integer>> loadedTextures;
  9. public final int emptyTexture;
  10. private TextureManager() {
  11. loadedTextures = new HashMap<String, HashMap<String, Integer>>();
  12. emptyTexture = getTerrainTexture("/empty.png");
  13. }
  14. public static TextureManager getInstance() {
  15. if (instance == null)
  16. instance = new TextureManager();
  17. return instance;
  18. }
  19. public int getTerrainTexture(String path) {
  20. return getTexture("/terrain.png", path);
  21. }
  22. public int getItemTexture(String path) {
  23. return getTexture("/gui/items.png", path);
  24. }
  25. public int getTexture(String file, String path) {
  26. String prefix;
  27. Class callerClass = Reflection.getCallerClass(2);
  28. if (callerClass.getSimpleName().equals("TextureManager"))
  29. callerClass = Reflection.getCallerClass(3);
  30. String callerClassName = callerClass.getSimpleName();
  31. Package callerClassPackage = callerClass.getPackage();
  32. if (callerClassPackage != null && !callerClassPackage.getName().equals("net.minecraft.src")) {
  33. String callerPackageName = callerClass.getPackage().getName();
  34. if (callerPackageName.startsWith("net.minecraft.src."))
  35. callerPackageName = callerPackageName.substring(("net.minecraft.src.").length());
  36. prefix = "/" + callerPackageName;
  37. } else if (BaseMod.class.isAssignableFrom(callerClass) && callerClassName.startsWith("mod_") &&
  38. callerClassName.length() > 4) {
  39. prefix = "/" + callerClassName.substring(4);
  40. } else
  41. throw new IllegalCallerException("Caller must either be in an mod-unique package " +
  42. "or be a BaseMod with the prefix mod_");
  43. if (!loadedTextures.containsKey(file))
  44. loadedTextures.put(file, new HashMap<String, Integer>());
  45. if (loadedTextures.get(file).containsKey(prefix + path)) {
  46. return loadedTextures.get(file).get(prefix + path);
  47. } else {
  48. int textureId = ModLoader.addOverride(file, prefix + path);
  49. loadedTextures.get(file).put(prefix + path, textureId);
  50. return textureId;
  51. }
  52. }
  53. }