Jump to content

[1.7.10] Pipe Rendering Problem


Darki

Recommended Posts

I am making a pipe at the moment and there is a mistake that I can't find. I am working on the connections to other pipes. When I place 2 pipes and I look at one of the two pipes one of the pipes will be invisible and an virtual pipe is spawning in the air above me. Here the Code:

package me.darki.ChemMix.renderer;


import org.lwjgl.opengl.GL11;

import me.darki.ChemMix.ChemMix;
import me.darki.ChemMix.TileEntity.TileEntityCable;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.util.ForgeDirection;

public class TileEntityCableRenderer extends TileEntitySpecialRenderer{

ResourceLocation tex = new ResourceLocation("chemmix", "textures/models/cable.png");
static boolean drawInside = true;
static float pixel = 1F/16F;
static float texpixel = 1F/32F;

public void renderTileEntityAt(TileEntity t, double translationX, double translationY, double translationZ, float f) {
		GL11.glTranslated(translationX, translationY, translationZ);
		GL11.glDisable(GL11.GL_LIGHTING);
		this.bindTexture(tex);
		{
			drawCore(t);
			drawConnector(ForgeDirection.NORTH);
			drawConnector(ForgeDirection.EAST);
			drawConnector(ForgeDirection.WEST);
			drawConnector(ForgeDirection.SOUTH);
			drawConnector(ForgeDirection.UP);
			drawConnector(ForgeDirection.DOWN);

			/**TileEntityCable cab = (TileEntityCable) t;
			for(int i = 0; i < cab.connections.length; i++){
				if(cab.connections[i] != null){
					drawConnector(cab.connections[i]);
				}
			}**/
		}
		GL11.glEnable(GL11.GL_LIGHTING);
		GL11.glTranslated(-translationX, -translationY, -translationZ);
}

public static void drawConnector(ForgeDirection d){
	Tessellator tess = Tessellator.instance;
	tess.startDrawingQuads();
	{
		GL11.glTranslatef(0.5F, 0.5F, 0.5F);
		if(d.equals(ForgeDirection.UP)){

		}else if(d.equals(ForgeDirection.DOWN)){
			GL11.glRotatef(180, 1, 0, 0);
		}else if(d.equals(ForgeDirection.NORTH)){
			GL11.glRotatef(90, 1, 0, 0);
		}else if(d.equals(ForgeDirection.SOUTH)){
			GL11.glRotatef(270, 1, 0, 0);
		}else if(d.equals(ForgeDirection.WEST)){
			GL11.glRotatef(90, 0, 0, 1);
		}else if(d.equals(ForgeDirection.EAST)){
			GL11.glRotatef(270, 0, 0, 1);
		}
		GL11.glTranslatef(-0.5F, -0.5F, -0.5F);

		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1, 1-11*pixel/2, 10*texpixel, 5*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1, 1-11*pixel/2, 10*texpixel, 0*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 0*texpixel);

		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1, 11*pixel/2, 10*texpixel, 5*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1, 11*pixel/2, 10*texpixel, 0*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);

		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1, 11*pixel/2, 10*texpixel, 5*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1, 1-11*pixel/2, 10*texpixel, 0*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 0*texpixel);

		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1, 1-11*pixel/2, 10*texpixel, 5*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1, 11*pixel/2, 10*texpixel, 0*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);
	}
	tess.draw();

	GL11.glTranslatef(0.5F, 0.5F, 0.5F);
	if(d.equals(ForgeDirection.UP)){

	}else if(d.equals(ForgeDirection.DOWN)){
		GL11.glRotatef(-180, 1, 0, 0);
	}else if(d.equals(ForgeDirection.NORTH)){
		GL11.glRotatef(-90, 1, 0, 0);
	}else if(d.equals(ForgeDirection.SOUTH)){
		GL11.glRotatef(-270, 1, 0, 0);
	}else if(d.equals(ForgeDirection.WEST)){
		GL11.glRotatef(-90, 0, 0, 1);
	}else if(d.equals(ForgeDirection.EAST)){
		GL11.glRotatef(-270, 1, 0, 0);
	}
	GL11.glTranslatef(-0.5F, -0.5F, -0.5F);

}

public static void drawCore(TileEntity t){
	Tessellator tess = Tessellator.instance;
	tess.startDrawingQuads();
	{
		tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 0*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 0*texpixel, 0*texpixel);
		tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 1-11*pixel/2, 0*texpixel, 5*texpixel);

		tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 0*texpixel, 0*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 1-11*pixel/2, 0*texpixel, 5*texpixel);

		tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 11*pixel/2, 0*texpixel, 0*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 11*pixel/2, 0*texpixel, 5*texpixel);

		tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 0*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 11*pixel/2, 0*texpixel, 0*texpixel);
		tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 11*pixel/2, 0*texpixel, 5*texpixel);

		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 11*pixel/2, 0*texpixel, 0*texpixel);
		tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 0*texpixel, 5*texpixel);

		tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);
		tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 11*pixel/2, 0*texpixel, 0*texpixel);
		tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 1-11*pixel/2, 0*texpixel, 5*texpixel);

		if(drawInside){
			tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 1-11*pixel/2, 0*texpixel, 5*texpixel);
			tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 0*texpixel, 0*texpixel);
			tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 0*texpixel);
			tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);

			tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 1-11*pixel/2, 0*texpixel, 5*texpixel);
			tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 0*texpixel, 0*texpixel);
			tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);
			tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 11*pixel/2, 5*texpixel, 5*texpixel);

			tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 11*pixel/2, 0*texpixel, 5*texpixel);
			tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 11*pixel/2, 0*texpixel, 0*texpixel);
			tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);
			tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 11*pixel/2, 5*texpixel, 5*texpixel);

			tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 11*pixel/2, 0*texpixel, 5*texpixel);
			tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 11*pixel/2, 0*texpixel, 0*texpixel);
			tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 0*texpixel);
			tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);

			tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 0*texpixel, 5*texpixel);
			tess.addVertexWithUV(11*pixel/2, 1-11*pixel/2, 11*pixel/2, 0*texpixel, 0*texpixel);
			tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);
			tess.addVertexWithUV(1-11*pixel/2, 1-11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);

			tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 1-11*pixel/2, 0*texpixel, 5*texpixel);
			tess.addVertexWithUV(1-11*pixel/2, 11*pixel/2, 11*pixel/2, 0*texpixel, 0*texpixel);
			tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 11*pixel/2, 5*texpixel, 0*texpixel);
			tess.addVertexWithUV(11*pixel/2, 11*pixel/2, 1-11*pixel/2, 5*texpixel, 5*texpixel);
		}
	}
	tess.draw();

}

}

Link to comment
Share on other sites

Well, i did the same thing as you quite a while ago. Using tessellators for simple pipes is a pain in the ass. It took me a bit of my time and help from community to get it working. That may be because i dont know shit about rendering. Anyway, you can make simple pipes just by using blockbounds i think, but since you have done so much work already i will try to help. Can you please post a screenshot of what's happening?

 

EDIT: Show your Tile-Entity class aswell.

Link to comment
Share on other sites

First of all I find another mistake:

qi4g9lar.png

 

Second Problem what I write down first is this:

uadwaqdr.png

 

The Pipe that you can see in the right up corner isnt a real pipe this is the first problem. Second problem: Why connect the pipes so wrong?!

Here my TileEntityClass:

package me.darki.ChemMix.TileEntity;

import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;

public class TileEntityCable extends TileEntity{
/**
 * UP, DOWN, NORTH, EAST, SOUTH, WEST
 */

public ForgeDirection[] connections = new ForgeDirection[6];

public TileEntityCable(){

}

public void updateEntity(){

	this.updateConnections();
}

public void updateConnections(){
	if(this.worldObj.getTileEntity(xCoord, yCoord+1, zCoord) instanceof TileEntityCable) connections[0] = ForgeDirection.UP;
	else connections[0] = null;
	if(this.worldObj.getTileEntity(xCoord, yCoord-1, zCoord) instanceof TileEntityCable) connections[1] = ForgeDirection.DOWN;
	else connections[1] = null;
	if(this.worldObj.getTileEntity(xCoord, yCoord, zCoord-1) instanceof TileEntityCable) connections[2] = ForgeDirection.NORTH;
	else connections[2] = null;
	if(this.worldObj.getTileEntity(xCoord+1, yCoord, zCoord) instanceof TileEntityCable) connections[3] = ForgeDirection.EAST;
	else connections[3] = null;
	if(this.worldObj.getTileEntity(xCoord, yCoord, zCoord+1) instanceof TileEntityCable) connections[4] = ForgeDirection.SOUTH;
	else connections[4] = null;
	if(this.worldObj.getTileEntity(xCoord-1, yCoord, zCoord) instanceof TileEntityCable) connections[5] = ForgeDirection.WEST;
	else connections[5] = null;
}

}

Link to comment
Share on other sites

While I'm pretty sure all of those are correct, you know you can do things like:

 

this.worldObj.getTileEntity(xCoord+ForgeDirection.UP.offsetX, yCoord+ForgeDirection.UP.offsetY, zCoord+ForgeDirection.UP.offsetZ)

 

That said, it looks like you're incorrectly doing your NSEW connections when you render.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

I see that, when you are drawing the connections you are rotating it so it faces the other pipe. From the screenshots it seems that the connector is rotating wrongly.

 

This is when you are rotating the connector:

if(d.equals(ForgeDirection.UP)){
		}else if(d.equals(ForgeDirection.DOWN)){
			GL11.glRotatef(180, 1, 0, 0);
		}else if(d.equals(ForgeDirection.NORTH)){
			GL11.glRotatef(90, 1, 0, 0);
		}else if(d.equals(ForgeDirection.SOUTH)){
			GL11.glRotatef(270, 1, 0, 0);
		}else if(d.equals(ForgeDirection.WEST)){
			GL11.glRotatef(90, 0, 0, 1);
		}else if(d.equals(ForgeDirection.EAST)){
			GL11.glRotatef(270, 0, 0, 1);
		}

This is where you are rotating back to original position right?:

 

if(d.equals(ForgeDirection.UP)){

	}else if(d.equals(ForgeDirection.DOWN)){
		GL11.glRotatef(-180, 1, 0, 0);
	}else if(d.equals(ForgeDirection.NORTH)){
		GL11.glRotatef(-90, 1, 0, 0);
	}else if(d.equals(ForgeDirection.SOUTH)){
		GL11.glRotatef(-270, 1, 0, 0);
	}else if(d.equals(ForgeDirection.WEST)){
		GL11.glRotatef(-90, 0, 0, 1);
	}else if(d.equals(ForgeDirection.EAST)){
		GL11.glRotatef(-270, 1, 0, 0);
	} 

 

First of all, I think you switched North and South around, South should be 90,1,0,0 and North 270,1,0,0

Secondly when you are rotating back, At East instead of GL11.glRotatef(-270, 1, 0, 0); try GL11.glRotatef(-270, 0, 0, 1); Post back if anything changed.

Link to comment
Share on other sites

Change blockbounds of your pipe to make it have a hitbox. And i don't know why people think making your own energy system is hard. You will need some base tile entities classes to hold and save data about the energy which most likely is going to be an integer. Also build up some methods to transport your energy value from one tile entity to another. Yet this whole think would be useless if you dont have something to use this "energy" for. Having some "machines" to do work with energy is easy as well. It is just a custom furnace/crafting table which requires a certain amount of energy to be stored into the tile entity before it does anything.

Link to comment
Share on other sites

Do someone know how I can use the RedstoneFlux API?! Is there a Tutorial or a Wiki? How can I transfer Energy throw my Pipes? And How can I connect Machines with the pipes? And How I make e.g. a solarpanel to a provider and a machine to a receiver

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.