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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello there! I am trying to make custom dimensions for a modpack I am making in an older minecraft version, 1.16.5. I like that version and it has a few other mods that have not been updated that I would still like to use. Anyway, I am having a terrible time with getting my dimension to work and have tried using code from other peoples projects to at least figure out what I'm supposed to be doing but it has not been as helpful as I would have liked. If anyone could help that would be greatly appreciated! Here is my github with all the code as I am using it: https://github.com/BladeColdsteel/InvigoratedDimensionsMod I have also included the last log, https://pastebin.com/zX9vsDSq, I had when I tried to load up a world, let me know if there is anything else I should send though, thank you!
    • Whether you are a fan of Hypixel Bedwars, SkyWars and PvP gamemodes like that, well you would enjoy this server! We have a very fun and unique style of PvP that a lot of our players really enjoy and we want to bring this server to more players like you! Yes you reading this post haha. Introducing, the Minezone Network, home of SUPER CRAFT BLOCKS. We've been working on this server for over 4 years now. Here is what we have to offer: SUPER CRAFT BLOCKS: This has 3 different gamemodes you can play, Classic, Duels and Frenzy. Each mode offers over 60 kits to choose from, along with a total of over 60 maps, allowing for various different playstyles on each map. There are also random powerups that spawn on the map which can include Health Pots, Bazookas, Nukes, Extra Lives and way way more! There is also double jump in this gamemode as well, which makes PvP a lot more fun & unique. You only need a minimum of 2 players to start any mode! Classic: Choose a kit, 5 lives for each player, fight it out and claim the #1 spot! Look out for lightning as they can spawn powerups to really give you an advantage in the game! Duels: Fight against another random player or one of your friends and see who is the best! Frenzy: Your kit is randomly selected for you, each life you will have a different kit. You can fight with up to 100 players in this mode and lets see who will be the best out of that 100! All the other stuff from Classic/Duels apply to this mode as well like powerups. We have 2 ranks on this server too, VIP and CAPTAIN which has a bunch of different perks for SCB and other things like Cosmetics and more.   SERVER IP: If this server has caught your interest in any way, please consider joining and you will NOT regret it! Bring some of your friends online for an even better experience and join in on the fun at: IP: minezone.club Hope to see you online!   SERVER TRAILER: https://www.youtube.com/watch?v=0phpMgu1mH0
    • The mod give new blocks  
    • I will a Mode for 1.21 in this Mod give new block, items and dimensions   
  • Topics

×
×
  • Create New...

Important Information

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