Package com.prupe.mcpatcher

Source Code of com.prupe.mcpatcher.TexturePackChangeHandler

package com.prupe.mcpatcher;

import com.prupe.mcpatcher.TexturePackChangeHandler$1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Map.Entry;
import net.minecraft.src.Minecraft;
import net.minecraft.src.ResourceLocation;
import net.minecraft.src.ResourcePack;
import net.minecraft.src.SimpleTexture;
import net.minecraft.src.TextureManager;
import net.minecraft.src.TextureObject;

public abstract class TexturePackChangeHandler {
  private static final MCLogger logger = MCLogger.getLogger("Texture Pack");
  private static final ArrayList<TexturePackChangeHandler> handlers = new ArrayList();
  private static boolean initializing;
  private static boolean changing;
  private static long startTime;
  private static long startMem;
  private boolean updateNeeded;
  protected final String name;
  protected final int order;

  public TexturePackChangeHandler(String name, int order) {
    this.name = name;
    this.order = order;
  }

  public void initialize() {
    this.beforeChange();
    this.afterChange();
  }

  public void refresh() {
    this.beforeChange();
    this.afterChange();
  }

  public abstract void beforeChange();

  public abstract void afterChange();

  public void afterChange2() {}

  protected void setUpdateNeeded(boolean updateNeeded) {
    this.updateNeeded = updateNeeded;
  }

  public static void scheduleTexturePackRefresh() {
    // ToDO:
    //Minecraft.getMinecraft().scheduleTexturePackRefresh();
  }

  public static void register(TexturePackChangeHandler handler) {
    if (handler != null) {
      if (Minecraft.getMinecraft().getResourceManager() != null) {
        try {
          logger.info("initializing %s...", new Object[] {handler.name});
          handler.initialize();
        } catch (Throwable var2) {
          var2.printStackTrace();
          logger.severe("%s initialization failed", new Object[] {handler.name});
        }
      }

      handlers.add(handler);
      logger.fine("registered texture pack handler %s, priority %d", new Object[] {handler.name, Integer.valueOf(handler.order)});
      Collections.sort(handlers, new TexturePackChangeHandler$1());
    }
  }

  public static void earlyInitialize(String className, String methodName) {
    try {
      logger.fine("calling %s.%s", new Object[] {className, methodName});
      Class.forName(className).getDeclaredMethod(methodName, new Class[0]).invoke((Object)null, new Object[0]);
    } catch (Throwable var3) {
      ;
    }
  }

  public static void checkForTexturePackChange() {
    Iterator i$ = handlers.iterator();

    while (i$.hasNext()) {
      TexturePackChangeHandler handler = (TexturePackChangeHandler)i$.next();

      if (handler.updateNeeded) {
        handler.updateNeeded = false;

        try {
          logger.info("refreshing %s...", new Object[] {handler.name});
          handler.refresh();
        } catch (Throwable var3) {
          var3.printStackTrace();
          logger.severe("%s refresh failed", new Object[] {handler.name});
        }
      }
    }
  }

  public static void beforeChange1(boolean initializing1) {
    logger.finer("beforeChange1(%s) initializing=%s changing=%s", new Object[] {Boolean.valueOf(initializing1), Boolean.valueOf(initializing), Boolean.valueOf(changing)});

    if (initializing1) {
      logger.finer("skipping beforeChange1 because we are still initializing", new Object[0]);
      initializing = true;
    } else if (changing && !initializing) {
      (new RuntimeException("unexpected recursive call to TexturePackChangeHandler")).printStackTrace();
    } else {
      changing = true;
      startTime = System.currentTimeMillis();
      Runtime runtime = Runtime.getRuntime();
      startMem = runtime.totalMemory() - runtime.freeMemory();
      List resourcePacks = TexturePackAPI.getResourcePacks((String)null);
      logger.fine("%s resource packs (%d selected):", new Object[] {initializing ? "initializing" : "changing", Integer.valueOf(resourcePacks.size())});
      Iterator namespaces = resourcePacks.iterator();

      while (namespaces.hasNext()) {
        ResourcePack textureManager = (ResourcePack)namespaces.next();
        logger.fine("resource pack: %s", new Object[] {textureManager.getPackName()});
      }

      Set namespaces1 = TexturePackAPI.getNamespaces();
      logger.fine("%d resource namespaces:", new Object[] {Integer.valueOf(namespaces1.size())});
      Iterator textureManager1 = namespaces1.iterator();

      while (textureManager1.hasNext()) {
        String texturesToUnload = (String)textureManager1.next();
        logger.fine("namespace: %s", new Object[] {texturesToUnload});
      }

      textureManager1 = handlers.iterator();

      while (textureManager1.hasNext()) {
        TexturePackChangeHandler texturesToUnload1 = (TexturePackChangeHandler)textureManager1.next();

        try {
          logger.info("refreshing %s (pre)...", new Object[] {texturesToUnload1.name});
          texturesToUnload1.beforeChange();
        } catch (Throwable var10) {
          var10.printStackTrace();
          logger.severe("%s.beforeChange failed", new Object[] {texturesToUnload1.name});
        }
      }

      TextureManager textureManager2 = Minecraft.getMinecraft().getTextureManager();

      if (textureManager2 != null) {
        HashSet texturesToUnload2 = new HashSet();
        Iterator i$ = textureManager2.mapTextureObjects.entrySet().iterator();

        while (i$.hasNext()) {
          Entry resource = (Entry)i$.next();
          ResourceLocation resource1 = (ResourceLocation)resource.getKey();
          TextureObject texture = (TextureObject)resource.getValue();

          if (texture instanceof SimpleTexture && !TexturePackAPI.hasResource(resource1)) {
            texturesToUnload2.add(resource1);
          }
        }

        i$ = texturesToUnload2.iterator();

        while (i$.hasNext()) {
          ResourceLocation resource2 = (ResourceLocation)i$.next();
          TexturePackAPI.unloadTexture(resource2);
        }
      }
    }
  }

  public static void afterChange1(boolean initializing1) {
    logger.finer("afterChange1(%s) initializing=%s changing=%s", new Object[] {Boolean.valueOf(initializing1), Boolean.valueOf(initializing), Boolean.valueOf(changing)});

    if (initializing && !initializing1) {
      logger.finer("deferring afterChange1 because we are still initializing", new Object[0]);
    } else {
      Iterator timeDiff = handlers.iterator();
      TexturePackChangeHandler handler;

      while (timeDiff.hasNext()) {
        handler = (TexturePackChangeHandler)timeDiff.next();

        try {
          logger.info("refreshing %s (post)...", new Object[] {handler.name});
          handler.afterChange();
        } catch (Throwable var7) {
          var7.printStackTrace();
          logger.severe("%s.afterChange failed", new Object[] {handler.name});
        }
      }

      for (int var8 = handlers.size() - 1; var8 >= 0; --var8) {
        handler = (TexturePackChangeHandler)handlers.get(var8);

        try {
          handler.afterChange2();
        } catch (Throwable var6) {
          var6.printStackTrace();
          logger.severe("%s.afterChange2 failed", new Object[] {handler.name});
        }
      }

      System.gc();
      long var9 = System.currentTimeMillis() - startTime;
      Runtime runtime = Runtime.getRuntime();
      long memDiff = runtime.totalMemory() - runtime.freeMemory() - startMem;
      logger.info("done (%.3fs elapsed, mem usage %+.1fMB)\n", new Object[] {Double.valueOf((double)var9 / 1000.0D), Double.valueOf((double)memDiff / 1048576.0D)});
      changing = false;
      initializing = false;
    }
  }
}
TOP

Related Classes of com.prupe.mcpatcher.TexturePackChangeHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.