75 lines
2.4 KiB
Java
75 lines
2.4 KiB
Java
package mods.betterfoliage.client.resource;
|
|
|
|
import java.awt.Graphics2D;
|
|
import java.awt.image.BufferedImage;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.InputStream;
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
import mods.betterfoliage.BetterFoliage;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.resources.IResource;
|
|
import net.minecraft.client.resources.IResourceManager;
|
|
import net.minecraft.client.resources.data.IMetadataSection;
|
|
import net.minecraft.util.ResourceLocation;
|
|
|
|
/** {@link IResource} of PNG containing one half (top or bottom) of a given texture resource
|
|
* @author octarine-noise
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
public class HalfTextureResource implements IResource {
|
|
|
|
/** Raw PNG data*/
|
|
public byte[] data = null;
|
|
|
|
/** Resource to return if generation fails */
|
|
public IResource fallbackResource;
|
|
|
|
public HalfTextureResource(ResourceLocation resource, boolean bottom, IResource fallbackResource) {
|
|
this.fallbackResource = fallbackResource;
|
|
|
|
IResourceManager resourceManager = Minecraft.getMinecraft().getResourceManager();
|
|
try {
|
|
// load full texture
|
|
ResourceLocation origResource = new ResourceLocation(resource.getResourceDomain(), "textures/blocks/" + resource.getResourcePath());
|
|
BufferedImage origImage = ImageIO.read(resourceManager.getResource(origResource).getInputStream());
|
|
|
|
// draw half texture
|
|
BufferedImage result = new BufferedImage(origImage.getWidth(), origImage.getHeight() / 2, BufferedImage.TYPE_4BYTE_ABGR);
|
|
Graphics2D graphics = result.createGraphics();
|
|
graphics.drawImage(origImage, 0, bottom ? -origImage.getHeight() / 2 : 0, null);
|
|
|
|
// create PNG image
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
ImageIO.write(result, "PNG", baos);
|
|
data = baos.toByteArray();
|
|
} catch (Exception e) {
|
|
// stop log spam with GLSL installed
|
|
if (e instanceof FileNotFoundException) return;
|
|
BetterFoliage.log.info(String.format("Could not load texture: %s, exception: %s", resource.toString(), e.getClass().getSimpleName()));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public InputStream getInputStream() {
|
|
return data != null ? new ByteArrayInputStream(data) : fallbackResource.getInputStream();
|
|
}
|
|
|
|
@Override
|
|
public boolean hasMetadata() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public IMetadataSection getMetadata(String var1) {
|
|
return null;
|
|
}
|
|
|
|
}
|