Advertisement
Guest User

Untitled

a guest
Dec 9th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.47 KB | None | 0 0
  1. package tiffit.hydrotech.client.render;
  2.  
  3. import org.lwjgl.opengl.GL11;
  4.  
  5. import net.minecraft.client.renderer.GlStateManager;
  6. import net.minecraft.client.renderer.RenderHelper;
  7. import net.minecraft.client.renderer.Tessellator;
  8. import net.minecraft.client.renderer.VertexBuffer;
  9. import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
  10. import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
  11. import net.minecraft.tileentity.TileEntity;
  12. import net.minecraft.util.ResourceLocation;
  13. import net.minecraft.util.math.BlockPos;
  14. import net.minecraft.world.World;
  15. import net.minecraftforge.fluids.IFluidHandler;
  16. import tiffit.hydrotech.generics.GenericFluidPipeTileEntity;
  17.  
  18. public class FluidPipeRender<T extends GenericFluidPipeTileEntity> extends TileEntitySpecialRenderer<T> {
  19.  
  20.     private final ResourceLocation TEXTURE;
  21.    
  22.     private final double small = 4.0/16;
  23.     private final double large = 12.0/16;
  24.    
  25.     public FluidPipeRender(String name) {
  26.         TEXTURE = new ResourceLocation("hydrotech:textures/blocks/pipes/"+name+".png");
  27.     }
  28.    
  29.     @Override
  30.     public void renderTileEntityAt(GenericFluidPipeTileEntity te, double x, double y, double z, float ptick, int destroy) {
  31.         Tessellator tessellator = Tessellator.getInstance();
  32.         VertexBuffer vb = tessellator.getBuffer();
  33.         GlStateManager.pushMatrix();
  34.         bindTexture(TEXTURE);
  35.         vb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
  36.         GlStateManager.translate(x, y, z);
  37.         GlStateManager.disableLighting();
  38.         vb.pos(large, 0, 0).tex(0, 0).endVertex();
  39.         vb.pos(large, 1, 0).tex(1, 0).endVertex();
  40.         vb.pos(large, 1, 1).tex(1, 1).endVertex();
  41.         vb.pos(large, 0, 1).tex(0, 1).endVertex();
  42.        
  43.         vb.pos(small, 0, 0).tex(0, 0).endVertex();
  44.         vb.pos(small, 0, 1).tex(0, 1).endVertex();
  45.         vb.pos(small, 1, 1).tex(1, 1).endVertex();
  46.         vb.pos(small, 1, 0).tex(1, 0).endVertex();
  47.        
  48.         vb.pos(0, 0, small).tex(0, 0).endVertex();
  49.         vb.pos(0, 1, small).tex(1, 0).endVertex();
  50.         vb.pos(1, 1, small).tex(1, 1).endVertex();
  51.         vb.pos(1, 0, small).tex(0, 1).endVertex();
  52.        
  53.         vb.pos(0, 0, large).tex(0, 0).endVertex();
  54.         vb.pos(1, 0, large).tex(0, 1).endVertex();
  55.         vb.pos(1, 1, large).tex(1, 1).endVertex();
  56.         vb.pos(0, 1, large).tex(1, 0).endVertex();
  57.        
  58.         vb.pos(0, small, 0).tex(0, 0).endVertex();
  59.         vb.pos(1, small, 0).tex(1, 0).endVertex();
  60.         vb.pos(1, small, 1).tex(1, 1).endVertex();
  61.         vb.pos(0, small, 1).tex(0, 1).endVertex();
  62.        
  63.         vb.pos(0, large, 0).tex(0, 0).endVertex();
  64.         vb.pos(0, large, 1).tex(0, 1).endVertex();
  65.         vb.pos(1, large, 1).tex(1, 1).endVertex();
  66.         vb.pos(1, large, 0).tex(1, 0).endVertex();
  67.        
  68.         //Flip
  69.         vb.pos(large, 0, 0).tex(0, 0).endVertex();
  70.         vb.pos(large, 0, 1).tex(0, 1).endVertex();
  71.         vb.pos(large, 1, 1).tex(1, 1).endVertex();
  72.         vb.pos(large, 1, 0).tex(1, 0).endVertex();
  73.        
  74.         vb.pos(small, 0, 0).tex(0, 0).endVertex();
  75.         vb.pos(small, 1, 0).tex(1, 0).endVertex();
  76.         vb.pos(small, 1, 1).tex(1, 1).endVertex();
  77.         vb.pos(small, 0, 1).tex(0, 1).endVertex();
  78.        
  79.         vb.pos(0, 0, small).tex(0, 0).endVertex();
  80.         vb.pos(1, 0, small).tex(0, 1).endVertex();
  81.         vb.pos(1, 1, small).tex(1, 1).endVertex();
  82.         vb.pos(0, 1, small).tex(1, 0).endVertex();
  83.        
  84.         vb.pos(0, 0, large).tex(0, 0).endVertex();
  85.         vb.pos(0, 1, large).tex(1, 0).endVertex();
  86.         vb.pos(1, 1, large).tex(1, 1).endVertex();
  87.         vb.pos(1, 0, large).tex(0, 1).endVertex();
  88.        
  89.         vb.pos(0, small, 0).tex(0, 0).endVertex();
  90.         vb.pos(0, small, 1).tex(0, 1).endVertex();
  91.         vb.pos(1, small, 1).tex(1, 1).endVertex();
  92.         vb.pos(1, small, 0).tex(1, 0).endVertex();
  93.        
  94.         vb.pos(0, large, 0).tex(0, 0).endVertex();
  95.         vb.pos(1, large, 0).tex(1, 0).endVertex();
  96.         vb.pos(1, large, 1).tex(1, 1).endVertex();
  97.         vb.pos(0, large, 1).tex(0, 1).endVertex();
  98.         tessellator.draw();
  99.         GlStateManager.translate(-x, -y, -z);
  100.         GlStateManager.popMatrix();
  101.         World w = te.getWorld();
  102.         TileEntity zPos = w.getTileEntity(te.getPos().add(0, 0, 1));
  103.         if(zPos != null && zPos instanceof IFluidHandler){
  104.             renderConnection(x, y, z, 0, 0, 0, 0);
  105.         }
  106.         TileEntity zNeg = w.getTileEntity(te.getPos().add(0, 0, -1));
  107.         if(zNeg != null && zNeg instanceof IFluidHandler){
  108.             renderConnection(x, y, z, 180F, 0, 1.0F, 0);
  109.         }
  110.         TileEntity xPos = w.getTileEntity(te.getPos().add(1, 0, 0));
  111.         if(xPos != null && xPos instanceof IFluidHandler){
  112.             renderConnection(x, y, z, 90F, 0, 1.0F, 0);
  113.         }
  114.         TileEntity xNeg = w.getTileEntity(te.getPos().add(-1, 0, 0));
  115.         if(xNeg != null && xNeg instanceof IFluidHandler){
  116.             renderConnection(x, y, z, -90F, 0, 1.0F, 0);
  117.         }
  118.         TileEntity yPos = w.getTileEntity(te.getPos().add(0, 1, 0));
  119.         if(yPos != null && yPos instanceof IFluidHandler){
  120.             renderConnection(x, y, z, -90F, 1F, 0, 0);
  121.         }
  122.         TileEntity yNeg = w.getTileEntity(te.getPos().add(0, -1, 0));
  123.         if(yNeg != null && yNeg instanceof IFluidHandler){
  124.             renderConnection(x, y, z, 90F, 1F, 0, 0);
  125.         }
  126.     }
  127.    
  128.     private void renderConnection(double x, double y, double z, float angle, float rotX, float rotY, float rotZ){
  129.         Tessellator tessellator = Tessellator.getInstance();
  130.         VertexBuffer vb = tessellator.getBuffer();
  131.         GlStateManager.pushMatrix();
  132.         bindTexture(TEXTURE);
  133.         vb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
  134.         GlStateManager.disableLighting();
  135.         GlStateManager.translate(x, y, z);
  136.         GlStateManager.translate(.5, .5, .5);
  137.         GlStateManager.rotate(angle, rotX, rotY, rotZ);
  138.         GlStateManager.translate(-.5, -.5, -.5);
  139.         double half = .5;
  140.         double quarter = .25;
  141.         double eigth = 1.0/8;
  142.         //Sides
  143.         vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  144.         vb.pos(large, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  145.         vb.pos(large, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
  146.         vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
  147.        
  148.         vb.pos(large, large - eigth, half + quarter).tex(2.0/8, 5.0/8).endVertex();
  149.         vb.pos(large, large, half + quarter).tex(2.0/8, 6.0/8).endVertex();
  150.         vb.pos(large, large, 1).tex(4.0/8, 6.0/8).endVertex();
  151.         vb.pos(large, large - eigth, 1).tex(4.0/8, 5.0/8).endVertex();
  152.        
  153.         vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  154.         vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
  155.         vb.pos(large, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
  156.         vb.pos(large, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  157.        
  158.         vb.pos(large, large - eigth, half + quarter).tex(2.0/8, 5.0/8).endVertex();
  159.         vb.pos(large, large - eigth, 1).tex(4.0/8, 5.0/8).endVertex();
  160.         vb.pos(large, large, 1).tex(4.0/8, 6.0/8).endVertex();
  161.         vb.pos(large, large, half + quarter).tex(2.0/8, 6.0/8).endVertex();
  162.        
  163.         vb.pos(small, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  164.         vb.pos(small, small, 1).tex(4.0/8, 2.0/8).endVertex();
  165.         vb.pos(small, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
  166.         vb.pos(small, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  167.        
  168.         vb.pos(small, large - eigth, half + quarter).tex(2.0/8, 5.0/8).endVertex();
  169.         vb.pos(small, large - eigth, 1).tex(4.0/8, 5.0/8).endVertex();
  170.         vb.pos(small, large, 1).tex(4.0/8, 6.0/8).endVertex();
  171.         vb.pos(small, large, half + quarter).tex(2.0/8, 6.0/8).endVertex();
  172.        
  173.         vb.pos(small, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  174.         vb.pos(small, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  175.         vb.pos(small, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
  176.         vb.pos(small, small, 1).tex(4.0/8, 2.0/8).endVertex();
  177.        
  178.         vb.pos(small, large - eigth, half + quarter).tex(2.0/8, 5.0/8).endVertex();
  179.         vb.pos(small, large, half + quarter).tex(2.0/8, 6.0/8).endVertex();
  180.         vb.pos(small, large, 1).tex(4.0/8, 6.0/8).endVertex();
  181.         vb.pos(small, large - eigth, 1).tex(4.0/8, 5.0/8).endVertex();
  182.        
  183.         //Tops
  184.         vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  185.         vb.pos(large, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  186.         vb.pos(large, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
  187.         vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
  188.        
  189.         vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  190.         vb.pos(large - eigth, small, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  191.         vb.pos(large - eigth, small, 1).tex(4.0/8, 3.0/8).endVertex();
  192.         vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
  193.        
  194.         vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  195.         vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
  196.         vb.pos(large - eigth, small, 1).tex(4.0/8, 3.0/8).endVertex();
  197.         vb.pos(large - eigth, small, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  198.        
  199.         vb.pos(large, large, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  200.         vb.pos(large - eigth, large, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  201.         vb.pos(large - eigth, large, 1).tex(4.0/8, 3.0/8).endVertex();
  202.         vb.pos(large, large, 1).tex(4.0/8, 2.0/8).endVertex();
  203.        
  204.         vb.pos(large, large, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  205.         vb.pos(large, large, 1).tex(4.0/8, 2.0/8).endVertex();
  206.         vb.pos(large - eigth, large, 1).tex(4.0/8, 3.0/8).endVertex();
  207.         vb.pos(large - eigth, large, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  208.        
  209.         vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  210.         vb.pos(large, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  211.         vb.pos(large, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
  212.         vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
  213.        
  214.        
  215.         vb.pos(small, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  216.         vb.pos(small + eigth, small, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  217.         vb.pos(small + eigth, small, 1).tex(4.0/8, 3.0/8).endVertex();
  218.         vb.pos(small, small, 1).tex(4.0/8, 2.0/8).endVertex();
  219.        
  220.         vb.pos(small, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  221.         vb.pos(small, small, 1).tex(4.0/8, 2.0/8).endVertex();
  222.         vb.pos(small + eigth, small, 1).tex(4.0/8, 3.0/8).endVertex();
  223.         vb.pos(small + eigth, small, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  224.        
  225.         vb.pos(small, large, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  226.         vb.pos(small + eigth, large, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  227.         vb.pos(small + eigth, large, 1).tex(4.0/8, 3.0/8).endVertex();
  228.         vb.pos(small, large, 1).tex(4.0/8, 2.0/8).endVertex();
  229.        
  230.         vb.pos(small, large, half + quarter).tex(2.0/8, 2.0/8).endVertex();
  231.         vb.pos(small, large, 1).tex(4.0/8, 2.0/8).endVertex();
  232.         vb.pos(small + eigth, large, 1).tex(4.0/8, 3.0/8).endVertex();
  233.         vb.pos(small + eigth, large, half + quarter).tex(2.0/8, 3.0/8).endVertex();
  234.        
  235.         tessellator.draw();
  236.         GlStateManager.translate(-x, -y, -z);
  237.         GlStateManager.rotate(-angle, rotX, rotY, rotZ);
  238.         GlStateManager.popMatrix();
  239.     }
  240.    
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement