You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.0 KiB
Java
95 lines
3.0 KiB
Java
package net.minecraft.client.renderer;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import java.awt.Graphics;
|
|
import java.awt.image.BufferedImage;
|
|
import java.awt.image.DataBufferInt;
|
|
import java.awt.image.ImageObserver;
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public class ImageBufferDownload implements IImageBuffer
|
|
{
|
|
private int[] imageData;
|
|
private int imageWidth;
|
|
private int imageHeight;
|
|
private static final String __OBFID = "CL_00000956";
|
|
|
|
public BufferedImage parseUserSkin(BufferedImage p_78432_1_)
|
|
{
|
|
if (p_78432_1_ == null)
|
|
{
|
|
return null;
|
|
}
|
|
else
|
|
{
|
|
this.imageWidth = 64;
|
|
this.imageHeight = 32;
|
|
BufferedImage bufferedimage1 = new BufferedImage(this.imageWidth, this.imageHeight, 2);
|
|
Graphics graphics = bufferedimage1.getGraphics();
|
|
graphics.drawImage(p_78432_1_, 0, 0, (ImageObserver)null);
|
|
graphics.dispose();
|
|
this.imageData = ((DataBufferInt)bufferedimage1.getRaster().getDataBuffer()).getData();
|
|
this.setAreaOpaque(0, 0, 32, 16);
|
|
this.setAreaTransparent(32, 0, 64, 32);
|
|
this.setAreaOpaque(0, 16, 64, 32);
|
|
return bufferedimage1;
|
|
}
|
|
}
|
|
|
|
public void func_152634_a() {}
|
|
|
|
/**
|
|
* Makes the given area of the image transparent if it was previously completely opaque (used to remove the outer
|
|
* layer of a skin around the head if it was saved all opaque; this would be redundant so it's assumed that the skin
|
|
* maker is just using an image editor without an alpha channel)
|
|
*/
|
|
private void setAreaTransparent(int p_78434_1_, int p_78434_2_, int p_78434_3_, int p_78434_4_)
|
|
{
|
|
if (!this.hasTransparency(p_78434_1_, p_78434_2_, p_78434_3_, p_78434_4_))
|
|
{
|
|
for (int i1 = p_78434_1_; i1 < p_78434_3_; ++i1)
|
|
{
|
|
for (int j1 = p_78434_2_; j1 < p_78434_4_; ++j1)
|
|
{
|
|
this.imageData[i1 + j1 * this.imageWidth] &= 16777215;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Makes the given area of the image opaque
|
|
*/
|
|
private void setAreaOpaque(int p_78433_1_, int p_78433_2_, int p_78433_3_, int p_78433_4_)
|
|
{
|
|
for (int i1 = p_78433_1_; i1 < p_78433_3_; ++i1)
|
|
{
|
|
for (int j1 = p_78433_2_; j1 < p_78433_4_; ++j1)
|
|
{
|
|
this.imageData[i1 + j1 * this.imageWidth] |= -16777216;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns true if the given area of the image contains transparent pixels
|
|
*/
|
|
private boolean hasTransparency(int p_78435_1_, int p_78435_2_, int p_78435_3_, int p_78435_4_)
|
|
{
|
|
for (int i1 = p_78435_1_; i1 < p_78435_3_; ++i1)
|
|
{
|
|
for (int j1 = p_78435_2_; j1 < p_78435_4_; ++j1)
|
|
{
|
|
int k1 = this.imageData[i1 + j1 * this.imageWidth];
|
|
|
|
if ((k1 >> 24 & 255) < 128)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
} |