Advertisement
Guest User

Renderer

a guest
Sep 8th, 2020
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.75 KB | None | 0 0
  1. package elementalalchemie.client.renderer.tileentitys;
  2.  
  3. import java.util.List;
  4. import java.util.Random;
  5.  
  6. import javax.annotation.Nullable;
  7.  
  8. import org.lwjgl.opengl.GL11;
  9.  
  10. import com.mojang.blaze3d.platform.GlStateManager;
  11.  
  12. import elementalalchemie.blocks.PrimitivKeitwFluidEvaporator;
  13. import elementalalchemie.client.ClientInit;
  14. import elementalalchemie.tileentitys.PrimitvKeitwFluidEvaporatorTileEntity;
  15. import net.minecraft.block.BlockState;
  16. import net.minecraft.client.Minecraft;
  17. import net.minecraft.client.renderer.BufferBuilder;
  18. import net.minecraft.client.renderer.RenderHelper;
  19. import net.minecraft.client.renderer.Tessellator;
  20. import net.minecraft.client.renderer.model.BakedQuad;
  21. import net.minecraft.client.renderer.model.IBakedModel;
  22. import net.minecraft.client.renderer.texture.AtlasTexture;
  23. import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
  24. import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
  25. import net.minecraft.state.properties.DoubleBlockHalf;
  26. import net.minecraft.util.Direction;
  27. import net.minecraft.util.math.BlockPos;
  28. import net.minecraft.world.IEnviromentBlockReader;
  29. import net.minecraftforge.client.model.ModelDataManager;
  30.  
  31. public class PrimitivEvaporatorRenderer extends TileEntityRenderer<PrimitvKeitwFluidEvaporatorTileEntity> {
  32.    
  33.     private static int[] sf = {GL11.GL_ZERO, GL11.GL_ONE,GL11.GL_SRC_COLOR,GL11.GL_ONE_MINUS_SRC_COLOR,GL11.GL_DST_COLOR,GL11.GL_ONE_MINUS_DST_COLOR,GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA,GL11.GL_DST_ALPHA,GL11.GL_ONE_MINUS_DST_ALPHA};
  34.    
  35.     private int c;
  36.     private int i1=0;
  37.     private int i2=0;
  38.    
  39.     @Override
  40.     public void render(PrimitvKeitwFluidEvaporatorTileEntity tileEntityIn, double x, double y, double z,
  41.             float partialTicks, int destroyStage) {
  42.  
  43.         if (getWorld().getBlockState(tileEntityIn.getPos())
  44.                 .get(PrimitivKeitwFluidEvaporator.HALF) == DoubleBlockHalf.LOWER)
  45.             return;
  46.  
  47.         IBakedModel model = Minecraft.getInstance().getModelManager().getModel(ClientInit.GASBLOCK_MODEL_LOCATION);
  48.  
  49.         bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE);
  50.  
  51.         GlStateManager.pushMatrix();
  52.        
  53.         GlStateManager.translated(x, y + 3.0 / 16.0, z + 1);
  54.  
  55.         GlStateManager.enableBlend();
  56.        
  57.         GlStateManager.depthMask(false);
  58.        
  59.         //GlStateManager.blendFunc(sf[i1],sf[i2]);
  60.         GlStateManager.blendFunc( GL11.GL_SRC_ALPHA, GL11.GL_ONE);
  61.        
  62.         //used to switch blend modes to see wich looks best
  63.         if(c>500) {
  64.            
  65.             System.out.println(i1+","+i2);
  66.            
  67.             c=0;
  68.             i2++;
  69.            
  70.             if(i2%sf.length==0)i1++;
  71.            
  72.             i1=i1%sf.length;
  73.             i2=i2%sf.length;
  74.            
  75.            
  76.         }else c++;
  77.        
  78.         //Not used due to the testing
  79.         float f = Math
  80.                 .max((float) tileEntityIn.getGasAmount() / (float) PrimitvKeitwFluidEvaporatorTileEntity.MAX_GAS_AMOUNT
  81.                         - 0.2f, 0);
  82.        
  83.         f=(int)(f/0.05f)*0.05f;
  84.        
  85.         //setupRenderItem();
  86.    
  87.         //Mostly copied this and following methods from BlockRendererDispatcher since I could not get the varying transperency working otherwise
  88.         renderModelBrightness(tileEntityIn,model, tileEntityIn.getWorld().getBlockState(tileEntityIn.getPos()),(float)c/500.0f);
  89.        
  90.    
  91.         GlStateManager.depthMask(true);
  92.        
  93.         GlStateManager.disableBlend();
  94.         GlStateManager.popMatrix();
  95.        
  96.     }
  97.  
  98.     public void renderModelBrightnessColor(PrimitvKeitwFluidEvaporatorTileEntity tile ,@Nullable BlockState state, IBakedModel modelIn, float red,
  99.             float green, float blue,float alpha) {
  100.         Random random = new Random();
  101.  
  102.         for (Direction direction : Direction.values()) {
  103.             random.setSeed(42L);
  104.             this.renderModelBrightnessColorQuads(tile, red, green, blue,
  105.                     modelIn.getQuads(state, direction, random, ModelDataManager.getModelData(getWorld(), tile.getPos())),alpha);
  106.         }
  107.         random.setSeed(42L);
  108.         this.renderModelBrightnessColorQuads(tile, red, green, blue,
  109.                 modelIn.getQuads(state, (Direction)null, random, ModelDataManager.getModelData(getWorld(), tile.getPos())),alpha);
  110.     }
  111.  
  112.     public void renderModelBrightness(PrimitvKeitwFluidEvaporatorTileEntity tile,IBakedModel model, BlockState state,float alpha) {
  113.  
  114.         GlStateManager.rotatef(90.0F, 0.0F, 1.0F, 0.0F);
  115.  
  116.         this.renderModelBrightnessColor(tile,state, model, 1, 1, 1,alpha);
  117.     }
  118.    
  119.     private void renderModelBrightnessColorQuads(PrimitvKeitwFluidEvaporatorTileEntity tile, float red, float green, float blue,
  120.             List<BakedQuad> listQuads,float alpha) {
  121.  
  122.         Tessellator tessellator = Tessellator.getInstance();
  123.         BufferBuilder bufferbuilder = tessellator.getBuffer();
  124.    
  125.         int j = this.getCombinedLightUpMax(getWorld(), tile.getPos());
  126.         int k = j >> 16 & '\uffff';
  127.         int l = j & '\uffff';
  128.        
  129.         for (int i = 0; i < listQuads.size(); ++i) {
  130.  
  131.             BakedQuad bakedquad = listQuads.get(i);
  132.             bufferbuilder.begin(7, DefaultVertexFormats.BLOCK);
  133.            
  134.             for (int z = 0; z < 4; z++)
  135.                 bufferbuilder
  136.                         .pos(Float.intBitsToFloat(bakedquad.getVertexData()[0 + 7 * z]),
  137.                                 Float.intBitsToFloat(bakedquad.getVertexData()[1 + 7 * z]),
  138.                                 Float.intBitsToFloat(bakedquad.getVertexData()[2 + 7 * z]))
  139.                         .color(red, blue, green, alpha)
  140.                         .tex((double) Float.intBitsToFloat(bakedquad.getVertexData()[4 + 7 * z]),
  141.                                 (double) Float.intBitsToFloat(bakedquad.getVertexData()[5 + 7 * z]))
  142.                         .lightmap(k, l).endVertex();
  143.  
  144.             tessellator.draw();
  145.         }
  146.     }
  147.    
  148.     private int getCombinedLightUpMax(IEnviromentBlockReader reader, BlockPos pos) {
  149.         int i = reader.getCombinedLight(pos, 0);
  150.         int j = reader.getCombinedLight(pos.up(), 0);
  151.         int k = i & 255;
  152.         int l = j & 255;
  153.         int i1 = i >> 16 & 255;
  154.         int j1 = j >> 16 & 255;
  155.         return (k > l ? k : l) | (i1 > j1 ? i1 : j1) << 16;
  156.     }
  157.    
  158.     private void setupRenderItem() {
  159.         RenderHelper.disableStandardItemLighting();
  160.  
  161.         if (Minecraft.isAmbientOcclusionEnabled())
  162.             GlStateManager.shadeModel(GL11.GL_SMOOTH);
  163.         else
  164.             GlStateManager.shadeModel(GL11.GL_FLAT);
  165.  
  166.     }
  167. }
  168.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement