Package cofh.repack.codechicken.lib.render

Source Code of cofh.repack.codechicken.lib.render.TextureUtils$IIconSelfRegister

package cofh.repack.codechicken.lib.render;

import cofh.repack.codechicken.lib.colour.Colour;
import cofh.repack.codechicken.lib.colour.ColourARGB;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import javax.imageio.ImageIO;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.common.MinecraftForge;

import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;

public class TextureUtils {

  public static interface IIconSelfRegister {

    public void registerIcons(IIconRegister register);

    public int atlasIndex();
  }

  static {
    MinecraftForge.EVENT_BUS.register(new TextureUtils());
  }

  private static ArrayList<IIconSelfRegister> iconRegistrars = new ArrayList<TextureUtils.IIconSelfRegister>();

  public static void addIconRegistrar(IIconSelfRegister registrar) {

    iconRegistrars.add(registrar);
  }

  @SubscribeEvent
  public void textureLoad(TextureStitchEvent.Pre event) {

    for (IIconSelfRegister reg : iconRegistrars) {
      if (reg.atlasIndex() == event.map.getTextureType()) {
        reg.registerIcons(event.map);
      }
    }
  }

  /**
   * @return an array of ARGB pixel data
   */
  public static int[] loadTextureData(ResourceLocation resource) {

    return loadTexture(resource).data;
  }

  public static Colour[] loadTextureColours(ResourceLocation resource) {

    int[] idata = loadTextureData(resource);
    Colour[] data = new Colour[idata.length];
    for (int i = 0; i < data.length; i++) {
      data[i] = new ColourARGB(idata[i]);
    }
    return data;
  }

  public static InputStream getTextureResource(ResourceLocation textureFile) throws IOException {

    return Minecraft.getMinecraft().getResourceManager().getResource(textureFile).getInputStream();
  }

  public static BufferedImage loadBufferedImage(ResourceLocation textureFile) {

    try {
      return loadBufferedImage(getTextureResource(textureFile));
    } catch (Exception e) {
      System.err.println("Failed to load texture file: " + textureFile);
      e.printStackTrace();
    }
    return null;
  }

  public static BufferedImage loadBufferedImage(InputStream in) throws IOException {

    BufferedImage img = ImageIO.read(in);
    in.close();
    return img;
  }

  public static TextureManager engine() {

    return Minecraft.getMinecraft().renderEngine;
  }

  public static void copySubImg(int[] fromTex, int fromWidth, int fromX, int fromY, int width, int height, int[] toTex, int toWidth, int toX, int toY) {

    for (int y = 0; y < height; y++) {
      for (int x = 0; x < width; x++) {
        int fp = (y + fromY) * fromWidth + x + fromX;
        int tp = (y + toX) * toWidth + x + toX;

        toTex[tp] = fromTex[fp];
      }
    }
  }

  public static void bindAtlas(int atlasIndex) {

    engine().bindTexture(atlasIndex == 0 ? TextureMap.locationBlocksTexture : TextureMap.locationItemsTexture);
  }

  public static IIcon getBlankIcon(int size, IIconRegister iconRegister) {

    TextureMap textureMap = (TextureMap) iconRegister;
    String s = "blank_" + size;
    if (textureMap.getTextureExtry(s) == null) {
      TextureSpecial icon = new TextureSpecial(s).blank(size);
      textureMap.setTextureEntry(s, icon);
    }
    return iconRegister.registerIcon(s);
  }

  public static TextureSpecial getTextureSpecial(IIconRegister iconRegister, String name) {

    TextureMap textureMap = (TextureMap) iconRegister;
    IIcon entry = textureMap.getTextureExtry(name);
    if (entry != null) {
      throw new IllegalStateException("Texture: " + name + " is already registered");
    }

    TextureSpecial icon = new TextureSpecial(name);
    textureMap.setTextureEntry(name, icon);
    return icon;
  }

  public static void prepareTexture(int target, int texture, int min_mag_filter, int wrap) {

    GL11.glBindTexture(target, texture);
    GL11.glTexParameteri(target, GL11.GL_TEXTURE_MIN_FILTER, min_mag_filter);
    GL11.glTexParameteri(target, GL11.GL_TEXTURE_MAG_FILTER, min_mag_filter);
    switch (target) {
    case GL12.GL_TEXTURE_3D:
      GL11.glTexParameteri(target, GL12.GL_TEXTURE_WRAP_R, wrap);
    case GL11.GL_TEXTURE_2D:
      GL11.glTexParameteri(target, GL11.GL_TEXTURE_WRAP_T, wrap);
    case GL11.GL_TEXTURE_1D:
      GL11.glTexParameteri(target, GL11.GL_TEXTURE_WRAP_S, wrap);
    }
  }

  public static TextureDataHolder loadTexture(ResourceLocation resource) {

    BufferedImage img = loadBufferedImage(resource);
    if (img == null) {
      throw new RuntimeException("Texture not found: " + resource);
    }
    return new TextureDataHolder(img);
  }

  /**
   * Uses an empty placeholder texture to tell if the map has been reloaded since the last call to refresh texture and the texture with name needs to be
   * reacquired to be valid
   */
  public static boolean refreshTexture(TextureMap map, String name) {

    if (map.getTextureExtry(name) == null) {
      map.setTextureEntry(name, new PlaceholderTexture(name));
      return true;
    }
    return false;
  }

  public static IIcon safeIcon(IIcon icon) {

    if (icon == null) {
      icon = ((TextureMap) Minecraft.getMinecraft().getTextureManager().getTexture(TextureMap.locationBlocksTexture)).getAtlasSprite("missingno");
    }

    return icon;
  }
}
TOP

Related Classes of cofh.repack.codechicken.lib.render.TextureUtils$IIconSelfRegister

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.