Jump to content

Recommended Posts

Posted

Hello,

 

after a long time I've decided to try modding with Forge again because of the problems with bukkit etc.

 

My goal is to use an exported 3d model from Techne in Forge. So I've exported a simple 3d model (the cat with the fish on Techne Online, only for example) and created a mod which loads a custom model with the TESR. So it should be a tile entity for the first.

 

I've copied some code parts (sry for this :D) from some posts here and it seems to be working, I can place the "block" and I can hover over it.

width=800 height=450http://cloud.jonni.it/index.php/apps/files_sharing/ajax/publicpreview.php?x=1920&y=943&a=true&file=%252Fpicpublic2015-02-02_16.14.30.png&t=1e1f30392630e1337809615fddcf219f&scalingup=0[/img]

 

But the texture doesn't work, you can see it in the picture.

 

Here is my TileEntityExampleRenderer:

package com.example.examplemod;

import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper;
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.util.ResourceLocation;
import net.minecraft.world.World;

import org.lwjgl.opengl.GL11;

import cpw.mods.fml.relauncher.SideOnly;
import cpw.mods.fml.relauncher.Side;

@SideOnly(Side.CLIENT)
public class TileEntityExampleRenderer extends TileEntitySpecialRenderer
{
        //The model of your block
        private final ModelExample model;
        private final ResourceLocation textureLocation;
       
        public TileEntityExampleRenderer()
        {
                this.model = new ModelExample();
                this.textureLocation = new ResourceLocation("examplemod", "textures/entity/texture.png");
        }
       
        private void adjustRotatePivotViaMeta(World world, int x, int y, int z)
        {
                int meta = world.getBlockMetadata(x, y, z);
                GL11.glPushMatrix();
                GL11.glRotatef(meta * (-90), 0.0F, 0.0F, 1.0F);
                GL11.glPopMatrix();
        }
       
        @Override
        public void renderTileEntityAt(TileEntity te, double x, double y, double z, float scale)
        {
        //The PushMatrix tells the renderer to "start" doing something.
                GL11.glPushMatrix();
        //This is setting the initial location.
                GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
              
                this.bindTexture(this.textureLocation);
         //This rotation part is very important! Without it, your model will render upside-down! And for some reason you DO need PushMatrix again!                      
                GL11.glPushMatrix();
                GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
                
                    int rotation = 0;
                    switch (te.getBlockMetadata() % 4) {
                        case 0:
                            rotation = 270;
                            break;
                        case 1:
                            rotation = 0;
                            break;
                        case 2:
                            rotation = 90;
                            break;
                        case 3:
                            rotation = 180;
                            break;
                    }
                  GL11.glRotatef(rotation, 0.0F, 1.0F, 0.0F);
                    
                    
        //A reference to your Model file. Again, very important.
                this.model.render(null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
        //Tell it to stop rendering for both the PushMatrix's
                GL11.glPopMatrix();
                GL11.glPopMatrix();
        }

        //Set the lighting stuff, so it changes it's brightness properly.      
        private void adjustLightFixture(World world, int i, int j, int k, Block block)
        {
                Tessellator tess = Tessellator.instance;
                float brightness = block.getLightOpacity(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);
        }
        
}

 

And here is a picture from my class tree:

width=747 height=613http://cloud.jonni.it/index.php/apps/files_sharing/ajax/publicpreview.php?x=1920&y=943&a=true&file=%252FpicpublicUnbenannt%2520%283%29.PNG&t=a29658dc0b4d7304ea2fc5ab75977c9c&scalingup=0[/img]

 

I've tried a lot but I don't understand why it doesn't work.

Can you help me? Thanks in advance.

 

Regards,

Jonniboy

Where is the love? Can't see it...

Posted

Thank you for your answer. I know, the texture for the block in my inventory isn't set. But that is not the problem I mean because I know how to set the inventory icon.

The real problem is that I don't see something when I place it. Only the borders of the TileEntity appear, but the texture seems to be not loaded.

 

Sorry for this description, I haven't described it clearly enough.

Regards,

Jonniboy

Where is the love? Can't see it...

Posted

Oh. I know what the problem is. You have a GL_rotate after a GL_translate.

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

Do you mean you can see the outline of a block (cube) but not the actual model shape?  Or can you see the outline of the model shape but it's transparent?

 

If the first one - go to near x=0, z = 0 and  try placing your block way up in the sky.  It might be rendering in the wrong x,y,z location, and that will give you a chance to see where it is actually rendering.

 

That sheep is very distracting, by the way.

 

-TGG

Posted

Just to clarify stuff:

 

       

//The PushMatrix tells the renderer to "start" doing something.

No it doesn't. It "adds" a new Matrix layer (child) to the one you're currently rendering in (parent), meaning every transformation from the parent layer gets applied in your new child layer, but anything transformed inside your layer does not get applied to further rendering within the parent layer.

 

       

//[...]And for some reason you DO need PushMatrix again!

 

No you don't! You only do a PushMatrix again if you want another child layer inside your child layer. You can safely remove it.

 

       

//Tell it to stop rendering for both the PushMatrix's

It does not "stop rendering", it just closes your child layers, bringing you back to the parent layer.

If you've removed the 2nd PushMatrix, you need to remove one of the PopMatrix as well

 

 

By the way: Matrices only encapsulate transformations (rotation, translation, scaling), whereas other stuff like colorization, enabling blend mode etc. WILL apply to the parent layers as well!

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

First of all, thank you for the answers and the corrections.

 

By the way,

That sheep is very distracting' date=' by the way.[/quote']

yes, the sheep is very distracting. I've noticed the sheep at the time I've shot the screenshot, but I thought that you will ignore it because I've wrote what the model is about:

(the cat with the fish on Techne Online' date=' only for example)[/quote']

 

And at the second I can say that I'm not the author of these wrong comments, but there are where there are because I've copied this part. A tutorial on the wiki here (http://www.minecraftforge.net/wiki/Rendering_a_Techne_Model_as_a_Block) has the wrong comments too. A lot of other forum threads takes the part with the wrong comments too, but that's not so important.

 

Back to topic:

So it's clear that I mean that I mean the problem which is mentioned in the topic title. Sorry for the misunderstandings.

I can see the outline of a block which is a cube, but the problem is that the texture I've set is not loaded or cannot be displayed and a transparent one is there. So you can ignore the sheep. The model which should be displayed is this one: http://techne.zeux.me/1474b77d

 

Do you know a solution of the problem?

The recommended solution of Draco18s is not working or I don't know what he means exactly.

 

Thanks in advance.

Regards,

Jonniboy

Where is the love? Can't see it...

Posted

Sry for the bump, but do anyone have an answer for me?

I think for some high-skilled Forge modders and Java pro's my problem shouldn't be a problem.  ;)

 

Regards,

Jonniboy

Where is the love? Can't see it...

Posted

Hi.

 

Have you checked to see whether your     

  public void renderTileEntityAt(TileEntity te, double x, double y, double z, float scale)

is ever being called?  eg using breakpoint or System.out.println("renderTileEntityAt");

 

If not, the registration of your TileEntity and/or TileEntitySpecialRenderer is probably not right.

 

-TGG

Posted

TheGreyGhost is right. :) Show more code. Show the class where you registered your TESR, and maybe even your Tile Entity class, just for good measure.

 

I'm guessing you registered it in your ClientProxy, right? If so is that method inside that class called? I once had a problem with an entity becoming a tall white blob because I didn't invoke such a method, lol.

Posted

Okay, so I can see what you're doing wrong, but I'm not confident in my ability to explain it - bear with me.

 

I hate to post code, but I hope that in making it not 'copy-pastable', you will still need to learn and understand it. Where you have your first method and resource location, try using this:

 

private static final ResourceLocation textureLocation = new ResourceLocation([mainclass.modid + ":" + "textures/entity/yourtexture.png");

 

and then where you've said this.bindtexture... down the bottom, get ride of the object (this.). I think the problem you're having is that you might have been using an outdated thread? Anyway. See if this works. If it doesn't then restart following this:

 

(Part 1 - Model itself) and

(Part 2 - Coding it in)

 

P.S. Make sure the resource location variable is the same as your bind texture variable and that your texture file is inside the textures/entity path - entity being a folder.

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.