Admiral_Damage

Untitled

Mar 19th, 2016
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.33 KB | None | 0 0
  1. package eu.tetrabyte.contentmod.client.render;
  2.  
  3. import java.io.IOException;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6.  
  7. import org.lwjgl.opengl.GL11;
  8.  
  9. import com.google.common.collect.ImmutableMap;
  10.  
  11. import eu.tetrabyte.contentmod.util.shadesobjloader.OBJModel;
  12. import net.minecraft.client.Minecraft;
  13. import net.minecraft.client.renderer.Tessellator;
  14. import net.minecraft.client.renderer.WorldRenderer;
  15. import net.minecraft.client.renderer.block.model.BakedQuad;
  16. import net.minecraft.client.renderer.texture.TextureMap;
  17. import net.minecraft.client.renderer.vertex.VertexFormat;
  18. import net.minecraft.client.renderer.vertex.VertexFormatElement;
  19. import net.minecraft.client.resources.IReloadableResourceManager;
  20. import net.minecraft.client.resources.IResourceManager;
  21. import net.minecraft.client.resources.IResourceManagerReloadListener;
  22. import net.minecraft.crash.CrashReport;
  23. import net.minecraft.util.ReportedException;
  24. import net.minecraft.util.ResourceLocation;
  25. import net.minecraftforge.client.model.Attributes;
  26. import net.minecraftforge.client.model.IFlexibleBakedModel;
  27. import net.minecraftforge.client.model.IModel;
  28. import net.minecraftforge.client.model.ModelLoaderRegistry;
  29. import net.minecraftforge.client.model.pipeline.LightUtil;
  30.  
  31. public class RenderHelper {
  32.     static Map<String, IFlexibleBakedModel> loadedModels = new HashMap<>();
  33.  
  34.     // A vertex format with normals that doesn't break the OBJ loader.
  35.     // FIXME: Replace with DefaultvertexFormats.POSITION_TEX_COLOR_NORMAL when
  36.     // it works.
  37.     public static final VertexFormat CUSTOM_FORMAT;
  38.  
  39.     static {
  40.         CUSTOM_FORMAT = new VertexFormat();
  41.         CUSTOM_FORMAT.addElement(new VertexFormatElement(0, VertexFormatElement.EnumType.FLOAT,
  42.                 VertexFormatElement.EnumUsage.POSITION, 3));
  43.         CUSTOM_FORMAT.addElement(
  44.                 new VertexFormatElement(0, VertexFormatElement.EnumType.UBYTE, VertexFormatElement.EnumUsage.COLOR, 4));
  45.         CUSTOM_FORMAT.addElement(
  46.                 new VertexFormatElement(0, VertexFormatElement.EnumType.FLOAT, VertexFormatElement.EnumUsage.UV, 2));
  47.         CUSTOM_FORMAT.addElement(
  48.                 new VertexFormatElement(0, VertexFormatElement.EnumType.BYTE, VertexFormatElement.EnumUsage.NORMAL, 3));
  49.         CUSTOM_FORMAT.addElement(new VertexFormatElement(0, VertexFormatElement.EnumType.BYTE,
  50.                 VertexFormatElement.EnumUsage.PADDING, 1));
  51.     }
  52.  
  53.     public static void init() {
  54.         IResourceManager rm = Minecraft.getMinecraft().getResourceManager();
  55.         if (rm instanceof IReloadableResourceManager) {
  56.             ((IReloadableResourceManager) rm).registerReloadListener(new IResourceManagerReloadListener() {
  57.                 @Override
  58.                 public void onResourceManagerReload(IResourceManager __) {
  59.                     loadedModels.clear();
  60.                 }
  61.             });
  62.         }
  63.     }
  64.  
  65.     public static void renderModel(IFlexibleBakedModel model, int color) {
  66.         Tessellator tessellator = Tessellator.getInstance();
  67.         WorldRenderer worldrenderer = tessellator.getWorldRenderer();
  68.         worldrenderer.begin(GL11.GL_QUADS, Attributes.DEFAULT_BAKED_FORMAT);
  69.         for (BakedQuad bakedquad : model.getGeneralQuads()) {
  70.             LightUtil.renderQuadColor(worldrenderer, bakedquad, color);
  71.         }
  72.         tessellator.draw();
  73.     }
  74.  
  75.     public static void renderModel(IFlexibleBakedModel model) {
  76.         Tessellator tessellator = Tessellator.getInstance();
  77.         WorldRenderer worldrenderer = tessellator.getWorldRenderer();
  78.         worldrenderer.begin(GL11.GL_QUADS, model.getFormat());
  79.         for (BakedQuad bakedquad : model.getGeneralQuads()) {
  80.             worldrenderer.addVertexData(bakedquad.getVertexData());
  81.            
  82.            
  83.         }
  84.         tessellator.draw();
  85.     }
  86.  
  87.     public static IFlexibleBakedModel loadModel(String resourceName) {
  88.         IFlexibleBakedModel model = loadedModels.get(resourceName);
  89.         if (model != null)
  90.             return model;
  91.  
  92.         try {
  93.             TextureMap textures = Minecraft.getMinecraft().getTextureMapBlocks();
  94.             IModel mod = ModelLoaderRegistry.getModel(new ResourceLocation(resourceName));
  95.            
  96.             ImmutableMap.Builder<String, String> mapBuilder = ImmutableMap.builder();
  97.             mapBuilder.put("unitizeUVs", "true");
  98.             //mapBuilder.put("normalizeUVs", "true");
  99.  
  100.             mod = ((OBJModel) mod).process(mapBuilder.build());
  101.            
  102.            
  103.             model = mod.bake(mod.getDefaultState(), Attributes.DEFAULT_BAKED_FORMAT,
  104.                     (location) -> textures.getAtlasSprite(location.toString()));
  105.            
  106.             return model;
  107.         } catch (IOException e) {
  108.             throw new ReportedException(new CrashReport("Error loading custom model " + resourceName, e));
  109.         }
  110.     }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment