Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package tiffit.hydrotech.client.render;
- import org.lwjgl.opengl.GL11;
- import net.minecraft.client.renderer.GlStateManager;
- import net.minecraft.client.renderer.RenderHelper;
- import net.minecraft.client.renderer.Tessellator;
- import net.minecraft.client.renderer.VertexBuffer;
- import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
- import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.util.ResourceLocation;
- import net.minecraft.util.math.BlockPos;
- import net.minecraft.world.World;
- import net.minecraftforge.fluids.IFluidHandler;
- import tiffit.hydrotech.generics.GenericFluidPipeTileEntity;
- public class FluidPipeRender<T extends GenericFluidPipeTileEntity> extends TileEntitySpecialRenderer<T> {
- private final ResourceLocation TEXTURE;
- private final double small = 4.0/16;
- private final double large = 12.0/16;
- public FluidPipeRender(String name) {
- TEXTURE = new ResourceLocation("hydrotech:textures/blocks/pipes/"+name+".png");
- }
- @Override
- public void renderTileEntityAt(GenericFluidPipeTileEntity te, double x, double y, double z, float ptick, int destroy) {
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer vb = tessellator.getBuffer();
- GlStateManager.pushMatrix();
- bindTexture(TEXTURE);
- vb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- GlStateManager.translate(x, y, z);
- GlStateManager.disableLighting();
- vb.pos(large, 0, 0).tex(0, 0).endVertex();
- vb.pos(large, 1, 0).tex(1, 0).endVertex();
- vb.pos(large, 1, 1).tex(1, 1).endVertex();
- vb.pos(large, 0, 1).tex(0, 1).endVertex();
- vb.pos(small, 0, 0).tex(0, 0).endVertex();
- vb.pos(small, 0, 1).tex(0, 1).endVertex();
- vb.pos(small, 1, 1).tex(1, 1).endVertex();
- vb.pos(small, 1, 0).tex(1, 0).endVertex();
- vb.pos(0, 0, small).tex(0, 0).endVertex();
- vb.pos(0, 1, small).tex(1, 0).endVertex();
- vb.pos(1, 1, small).tex(1, 1).endVertex();
- vb.pos(1, 0, small).tex(0, 1).endVertex();
- vb.pos(0, 0, large).tex(0, 0).endVertex();
- vb.pos(1, 0, large).tex(0, 1).endVertex();
- vb.pos(1, 1, large).tex(1, 1).endVertex();
- vb.pos(0, 1, large).tex(1, 0).endVertex();
- vb.pos(0, small, 0).tex(0, 0).endVertex();
- vb.pos(1, small, 0).tex(1, 0).endVertex();
- vb.pos(1, small, 1).tex(1, 1).endVertex();
- vb.pos(0, small, 1).tex(0, 1).endVertex();
- vb.pos(0, large, 0).tex(0, 0).endVertex();
- vb.pos(0, large, 1).tex(0, 1).endVertex();
- vb.pos(1, large, 1).tex(1, 1).endVertex();
- vb.pos(1, large, 0).tex(1, 0).endVertex();
- //Flip
- vb.pos(large, 0, 0).tex(0, 0).endVertex();
- vb.pos(large, 0, 1).tex(0, 1).endVertex();
- vb.pos(large, 1, 1).tex(1, 1).endVertex();
- vb.pos(large, 1, 0).tex(1, 0).endVertex();
- vb.pos(small, 0, 0).tex(0, 0).endVertex();
- vb.pos(small, 1, 0).tex(1, 0).endVertex();
- vb.pos(small, 1, 1).tex(1, 1).endVertex();
- vb.pos(small, 0, 1).tex(0, 1).endVertex();
- vb.pos(0, 0, small).tex(0, 0).endVertex();
- vb.pos(1, 0, small).tex(0, 1).endVertex();
- vb.pos(1, 1, small).tex(1, 1).endVertex();
- vb.pos(0, 1, small).tex(1, 0).endVertex();
- vb.pos(0, 0, large).tex(0, 0).endVertex();
- vb.pos(0, 1, large).tex(1, 0).endVertex();
- vb.pos(1, 1, large).tex(1, 1).endVertex();
- vb.pos(1, 0, large).tex(0, 1).endVertex();
- vb.pos(0, small, 0).tex(0, 0).endVertex();
- vb.pos(0, small, 1).tex(0, 1).endVertex();
- vb.pos(1, small, 1).tex(1, 1).endVertex();
- vb.pos(1, small, 0).tex(1, 0).endVertex();
- vb.pos(0, large, 0).tex(0, 0).endVertex();
- vb.pos(1, large, 0).tex(1, 0).endVertex();
- vb.pos(1, large, 1).tex(1, 1).endVertex();
- vb.pos(0, large, 1).tex(0, 1).endVertex();
- tessellator.draw();
- GlStateManager.translate(-x, -y, -z);
- GlStateManager.popMatrix();
- World w = te.getWorld();
- TileEntity zPos = w.getTileEntity(te.getPos().add(0, 0, 1));
- if(zPos != null && zPos instanceof IFluidHandler){
- renderConnection(x, y, z, 0, 0, 0, 0);
- }
- TileEntity zNeg = w.getTileEntity(te.getPos().add(0, 0, -1));
- if(zNeg != null && zNeg instanceof IFluidHandler){
- renderConnection(x, y, z, 180F, 0, 1.0F, 0);
- }
- TileEntity xPos = w.getTileEntity(te.getPos().add(1, 0, 0));
- if(xPos != null && xPos instanceof IFluidHandler){
- renderConnection(x, y, z, 90F, 0, 1.0F, 0);
- }
- TileEntity xNeg = w.getTileEntity(te.getPos().add(-1, 0, 0));
- if(xNeg != null && xNeg instanceof IFluidHandler){
- renderConnection(x, y, z, -90F, 0, 1.0F, 0);
- }
- TileEntity yPos = w.getTileEntity(te.getPos().add(0, 1, 0));
- if(yPos != null && yPos instanceof IFluidHandler){
- renderConnection(x, y, z, -90F, 1F, 0, 0);
- }
- TileEntity yNeg = w.getTileEntity(te.getPos().add(0, -1, 0));
- if(yNeg != null && yNeg instanceof IFluidHandler){
- renderConnection(x, y, z, 90F, 1F, 0, 0);
- }
- }
- private void renderConnection(double x, double y, double z, float angle, float rotX, float rotY, float rotZ){
- Tessellator tessellator = Tessellator.getInstance();
- VertexBuffer vb = tessellator.getBuffer();
- GlStateManager.pushMatrix();
- bindTexture(TEXTURE);
- vb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX);
- GlStateManager.disableLighting();
- GlStateManager.translate(x, y, z);
- GlStateManager.translate(.5, .5, .5);
- GlStateManager.rotate(angle, rotX, rotY, rotZ);
- GlStateManager.translate(-.5, -.5, -.5);
- double half = .5;
- double quarter = .25;
- double eigth = 1.0/8;
- //Sides
- vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(large, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(large, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(large, large - eigth, half + quarter).tex(2.0/8, 5.0/8).endVertex();
- vb.pos(large, large, half + quarter).tex(2.0/8, 6.0/8).endVertex();
- vb.pos(large, large, 1).tex(4.0/8, 6.0/8).endVertex();
- vb.pos(large, large - eigth, 1).tex(4.0/8, 5.0/8).endVertex();
- vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(large, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(large, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(large, large - eigth, half + quarter).tex(2.0/8, 5.0/8).endVertex();
- vb.pos(large, large - eigth, 1).tex(4.0/8, 5.0/8).endVertex();
- vb.pos(large, large, 1).tex(4.0/8, 6.0/8).endVertex();
- vb.pos(large, large, half + quarter).tex(2.0/8, 6.0/8).endVertex();
- vb.pos(small, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(small, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(small, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(small, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(small, large - eigth, half + quarter).tex(2.0/8, 5.0/8).endVertex();
- vb.pos(small, large - eigth, 1).tex(4.0/8, 5.0/8).endVertex();
- vb.pos(small, large, 1).tex(4.0/8, 6.0/8).endVertex();
- vb.pos(small, large, half + quarter).tex(2.0/8, 6.0/8).endVertex();
- vb.pos(small, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(small, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(small, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(small, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(small, large - eigth, half + quarter).tex(2.0/8, 5.0/8).endVertex();
- vb.pos(small, large, half + quarter).tex(2.0/8, 6.0/8).endVertex();
- vb.pos(small, large, 1).tex(4.0/8, 6.0/8).endVertex();
- vb.pos(small, large - eigth, 1).tex(4.0/8, 5.0/8).endVertex();
- //Tops
- vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(large, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(large, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(large - eigth, small, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(large - eigth, small, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(large - eigth, small, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(large - eigth, small, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(large, large, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(large - eigth, large, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(large - eigth, large, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(large, large, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(large, large, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(large, large, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(large - eigth, large, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(large - eigth, large, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(large, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(large, small + eigth, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(large, small + eigth, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(large, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(small, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(small + eigth, small, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(small + eigth, small, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(small, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(small, small, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(small, small, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(small + eigth, small, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(small + eigth, small, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(small, large, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(small + eigth, large, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- vb.pos(small + eigth, large, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(small, large, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(small, large, half + quarter).tex(2.0/8, 2.0/8).endVertex();
- vb.pos(small, large, 1).tex(4.0/8, 2.0/8).endVertex();
- vb.pos(small + eigth, large, 1).tex(4.0/8, 3.0/8).endVertex();
- vb.pos(small + eigth, large, half + quarter).tex(2.0/8, 3.0/8).endVertex();
- tessellator.draw();
- GlStateManager.translate(-x, -y, -z);
- GlStateManager.rotate(-angle, rotX, rotY, rotZ);
- GlStateManager.popMatrix();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement