Posted February 2, 201510 yr 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 ) from some posts here and it seems to be working, I can place the "block" and I can hover over it. http://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: http://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...
February 2, 201510 yr You need to give the block itself a texture with block.setTextureName("modid:texturename"). This will be the texture for it while it is in your inventory.
February 3, 201510 yr Author 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...
February 3, 201510 yr 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.
February 3, 201510 yr 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
February 3, 201510 yr 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.
February 6, 201510 yr Author 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...
February 8, 201510 yr Author 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...
February 10, 201510 yr 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
February 10, 201510 yr 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.
February 10, 201510 yr 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.