95 lines
3.1 KiB
Java

package net.optifine.model;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.IBakedModel;
import net.minecraft.client.resources.model.SimpleBakedModel;
import net.minecraft.util.EnumFacing;
public class ModelUtils {
public static void dbgModel(IBakedModel model) {
if (model != null) {
// Config.dbg("Model: " + model + ", ao: " + model.isAmbientOcclusion() + ",
// gui3d: " + model.isGui3d() + ", builtIn: " + model.isBuiltInRenderer() + ",
// particle: " + model.getParticleTexture());
EnumFacing[] aenumfacing = EnumFacing._VALUES;
for (int i = 0; i < aenumfacing.length; ++i) {
EnumFacing enumfacing = aenumfacing[i];
List list = model.getFaceQuads(enumfacing);
dbgQuads(enumfacing.getName(), list, " ");
}
List list1 = model.getGeneralQuads();
dbgQuads("General", list1, " ");
}
}
private static void dbgQuads(String name, List quads, String prefix) {
for (Object bakedquad0 : quads) {
BakedQuad bakedQuad = (BakedQuad) bakedquad0;
dbgQuad(name, bakedQuad, prefix);
}
}
public static void dbgQuad(String name, BakedQuad quad, String prefix) {
// Config.dbg(prefix + "Quad: " + quad.getClass().getName() + ", type: " + name
// + ", face: " + quad.getFace() + ", tint: " + quad.getTintIndex() + ", sprite:
// " + quad.getSprite());
dbgVertexData(quad.getVertexData(), " " + prefix);
}
public static void dbgVertexData(int[] vd, String prefix) {
int i = vd.length / 4;
// Config.dbg(prefix + "Length: " + vd.length + ", step: " + i);
for (int j = 0; j < 4; ++j) {
int k = j * i;
float f = Float.intBitsToFloat(vd[k + 0]);
float f1 = Float.intBitsToFloat(vd[k + 1]);
float f2 = Float.intBitsToFloat(vd[k + 2]);
int l = vd[k + 3];
float f3 = Float.intBitsToFloat(vd[k + 4]);
float f4 = Float.intBitsToFloat(vd[k + 5]);
// Config.dbg(prefix + j + " xyz: " + f + "," + f1 + "," + f2 + " col: " + l + "
// u,v: " + f3 + "," + f4);
}
}
public static IBakedModel duplicateModel(IBakedModel model) {
List list = duplicateQuadList(model.getGeneralQuads());
EnumFacing[] aenumfacing = EnumFacing._VALUES;
List list1 = new ArrayList();
for (int i = 0; i < aenumfacing.length; ++i) {
EnumFacing enumfacing = aenumfacing[i];
List list2 = model.getFaceQuads(enumfacing);
List list3 = duplicateQuadList(list2);
list1.add(list3);
}
SimpleBakedModel simplebakedmodel = new SimpleBakedModel(list, list1, model.isAmbientOcclusion(),
model.isGui3d(), model.getParticleTexture(), model.getItemCameraTransforms());
return simplebakedmodel;
}
public static List duplicateQuadList(List lists) {
List list = new ArrayList();
for (Object e : lists) {
BakedQuad bakedquad = (BakedQuad) e;
BakedQuad bakedquad1 = duplicateQuad(bakedquad);
list.add(bakedquad1);
}
return list;
}
public static BakedQuad duplicateQuad(BakedQuad quad) {
BakedQuad bakedquad = new BakedQuad((int[]) quad.getVertexData().clone(),
(int[]) quad.getVertexDataWithNormals().clone(), quad.getTintIndex(), quad.getFace(), quad.getSprite());
return bakedquad;
}
}