/src/main/java/com/prupe/mcpatcher/mod/TileLoader.java

https://bitbucket.org/kingbowser/hysteria-spoutcraft · Java · 197 lines · 162 code · 35 blank · 0 comment · 40 complexity · 180c1c59179cc0b080a911400a3a3895 MD5 · raw file

  1. package com.prupe.mcpatcher.mod;
  2. import com.prupe.mcpatcher.Config;
  3. import com.prupe.mcpatcher.MCLogger;
  4. import com.prupe.mcpatcher.TexturePackAPI;
  5. import java.awt.Color;
  6. import java.awt.Graphics;
  7. import java.awt.image.BufferedImage;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.HashSet;
  11. import java.util.Iterator;
  12. import java.util.List;
  13. import java.util.Map;
  14. import net.minecraft.src.Icon;
  15. import net.minecraft.src.StitchHolder;
  16. import net.minecraft.src.Stitcher;
  17. import net.minecraft.src.Texture;
  18. import net.minecraft.src.TextureManager;
  19. import net.minecraft.src.TextureMap;
  20. public class TileLoader {
  21. private static final MCLogger logger = MCLogger.getLogger("Connected Textures", "CTM");
  22. private static final boolean debugTextures = Config.getBoolean("Connected Textures", "debugTextures", false);
  23. private static String overrideTextureName;
  24. private final MCLogger subLogger;
  25. private final Map tileTextures = new HashMap();
  26. private final Map loadedIcons = new HashMap();
  27. public static String getOverridePath(String var0, String var1, String var2) {
  28. String var3;
  29. if (var1.startsWith("/")) {
  30. var3 = var1.substring(1).replaceFirst("\\.[^.]+$", "") + var2;
  31. } else {
  32. var3 = var0 + var1 + var2;
  33. }
  34. logger.finer("getOverridePath(%s, %s, %s) -> %s", new Object[] {var0, var1, var2, var3});
  35. return var3;
  36. }
  37. public static String getOverrideTextureName(String var0) {
  38. if (overrideTextureName == null) {
  39. if (var0.matches("^\\d+$")) {
  40. logger.warning("no override set for %s", new Object[] {var0});
  41. }
  42. return var0;
  43. } else {
  44. logger.finer("getOverrideTextureName(%s) -> %s", new Object[] {var0, overrideTextureName});
  45. return overrideTextureName;
  46. }
  47. }
  48. TileLoader(MCLogger var1) {
  49. this.subLogger = var1;
  50. }
  51. static BufferedImage generateDebugTexture(String var0, int var1, int var2, boolean var3) {
  52. BufferedImage var4 = new BufferedImage(var1, var2, 2);
  53. Graphics var5 = var4.getGraphics();
  54. var5.setColor(var3 ? new Color(0, 255, 255, 128) : Color.WHITE);
  55. var5.fillRect(0, 0, var1, var2);
  56. var5.setColor(var3 ? Color.RED : Color.BLACK);
  57. int var6 = 10;
  58. if (var3) {
  59. var6 += var2 / 2;
  60. }
  61. int var7 = var1 / 8;
  62. if (var7 <= 0) {
  63. return var4;
  64. } else {
  65. while (var0.length() % var7 != 0) {
  66. var0 = var0 + " ";
  67. }
  68. while (var6 < var2 && !var0.equals("")) {
  69. var5.drawString(var0.substring(0, var7), 1, var6);
  70. var6 += var5.getFont().getSize();
  71. var0 = var0.substring(var7);
  72. }
  73. return var4;
  74. }
  75. }
  76. boolean preload(String var1, List var2, boolean var3) {
  77. if (!var1.toLowerCase().endsWith(".png")) {
  78. var1 = var1 + ".png";
  79. }
  80. if (this.tileTextures.containsKey(var1)) {
  81. var2.add(var1);
  82. return true;
  83. } else {
  84. Object var4;
  85. label94: {
  86. boolean var5;
  87. try {
  88. overrideTextureName = var1;
  89. if (debugTextures || !TexturePackAPI.hasResource(var1)) {
  90. BufferedImage var11 = generateDebugTexture(var1, 64, 64, var3);
  91. Texture var6 = TextureManager.instance().makeTexture(var1, 2, var11.getWidth(), var11.getHeight(), 10496, 6408, 9728, 9728, false, var11);
  92. if (var6 == null) {
  93. boolean var7 = false;
  94. return var7;
  95. }
  96. var4 = new ArrayList();
  97. ((List)var4).add(var6);
  98. break label94;
  99. }
  100. var4 = TextureManager.instance().createTexture(var1.replaceFirst("^/", ""));
  101. if (var4 != null && !((List)var4).isEmpty()) {
  102. break label94;
  103. }
  104. var5 = false;
  105. } finally {
  106. overrideTextureName = null;
  107. }
  108. return var5;
  109. }
  110. var2.add(var1);
  111. this.tileTextures.put(var1, var4);
  112. return true;
  113. }
  114. }
  115. Icon[] registerIcons(TextureMap var1, Stitcher var2, Map var3, List var4) {
  116. Icon[] var5 = new Icon[var4.size()];
  117. for (int var6 = 0; var6 < var4.size(); ++var6) {
  118. String var7 = (String)var4.get(var6);
  119. if (var7 != null) {
  120. var5[var6] = (Icon)this.loadedIcons.get(var7);
  121. if (var5[var6] == null) {
  122. List var8 = (List)this.tileTextures.get(var7);
  123. if (var8 != null && !var8.isEmpty()) {
  124. Texture var9 = (Texture)var8.get(0);
  125. StitchHolder var10 = new StitchHolder(var9);
  126. var2.addStitchHolder(var10);
  127. var3.put(var10, var8);
  128. var5[var6] = var1.registerIcon(var7);
  129. TessellatorUtils.registerIcon(var1, var5[var6]);
  130. this.loadedIcons.put(var7, var5[var6]);
  131. String var11 = var8.size() > 1 ? ", " + var8.size() + " frames" : "";
  132. this.subLogger.finer("%s -> icon: %dx%d%s", new Object[] {var7, Integer.valueOf(var9.getWidth()), Integer.valueOf(var9.getHeight()), var11});
  133. } else {
  134. this.subLogger.error("tile for %s unexpectedly missing", new Object[] {var7});
  135. }
  136. }
  137. }
  138. }
  139. return var5;
  140. }
  141. int getTextureSize(List var1) {
  142. HashSet var2 = new HashSet();
  143. var2.addAll(var1);
  144. int var3 = 0;
  145. String var5;
  146. for (Iterator var4 = var2.iterator(); var4.hasNext(); var3 += this.getTextureSize(var5)) {
  147. var5 = (String)var4.next();
  148. }
  149. return var3;
  150. }
  151. int getTextureSize(String var1) {
  152. if (var1 == null) {
  153. return 0;
  154. } else {
  155. List var2 = (List)this.tileTextures.get(var1);
  156. return var2 != null && !var2.isEmpty() && this.loadedIcons.get(var1) == null ? ((Texture)var2.get(0)).getWidth() * ((Texture)var2.get(0)).getHeight() : 0;
  157. }
  158. }
  159. void finish() {
  160. this.tileTextures.clear();
  161. }
  162. }