Jump to content

Recommended Posts

Posted

Hey guys,

 

I'm trying to make a tile entity with a custom model. However, in-game I just get a standard block with "Missing Texture", and this spammed in the console:

 

2013-06-12 21:45:50 [sEVERE] [Minecraft-Client] ########## GL ERROR ##########
2013-06-12 21:45:50 [sEVERE] [Minecraft-Client] @ Post render
2013-06-12 21:45:50 [sEVERE] [Minecraft-Client] 1283: Stack overflow

 

 

Anyone got any ideas?

My TileEntitySpecialRenderer class:

http://pastebin.com/T48pVFus

 

Let me know if you need to see other classes.

 

I've fixed the above, but a new issue now. The block simply isn't rendering... just an empty bounding box!

 

My code (updated)

package co.uk.silvania.roads.tileentities;

import org.lwjgl.opengl.GL11;

import co.uk.silvania.roads.Roads;
import co.uk.silvania.roads.client.TrafficLightModel;

import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class TileEntityTrafficLightRenderer extends TileEntitySpecialRenderer {

TrafficLightModel model;

public TileEntityTrafficLightRenderer() {
	model = new TrafficLightModel();
}

@Override
public void renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f) {

	GL11.glPushMatrix();

	GL11.glTranslatef((float)d, (float)d1, (float)d2);
	TileEntity te = (TileEntityTrafficLightEntity)tileentity;

	renderBlock(te, tileentity.worldObj, tileentity.xCoord, tileentity.yCoord, tileentity.zCoord, Roads.trafficLight);
	GL11.glPopMatrix();
}

public void renderBlock(TileEntity te, World world, int i, int j, int k, Block block) {

	Tessellator tessellator = Tessellator.instance;

	float f = block.getBlockBrightness(world, i, j, k);
	int l = world.getLightBrightnessForSkyBlocks(i, j, k, 0);
	int l1 = l % 65536;
	int l2 = l / 65536;
	tessellator.setColorOpaque_F(f, f, f);
	OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)l1, (float)l2);

	int dir = world.getBlockMetadata(i, j, k);

	GL11.glPushMatrix();
	GL11.glTranslatef(0.5F, 0F, 0.5F);
	GL11.glRotatef(dir * (-90F), 0F, 1F, 0F);
	GL11.glTranslatef(-0.5F, 0F, -0.5F);
	bindTextureByName("/mods/roads/textures/blocks/TrafficLightPoleRed.png");
	GL11.glPopMatrix();
}


}

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

You....are not doing things the way I'm doing them, and it does not appear that your....renderer has any quads or a model to draw.

 

Here's mine:

 

package draco18s.traps.client;

import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;

public class SpikesRenderer extends TileEntitySpecialRenderer {
private SpikesModel spikes = new SpikesModel();

@Override
public void renderTileEntityAt(TileEntity tileentity, double d0, double d1, double d2, float f) {
	spikes.render(tileentity, d0, d1, d2);
}
}

 

SpikesModel

 

// Date: 6/9/2013 12:58:24 AM
// Template version 1.1
// Java generated by Techne
// Keep in mind that you still need to fill in some blanks
// - ZeuX

package draco18s.traps.client;

import org.lwjgl.opengl.GL11;

import cpw.mods.fml.client.FMLClientHandler;
import draco18s.traps.entities.EntitySpikes;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;

public class SpikesModel extends ModelBase
{
//fields
ModelRenderer Base;
ModelRenderer SpikeLower2;
ModelRenderer SpikeUpper2;
ModelRenderer SpikeLower4;
ModelRenderer SpikeUpper4;
ModelRenderer SpikeLower1;
ModelRenderer SpikeUpper1;
ModelRenderer SpikeLower3;
ModelRenderer SpikeUpper3;

public SpikesModel()
{
	textureWidth = 64;
	textureHeight = 32;

	Base = new ModelRenderer(this, 0, 0);
	Base.addBox(0F, 0F, 0F, 16, 1, 16);
	Base.setRotationPoint(-8F, 8F, -8F);
	Base.setTextureSize(64, 32);
	Base.mirror = true;
	setRotation(Base, 0F, 0F, 0F);
	/*SpikeLower2 = new ModelRenderer(this, 32, 17);
	SpikeLower2.addBox(-2F, 0F, -2F, 4, 5, 4);
	SpikeLower2.setRotationPoint(-4F, 14F, 4F);
	SpikeLower2.setTextureSize(64, 32);
	SpikeLower2.mirror = true;
	setRotation(SpikeLower2, 0F, 0F, 0F);
	SpikeUpper2 = new ModelRenderer(this, 24, 17);
	SpikeUpper2.addBox(-1F, 0F, -1F, 2, 8, 2);
	SpikeUpper2.setRotationPoint(-4F, 22F, 4F);
	SpikeUpper2.setTextureSize(64, 32);
	SpikeUpper2.mirror = true;
	setRotation(SpikeUpper2, 0F, 0F, 0F);*/
	SpikeLower4 = new ModelRenderer(this, 0, 17);
	SpikeLower4.addBox(0F, 0F, 0F, 4, 5, 4);
	SpikeLower4.setRotationPoint(2F, 14F, -2F);
	SpikeLower4.setTextureSize(64, 32);
	SpikeLower4.mirror = true;
	setRotation(SpikeLower4, 0F, 0F, 0F);
	SpikeUpper4 = new ModelRenderer(this, 16, 17);
	SpikeUpper4.addBox(0F, 0F, 0F, 2, 8, 2);
	SpikeUpper4.setRotationPoint(3F, 22F, -3F);
	SpikeUpper4.setTextureSize(64, 32);
	SpikeUpper4.mirror = true;
	setRotation(SpikeUpper4, 0F, 0F, 0F);
	SpikeLower1 = new ModelRenderer(this, 0, 17);
	SpikeLower1.addBox(-2F, 0F, -2F, 4, 5, 4);
	SpikeLower1.setRotationPoint(-4F, 14F, -4F);
	SpikeLower1.setTextureSize(64, 32);
	SpikeLower1.mirror = true;
	setRotation(SpikeLower1, 0F, 0F, 0F);
	SpikeUpper1 = new ModelRenderer(this, 16, 17);
	SpikeUpper1.addBox(-1F, 0F, -1F, 2, 8, 2);
	SpikeUpper1.setRotationPoint(-4F, 22F, -4F);
	SpikeUpper1.setTextureSize(64, 32);
	SpikeUpper1.mirror = true;
	setRotation(SpikeUpper1, 0F, 0F, 0F);
	SpikeLower3 = new ModelRenderer(this, 0, 17);
	SpikeLower3.addBox(-2F, 0F, -2F, 4, 5, 4);
	SpikeLower3.setRotationPoint(4F, 14F, 4F);
	SpikeLower3.setTextureSize(64, 32);
	SpikeLower3.mirror = true;
	setRotation(SpikeLower3, 0F, 0F, 0F);
	SpikeUpper3 = new ModelRenderer(this, 16, 17);
	SpikeUpper3.addBox(-1F, 0F, -1F, 2, 8, 2);
	SpikeUpper3.setRotationPoint(4F, 22F, 4F);
	SpikeUpper3.setTextureSize(64, 32);
	SpikeUpper3.mirror = true;
	setRotation(SpikeUpper3, 0F, 0F, 0F);
}

public void render(TileEntity te, double x, double y, double z) {
	EntitySpikes es = (EntitySpikes)te;
	setBlood(es.isBloody);
	GL11.glPushMatrix();
	GL11.glTranslatef((float)x + 0.5f, (float)y - 0.5f, (float)z + 0.5f);
	//GL11.glScalef(0.5f, 0.5f, 0.5f);
	FMLClientHandler.instance().getClient().renderEngine.bindTexture("/mods/Traps/textures/entities/spike.png");
	this.render();
    GL11.glPopMatrix();
}

private void render() {
	setRotation(SpikeLower1, 3.1415F, 0, 0);
	setRotation(SpikeLower2, 3.1415F, 0, 0);
	setRotation(SpikeLower3, 3.1415F, 0, 0);
	setRotation(SpikeLower4, 3.1415F, 0, 0);
	setRotation(SpikeUpper1, 3.1415F, 0, 0);
	setRotation(SpikeUpper2, 3.1415F, 0, 0);
	setRotation(SpikeUpper3, 3.1415F, 0, 0);
	setRotation(SpikeUpper4, 3.1415F, 0, 0);
	Base.render(0.0625F);
	SpikeLower1.render(0.0625F);
	SpikeLower2.render(0.0625F);
	SpikeLower3.render(0.0625F);
	SpikeLower4.render(0.0625F);
	SpikeUpper1.render(0.0625F);
	SpikeUpper2.render(0.0625F);
	SpikeUpper3.render(0.0625F);
	SpikeUpper4.render(0.0625F);
}

private void setRotation(ModelRenderer model, float x, float y, float z)
{
	model.rotateAngleX = x;
	model.rotateAngleY = y;
	model.rotateAngleZ = z;
}

public void setBlood(int t) {
	if(t == 2) {
		SpikeLower2 = new ModelRenderer(this, 0, 0);
		SpikeUpper2 = new ModelRenderer(this, 48, 0);
	}
	else if(t == 1) {
		SpikeLower2 = new ModelRenderer(this, 32, 17);
		SpikeUpper2 = new ModelRenderer(this, 24, 17);
	}
	else {
		SpikeLower2 = new ModelRenderer(this, 0, 17);
		SpikeUpper2 = new ModelRenderer(this, 16, 17);
	}
	SpikeLower2.addBox(-2F, 0F, -2F, 4, 5, 4);
	SpikeLower2.setRotationPoint(-4F, 14F, 4F);
	SpikeLower2.setTextureSize(64, 32);
	SpikeLower2.mirror = true;
	setRotation(SpikeLower2, 0F, 0F, 0F);
	SpikeUpper2.addBox(-1F, 0F, -1F, 2, 8, 2);
	SpikeUpper2.setRotationPoint(-4F, 22F, 4F);
	SpikeUpper2.setTextureSize(64, 32);
	SpikeUpper2.mirror = true;
	setRotation(SpikeUpper2, 0F, 0F, 0F);
}
}

 

 

Model was exported from Techne and minorly tweaked.*

 

*Imports and oddly, the model came in upside down and I had to figure out how to flip it back over.

 

 

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.

Posted

I've been getting some help on #MinecraftForgeTuts, and mine does import now but always with some sort of render bug.

 

It's usually upside down, but I've got it tweaked so it's been inside the player, moving around depending on the players position, or even inside-out. I can't get it to go the right way up, and stay there.

 

What did you do to fix it?

Here's my current code:

 

package co.uk.silvania.roads.tileentities;

import org.lwjgl.opengl.GL11;


import co.uk.silvania.roads.Roads;
import co.uk.silvania.roads.client.TrafficLightModel;

import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;


public class TileEntityTrafficLightRenderer extends TileEntitySpecialRenderer {

private final TrafficLightModel model;

public TileEntityTrafficLightRenderer() {
	this.model = new TrafficLightModel();
}

@Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float scale) {
	GL11.glPushMatrix();
	GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
	bindTextureByName("/mods/roads/textures/blocks/TrafficLightPoleRed.png");
	this.model.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
	GL11.glPopMatrix();
}

private void adjustRotatePivotViaMeta(World world, int x, int y, int z) {
	int meta = world.getBlockMetadata(x, y, z);
	GL11.glRotatef(meta * (90), 0.0F, 1.0F, 0.0F);
}

private void adjustLightFixture(World world, int i, int j, int k, Block block) {
	Tessellator tess = Tessellator.instance;
	float brightness = block.getBlockBrightness(world, i, j, k);
	int skyLight = world.getLightBrightnessForSkyBlocks(i, j, k, 0);
	int modulousModifier = skyLight % 65536;
	int divModifier = skyLight / 65536;
	tess.setColorOpaque_F(brightness, brightness, brightness);
	OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit,  (float) modulousModifier,  divModifier);
}
}

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

I went in and rotated each cube of my model in the model code and repositioned them by hand.  Not the easiest or most elegant way to do it, but it worked.

 

And if you think rendering it inside the player is weird, try this:

 

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.

Posted

That's certainly... interesting.

 

Anyways, figured it out now. Here's the working code:

 

package co.uk.silvania.roads.tileentities;

import org.lwjgl.opengl.GL11;


import co.uk.silvania.roads.Roads;
import co.uk.silvania.roads.client.TrafficLightModel;

import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;


public class TileEntityTrafficLightRenderer extends TileEntitySpecialRenderer {

private final TrafficLightModel model;

    private final boolean powered;

public TileEntityTrafficLightRenderer(boolean par2) {
	this.model = new TrafficLightModel();
    this.powered = par2;
}

@Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float scale) {
	GL11.glPushMatrix();
	GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
	if (this.powered) {
		bindTextureByName("/mods/roads/textures/blocks/TrafficLightPoleGreen.png");
	} else {
		bindTextureByName("/mods/roads/textures/blocks/TrafficLightPoleRed.png");			
	}
	GL11.glPushMatrix();
	GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); //This was the important bit. But you need the extra Push/Pop!
	this.model.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
	GL11.glPopMatrix();
	GL11.glPopMatrix();
}

private void adjustRotatePivotViaMeta(World world, int x, int y, int z) {
	int meta = world.getBlockMetadata(x, y, z);
	GL11.glPushMatrix();
	GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
	GL11.glPopMatrix();
}

private void adjustLightFixture(World world, int i, int j, int k, Block block) {
	Tessellator tess = Tessellator.instance;
	float brightness = block.getBlockBrightness(world, i, j, k);
	int skyLight = world.getLightBrightnessForSkyBlocks(i, j, k, 0);
	int modulousModifier = skyLight % 65536;
	int divModifier = skyLight / 65536;
	tess.setColorOpaque_F(brightness, brightness, brightness);
	OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit,  (float) modulousModifier,  divModifier);
}
}

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

Hello -

 

How did you get you model to start rendering?  Using the code on the wiki doesn't work, and I've tried many, many threads that I've discovered on the internet through searching (all to no avail).

Posted

I'm on my phone ATM sorry :P

If you go on google and search FlenixRoads one of the first results is my GitHub repo.

 

In there, you need to find my Tileentities package. Pick one of the block names (TileEntityTrafficLight is a good example) and copy the block, entity and renderer classes.

 

Then go to my client package and get TrafficLightModel (just for now). Also look in the client proxy and copy the one line for the traffic light.

 

After that just do registerblock as normal for TileEntityTrafficLightBlock. Test it and all should be working, so then you can edit it as required.

 

Ill write a wiki on it when I'm home :)

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Posted

Thanks.

 

I went and looked at your code.  I changed some of what I had to more closely match yours and I still just get an empty bounding box.  I even tried using your model and got nothing.

Posted

I GOT IT TO RENDER! :D (sorry for caps, very exciting!)

 

I just changed my block to extend BlockContainer instead of Block, and it works! :D

 

Thank you so much!

 

Please write the wiki page too, because I'm sure there are lots of people still trying to get this correct for the new versions.

Posted

That's a lot more important than you think it is ;)

 

I'll write the wiki when I've got a few hours free, so it'll be sunday or monday. It's one of those things that's really underdocumented (same as liquids which I wrote the 1.4.7 wiki page on... I should update that...)

 

As we've both got it working I'll lock this now. Anyone else who gets stuck can use my code as mentioned above, or PM me :)

width=463 height=200

http://s13.postimg.org/z9mlly2av/siglogo.png[/img]

My mods (Links coming soon)

Cities | Roads | Remula | SilvaniaMod | MoreStats

Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hi, this is my second post with the same content as no one answered this and it's been a long time since I made the last post, I want to make a client-only mod, everything is ok, but when I use shaders, none of the textures rendered in RenderLevelStageEvent nor the crow entity model are rendered, I want them to be visible, because it's a horror themed mod I've already tried it with different shaders, but it didn't work with any of them and I really want to add support for shaders Here is how i render the crow model in the CrowEntityRenderer<CrowEntity>, by the time i use this method, i know is not the right method but i don't think this is the cause of the problem, the renderType i'm using is entityCutout @Override public void render(CrowEntity p_entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { super.render(p_entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); ClientEventHandler.getClient().crow.renderToBuffer(poseStack, bufferSource.getBuffer(ClientEventHandler.getClient().crow .renderType(TEXTURE)), packedLight, OverlayTexture.NO_OVERLAY, Utils.rgb(255, 255, 255)); } Here renderLevelStage @Override public void renderWorld(RenderLevelStageEvent e) { horrorEvents.draw(e); } Here is how i render every event public void draw(RenderLevelStageEvent e) { for (HorrorEvent event : currentHorrorEvents) { event.tick(e.getPartialTick()); event.draw(e); } } Here is how i render the crow model on the event @Override public void draw(RenderLevelStageEvent e) { if(e.getStage() == RenderLevelStageEvent.Stage.AFTER_ENTITIES) { float arcProgress = getArcProgress(0.25f); int alpha = (int) Mth.lerp(arcProgress, 0, 255); int packedLight = LevelRenderer.getLightColor(Minecraft.getInstance().level, blockPos); VertexConsumer builder = ClientEventHandler.bufferSource.getBuffer(crow); Crow<CreepyBirdHorrorEvent> model = ClientEventHandler .getClient().crow; model.setupAnim(this); RenderHelper.renderModelInWorld(model, position, offset, e.getCamera(), e.getPoseStack(), builder, packedLight, OverlayTexture.NO_OVERLAY, alpha); builder = ClientEventHandler.bufferSource.getBuffer(eyes); RenderHelper.renderModelInWorld(model, position, offset, e.getCamera(), e.getPoseStack(), builder, 15728880, OverlayTexture.NO_OVERLAY, alpha); } } How i render the model public static void renderModelInWorld(Model model, Vector3f pos, Vector3f offset, Camera camera, PoseStack matrix, VertexConsumer builder, int light, int overlay, int alpha) { matrix.pushPose(); Vec3 cameraPos = camera.getPosition(); double finalX = pos.x - cameraPos.x + offset.x; double finalY = pos.y - cameraPos.y + offset.y; double finalZ = pos.z - cameraPos.z + offset.z; matrix.pushPose(); matrix.translate(finalX, finalY, finalZ); matrix.mulPose(Axis.XP.rotationDegrees(180f)); model.renderToBuffer(matrix, builder, light, overlay, Utils .rgba(255, 255, 255, alpha)); matrix.popPose(); matrix.popPose(); } Thanks in advance
    • Same issue - I have no idea
    • I am trying to develop a modpack for me and my friends to use on our server. Does anyone know how to develop a modpack for a server or could they help take a look at my modpack to potentially help at all?
    • un server de armas realista.  
    • removed both, nope https://pastebin.com/kgtwq9us
  • Topics

×
×
  • Create New...

Important Information

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