package eiteam.esteemedinnovation.commons.util;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.VertexBuffer;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.crash.CrashReport;
import net.minecraft.util.ReportedException;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.*;
import net.minecraftforge.common.model.TRSRTransformation;
import org.lwjgl.opengl.GL11;
import java.util.HashMap;
public class RenderUtility {
/**
* 16,777,215 is the "white" default returned when the pass does not render a drill head.
*/
public static final int WHITE = 16_777_215;
/**
* Effectively the same thing as the old Tessellator#addVertexWithUV method.
* @param buffer The vertex buffer
* @param x X position
* @param y Y position
* @param z Z position
* @param u
* @param v
*/
public static void addVertexWithUV(VertexBuffer buffer, double x, double y, double z, double u, double v) {
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
buffer.pos(x, y, z);
buffer.tex(u, v);
buffer.endVertex();
}
public static void renderQuad(Tessellator tessellator, int par2, int par3, int par4, int par5, int par6) {
VertexBuffer buffer = tessellator.getBuffer();
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
buffer.putColor4(par6);
buffer.pos(par2, par3, 0D);
buffer.pos(par2, par3 + par5, 0D);
buffer.pos(par2 + par4, par3 + par5, 0D);
buffer.pos(par2 + par4, par3, 0D);
buffer.endVertex();
tessellator.draw();
}
private static HashMap<ResourceLocation, IBakedModel> bakedModels = new HashMap<>();
public static IBakedModel bakeModel(ResourceLocation loc) {
if (bakedModels.containsKey(loc)) {
return bakedModels.get(loc);
}
try {
IModel model = ModelLoaderRegistry.getModel(loc);
IBakedModel bakedModel = model.bake(TRSRTransformation.identity(), DefaultVertexFormats.BLOCK,
ModelLoader.defaultTextureGetter());
bakedModels.put(loc, bakedModel);
return bakedModel;
// Stupid vanilla, throwing generic exceptions
} catch (Exception e) {
throw new ReportedException(new CrashReport("Error loading custom model " + loc, e));
}
}
/**
* Renders a baked model from the resource location pointing to the model JSON.
* <b>Always draw after calling this method, otherwise the vertex will never finish building!</b>
* @param buffer The VertexBuffer
* @param modelLocation The model, do not include .json
*/
public static void renderModel(VertexBuffer buffer, ResourceLocation modelLocation) {
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM);
IBakedModel model = bakeModel(modelLocation);
for (BakedQuad quad : model.getQuads(null, null, 0)) {
buffer.addVertexData(quad.getVertexData());
}
}
}