2018-09-13 12:03:28 -04:00
|
|
|
package noppes.npcs.client.renderer;
|
|
|
|
|
|
|
|
|
|
import java.awt.Graphics;
|
|
|
|
|
import java.awt.image.BufferedImage;
|
|
|
|
|
import java.awt.image.DataBufferInt;
|
2021-04-29 01:10:15 -04:00
|
|
|
import java.awt.image.ImageObserver;
|
2018-09-13 12:03:28 -04:00
|
|
|
|
|
|
|
|
import net.minecraft.client.renderer.ImageBufferDownload;
|
|
|
|
|
|
|
|
|
|
public class ImageBufferDownloadAlt extends ImageBufferDownload
|
|
|
|
|
{
|
|
|
|
|
private int imageData[];
|
|
|
|
|
private int imageWidth;
|
|
|
|
|
private int imageHeight;
|
2021-04-29 01:10:15 -04:00
|
|
|
private boolean NPC64;
|
|
|
|
|
|
|
|
|
|
public ImageBufferDownloadAlt(){
|
|
|
|
|
NPC64 = false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-29 05:21:54 -04:00
|
|
|
public ImageBufferDownloadAlt(boolean value){
|
|
|
|
|
NPC64 = value;
|
2021-04-29 01:10:15 -04:00
|
|
|
}
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public BufferedImage parseUserSkin(BufferedImage bufferedimage)
|
2021-04-29 01:10:15 -04:00
|
|
|
{
|
|
|
|
|
|
|
|
|
|
imageWidth = bufferedimage.getWidth(null);
|
|
|
|
|
|
|
|
|
|
if(NPC64){
|
|
|
|
|
imageHeight = bufferedimage.getHeight(null);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
imageHeight = imageWidth / 2;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
BufferedImage bufferedimage1 = new BufferedImage(imageWidth, imageHeight, 2);
|
|
|
|
|
Graphics g = bufferedimage1.getGraphics();
|
|
|
|
|
g.drawImage(bufferedimage, 0, 0, null);
|
|
|
|
|
g.dispose();
|
|
|
|
|
imageData = ((DataBufferInt)bufferedimage1.getRaster().getDataBuffer()).getData();
|
2021-04-29 01:10:15 -04:00
|
|
|
|
2021-04-29 06:37:35 -04:00
|
|
|
if(NPC64){
|
|
|
|
|
setAreaTransparent(imageWidth / 2, 0, imageWidth, imageHeight / 4);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
setAreaTransparent(imageWidth / 2, 0, imageWidth, imageHeight / 2);
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-29 01:10:15 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
return bufferedimage1;
|
|
|
|
|
}
|
2021-04-29 01:10:15 -04:00
|
|
|
|
2018-09-13 12:03:28 -04:00
|
|
|
/**
|
|
|
|
|
* 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 par1, int par2, int par3, int par4)
|
|
|
|
|
{
|
|
|
|
|
if (!this.hasTransparency(par1, par2, par3, par4))
|
|
|
|
|
{
|
|
|
|
|
for (int i1 = par1; i1 < par3; ++i1)
|
|
|
|
|
{
|
|
|
|
|
for (int j1 = par2; j1 < par4; ++j1)
|
|
|
|
|
{
|
|
|
|
|
this.imageData[i1 + j1 * this.imageWidth] &= 16777215;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns true if the given area of the image contains transparent pixels
|
|
|
|
|
*/
|
|
|
|
|
private boolean hasTransparency(int par1, int par2, int par3, int par4)
|
|
|
|
|
{
|
|
|
|
|
for (int i1 = par1; i1 < par3; ++i1)
|
|
|
|
|
{
|
|
|
|
|
for (int j1 = par2; j1 < par4; ++j1)
|
|
|
|
|
{
|
|
|
|
|
int k1 = this.imageData[i1 + j1 * this.imageWidth];
|
|
|
|
|
|
|
|
|
|
if ((k1 >> 24 & 255) < 128)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
// private boolean loadPlayerData(BufferedImage bufferedimage,EntityPlayer player) {
|
|
|
|
|
// if(player == null)
|
|
|
|
|
// return false;
|
|
|
|
|
// PlayerData data = RenderMorePlayer.getPlayerData(player);
|
|
|
|
|
// data.setPlayerModel(checkSkin(bufferedimage,player.username));
|
|
|
|
|
// data.isChanged = true;
|
|
|
|
|
// return data.model != null;
|
|
|
|
|
// }
|
|
|
|
|
// public static ModelData checkSkin(BufferedImage bufferedimage,String player){
|
|
|
|
|
// if(bufferedimage == null)
|
|
|
|
|
// return null;
|
|
|
|
|
//
|
|
|
|
|
// if (!new Color(bufferedimage.getRGB(0, 0), true).equals(new Color(128, 128, 128, 255))) {
|
|
|
|
|
// return null;
|
|
|
|
|
// }
|
|
|
|
|
// ModelData data = new ModelData();
|
|
|
|
|
// Color type = new Color(bufferedimage.getRGB(1, 0), true);
|
|
|
|
|
// if (type.equals(new Color(255, 0, 255, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.HUMANFEMALE;
|
|
|
|
|
// data.mainModel = new ModelHumanFemale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelHumanFemale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelHumanFemale(data,0.8f);
|
|
|
|
|
// data.scaleX = 0.9075f;
|
|
|
|
|
// data.scaleY = 0.9075f;
|
|
|
|
|
// data.scaleZ = 0.9075f;
|
|
|
|
|
// } else if (type.equals(new Color(128, 0, 0, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.DWARFMALE;
|
|
|
|
|
// data.mainModel = new ModelDwarfMale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelDwarfMale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelDwarfMale(data,0.8f);
|
|
|
|
|
// data.scaleX = 0.85f;
|
|
|
|
|
// data.scaleY = 0.6875f;
|
|
|
|
|
// data.scaleZ = 0.85f;
|
|
|
|
|
// } else if (type.equals(new Color(255, 0, 0, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.DWARFFEMALE;
|
|
|
|
|
// data.mainModel = new ModelDwarfFemale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelDwarfFemale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelDwarfFemale(data,0.8f);
|
|
|
|
|
// data.scaleX = 0.75f;
|
|
|
|
|
// data.scaleY = 0.6275f;
|
|
|
|
|
// data.scaleZ = 0.75f;
|
|
|
|
|
// } else if (type.equals(new Color(0, 128, 0, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.ORCMALE;
|
|
|
|
|
// data.mainModel = new ModelOrcMale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelOrcMale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelOrcMale(data,0.8f);
|
|
|
|
|
// data.scaleX = 1.2f;
|
|
|
|
|
// data.scaleY = 1f;
|
|
|
|
|
// data.scaleZ = 1.2f;
|
|
|
|
|
// } else if (type.equals(new Color(0, 255, 0, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.ORCFEMALE;
|
|
|
|
|
// data.mainModel = new ModelOrcFemale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelOrcFemale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelOrcFemale(data,0.8f);
|
|
|
|
|
// } else if (type.equals(new Color(0, 0, 128, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.FURRYMALE;
|
|
|
|
|
// data.mainModel = new ModelFurryMale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelFurryMale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelFurryMale(data,0.8f);
|
|
|
|
|
// } else if (type.equals(new Color(0, 0, 255, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.FURRYFEMALE;
|
|
|
|
|
// data.mainModel = new ModelFurryFemale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelFurryFemale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelFurryFemale(data,0.8f);
|
|
|
|
|
// data.scaleX = 0.9075f;
|
|
|
|
|
// data.scaleY = 0.9075f;
|
|
|
|
|
// data.scaleZ = 0.9075f;
|
|
|
|
|
// }else if (type.equals(new Color(255, 128, 0, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.MONSTERMALE;
|
|
|
|
|
// data.mainModel = new ModelMonsterMale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelMonsterMale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelMonsterMale(data,0.8f);
|
|
|
|
|
// } else if (type.equals(new Color(255, 255, 0, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.MONSTERFEMALE;
|
|
|
|
|
// data.mainModel = new ModelMonsterFemale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelMonsterFemale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelMonsterFemale(data,0.8f);
|
|
|
|
|
// data.scaleX = 0.9075f;
|
|
|
|
|
// data.scaleY = 0.9075f;
|
|
|
|
|
// data.scaleZ = 0.9075f;
|
|
|
|
|
// }else if (type.equals(new Color(0,255, 128, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.ELFMALE;
|
|
|
|
|
// data.mainModel = new ModelElfMale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelElfMale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelElfMale(data,0.8f);
|
|
|
|
|
// data.scaleX = 0.85f;
|
|
|
|
|
// data.scaleY = 1.07f;
|
|
|
|
|
// data.scaleZ = 0.85f;
|
|
|
|
|
// } else if (type.equals(new Color(0, 255, 255, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.ELFFEMALE;
|
|
|
|
|
// data.mainModel = new ModelElfFemale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelElfFemale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelElfFemale(data,0.8f);
|
|
|
|
|
// data.scaleX = 0.8f;
|
|
|
|
|
// data.scaleY = 1f;
|
|
|
|
|
// data.scaleZ = 0.8f;
|
|
|
|
|
// } else if (type.equals(new Color(32, 32, 32, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.ENDER;
|
|
|
|
|
// data.mainModel = new ModelEnderChibi(data,0);
|
|
|
|
|
// data.modelArmor = new ModelEnderChibi(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelEnderChibi(data,0.8f);
|
|
|
|
|
// }
|
|
|
|
|
// else if (type.equals(new Color(128, 255, 0, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.NAGAMALE;
|
|
|
|
|
// data.mainModel = new ModelNagaMale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelNagaMale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelNagaMale(data,0.8f);
|
|
|
|
|
// }
|
|
|
|
|
// else if (type.equals(new Color(128, 128, 0, 255))) {
|
|
|
|
|
// data.type = EnumPlayerModelType.NAGAFEMALE;
|
|
|
|
|
// data.mainModel = new ModelNagaFemale(data,0);
|
|
|
|
|
// data.modelArmor = new ModelNagaFemale(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelNagaFemale(data,0.8f);
|
|
|
|
|
// }
|
|
|
|
|
// else if(RenderMorePlayer.superUsers.contains(player)){
|
|
|
|
|
// if (type.equals(new Color(66, 66, 66, 255))){
|
|
|
|
|
// data.mainModel = new ModelCrystal(data,0);
|
|
|
|
|
// data.modelArmor = new ModelCrystal(data,0.3f);
|
|
|
|
|
// data.modelArmorChestplate = new ModelCrystal(data,0.8f);
|
|
|
|
|
// }
|
|
|
|
|
// else if (type.equals(new Color(13, 13, 13, 255))){
|
|
|
|
|
// data.mainModel = new ModelFail(data);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// Color sizeColor = new Color(bufferedimage.getRGB(2, 0), true);
|
|
|
|
|
// int size = 3;
|
|
|
|
|
// if (sizeColor.equals(new Color(255, 0, 0, 255)))
|
|
|
|
|
// size = 4;
|
|
|
|
|
// else if (sizeColor.equals(new Color(0, 255, 0, 255)))
|
|
|
|
|
// size = 2;
|
|
|
|
|
// else if (sizeColor.equals(new Color(0, 0, 255, 255)))
|
|
|
|
|
// size = 1;
|
|
|
|
|
// else if (sizeColor.equals(new Color(255, 0, 255, 255)))
|
|
|
|
|
// size = 0;
|
|
|
|
|
// data.size = size;
|
|
|
|
|
//
|
|
|
|
|
// Color headVissible = new Color(bufferedimage.getRGB(3, 0), true);
|
|
|
|
|
// if (headVissible.equals(new Color(255, 0, 0, 255)))
|
|
|
|
|
// data.showHelmet = false;
|
|
|
|
|
// else if (headVissible.equals(new Color(0, 255, 0, 255)))
|
|
|
|
|
// data.showHeadwear = false;
|
|
|
|
|
// else if (headVissible.equals(new Color(255, 255, 0, 255))){
|
|
|
|
|
// data.showHeadwear = false;
|
|
|
|
|
// data.showHelmet = false;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
// int extraOption1 = getValue(new Color(bufferedimage.getRGB(7, 0), true));
|
|
|
|
|
// data.mainModel.setExtraOption1(extraOption1);
|
|
|
|
|
// data.modelArmorChestplate.setExtraOption1(extraOption1);
|
|
|
|
|
// data.modelArmor.setExtraOption1(extraOption1);
|
|
|
|
|
//
|
|
|
|
|
// int extraOption2 = getValue(new Color(bufferedimage.getRGB(7, 1), true));
|
|
|
|
|
// data.mainModel.setExtraOption2(extraOption2);
|
|
|
|
|
// data.modelArmorChestplate.setExtraOption2(extraOption2);
|
|
|
|
|
// data.modelArmor.setExtraOption2(extraOption2);
|
|
|
|
|
//
|
|
|
|
|
// int extraOption3 = getValue(new Color(bufferedimage.getRGB(7, 2), true));
|
|
|
|
|
// data.mainModel.setExtraOption3(extraOption3);
|
|
|
|
|
// data.modelArmorChestplate.setExtraOption3(extraOption3);
|
|
|
|
|
// data.modelArmor.setExtraOption3(extraOption3);
|
|
|
|
|
//
|
|
|
|
|
// Color color = new Color(bufferedimage.getRGB(7, 3), true);
|
|
|
|
|
// data.mainModel.setExtraColor(color);
|
|
|
|
|
//
|
|
|
|
|
// Color claws = new Color(bufferedimage.getRGB(0, 1), true);
|
|
|
|
|
// if (claws.equals(new Color(255, 0, 0, 255)))
|
|
|
|
|
// ((ModelInterface)data.mainModel).addClaws();
|
|
|
|
|
//
|
|
|
|
|
// data.headSize = getValue(new Color(bufferedimage.getRGB(1, 1), true));
|
|
|
|
|
//
|
|
|
|
|
// data.bellySize = getValue(new Color(bufferedimage.getRGB(2, 1), true));
|
|
|
|
|
// return data;
|
|
|
|
|
// }
|
|
|
|
|
// private static int getValue(Color color){
|
|
|
|
|
// if (color.equals(new Color(255, 0, 0, 255)))
|
|
|
|
|
// return 1;
|
|
|
|
|
// else if (color.equals(new Color(0, 255, 0, 255)))
|
|
|
|
|
// return 2;
|
|
|
|
|
// else if (color.equals(new Color(0, 0, 255, 255)))
|
|
|
|
|
// return 3;
|
|
|
|
|
// else if (color.equals(new Color(255, 0, 255, 255)))
|
|
|
|
|
// return 4;
|
|
|
|
|
// return 0;
|
|
|
|
|
// }
|
|
|
|
|
}
|