-
Posts
440 -
Joined
-
Last visited
Everything posted by Flenix
-
Yup, as far as I remember. This is my current code: package co.uk.silvania.roads.block.tess.renderers; import org.lwjgl.opengl.GL11; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ShortRampRenderer implements ISimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { } @Override @SideOnly(Side.CLIENT) public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { Tessellator tess = Tessellator.instance; GL11.glPushMatrix(); tess.addVertexWithUV(0, 1, 1, 0, 0); tess.addVertexWithUV(1, 1, 1, 0, 1); tess.addVertexWithUV(1, 1, 0, 1, 1); tess.addVertexWithUV(0, 1, 0, 1, 0); tess.addVertexWithUV(0, 0, 1, 0, 0); tess.addVertexWithUV(0, 1, 1, 0, 1); tess.addVertexWithUV(0, 1, 0, 1, 1); tess.addVertexWithUV(0, 0, 0, 1, 0); GL11.glPopMatrix(); return true; } @Override public boolean shouldRender3DInInventory() { return false; } @Override public int getRenderId() { return 0; } }
-
nope, nowhere to be seen. The two faces I've made should just be full sides- specifically the top and one of the sides, correct? I made a huge tower of them, and nothing:
-
Ok, I removed it. Nothing shows still, just an empty bounding box =/
-
So what's the verdict for translate? remove it? change to xyz? Also, I was under the impression that both of these are "quads". Is that correct?
-
Here's whats on the pastebins: [spoiler=Working two little blocks] package co.uk.silvania.roads.block.tess.renderers; import org.lwjgl.opengl.GL11; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ShortRampRenderer implements ISimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { } @Override @SideOnly(Side.CLIENT) public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { renderer.setRenderBounds(0.6, 0.4, 0.6, 0.8, 0.6, 0.; renderer.renderStandardBlock(block, x, y, z); renderer.setRenderBounds(0.2, 0.4, 0.2, 0.4, 0.6, 0.4); renderer.renderStandardBlock(block, x, y, z); return true; } @Override public boolean shouldRender3DInInventory() { return false; } @Override public int getRenderId() { return 0; } } [spoiler=Not working tessellator] ackage co.uk.silvania.roads.block.tess.renderers; import org.lwjgl.opengl.GL11; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ShortRampRenderer implements ISimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { } @Override @SideOnly(Side.CLIENT) public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { Tessellator tess = Tessellator.instance; GL11.glPushMatrix(); GL11.glTranslated(0, 1, 1); tess.addVertexWithUV(0, 1, 1, 0, 0); tess.addVertexWithUV(1, 1, 1, 0, 1); tess.addVertexWithUV(1, 1, 0, 1, 1); tess.addVertexWithUV(0, 1, 0, 1, 0); tess.addVertexWithUV(0, 0, 1, 0, 0); tess.addVertexWithUV(0, 1, 1, 0, 1); tess.addVertexWithUV(0, 1, 0, 1, 1); tess.addVertexWithUV(0, 0, 0, 1, 0); GL11.glPopMatrix(); return true; } @Override public boolean shouldRender3DInInventory() { return false; } @Override public int getRenderId() { return 0; } } Your post didn't make sense though. You said a quad is a combination of 4 vertices, then wrote 4 verticies, and said it's not a quad. Wut
-
been experimenting with different things, to check what is and isn't working. It's literally only the tessellator I can't get to work. This works, and makes two little floating blocks: http://pastebin.com/KnqHySpp This does not work: http://pastebin.com/uVxj6fpK Tiny blocks aren't enough! I need to be able to use individual quads, because I want non-square shapes. (where some sides are longer than others)
-
I assume by this you mean the newer, 12-year-old version of the word, not the original (internet-wise) version? Original: Using clever wit to back someone into a corner in an argument, or "fool" someone in a clever/intelligent way Newer 12-year-old version: herp derp anything i do is trolling trolololol
-
ok- so can anyone show me an example of a textured, single quad block using ISBRH? That's all I need to get going but I just can't get it working =/
-
Even when using your tessellator code, I still get the same issue. What did pelep and gotolink mean with the icon thing by the way? Maybe that's the issue I'm having. I'm starting to think what I'm trying to do isn't possible for a normal mod... I can't think of any other mods which do it either.
-
why ? TE are awesome, as long as you dont have 20 000 of them per chunk Honestly, thats exactly what I'm trying to achieve. My mod adds decorative things which people will literally have hundreds of in a single chunk. We tried doing some basic building and it was apparent very quickly that using Tile Entites it simply isn't gonna end well. So will the tessellator code there work in an ISBRH? As I said above, any blocks I don't need a TE for I'd really rather not use one.
-
Alright, I do still need to use the tessellator then. The main reason for this is that I want to avoid Tile Entites. Do you have a working class using the tessellator I can look at? Maybe I can figure out my issue by comparing them and seeing what is different? (Sorry for the late reply, I was out over the weekend)
-
I still get the same issue even when trying that. Do you have a TESR tutorial? I always thought that was just another name for the tessellator, but from what you're saying it's both different and might be better, especially as I'll be animating some of these blocks.
-
Hey guys, I'm looking to follow more modders on Twitter. I figured a cool way to do it is for everyone to post their mod twitters on here, and we all follow eachother so everyone gets a few extras Only rule is the twitter account needs to post at least a little bit about modding. A private account which you tweet about your mods on too is ok, but I imagine most of you (like me) have one dedicated to modding. So, I'll get the ball rolling: @SilvaniaStudios - Either follow me or post your handle here (or both) so we can all get a few extra followers I'll try and keep a list of everyone who posts in here too. I would put the handles of higher up people (eg Lex, cpw, Jeb, Notch...) too but not sure if that's allowed? If someone clarifies that I'll add them. List: @SilvaniaStudios
-
You can use .obj files, which can be made in Blender (which is free), or Autodesk Maya or 3DS Max (which are free for students but pricey otherwise). They are real models, none of that techne crap, you can make them as detailed as you like. But remember, more detail = more resources to load it. Alternatively you could use the tessellator, but I've not seen a model editor for that directly yet.
-
Yes. You would add something like this to the preInit: @EventHandler public void preInit(FMLPreInitializationEvent event) { RoadsConfig config = new RoadsConfig(); RoadsConfig.loadConfig(event); If you wanna see it in action, go to my github.
-
i'm currently cleaning up my code right now and i'm currently removing tile entities that i was too lazy to use isimpleblockrenakdjsfak for and i ran into that. i haven't really looked into block rendering too much until now, but what i've been able to figure out is: mc renders in bulk. it doesn't render per block per chunk. it goes through each block in the chunk and adds the vertices but doesn't render them. once it's done with each block, that's when it renders everything. and since they're rendered in bulk, when you change the texture being used, you change it for every block in the chunk. so you're either gonna have to use icons to include your textures in the terrain texture (can icons be larger than 16x16? still gonna test it out later) or do what hydroflame suggested (but you'll have to figure out a way around the problem).. or something else. i dunno. i vote icons if they work that's because it's already been called beforehand. and draw() is called after mc is done going through the blocks in the chunk. unless you want to do something else, all you really need to do is supply the vertices also, if you want it to render with the correct brightness, seems like you'll have to add it for each side yourself. depending on how you want that to work, it could go from a few lines of code to buttloads. basically, the more complicated your block is, the more tedious it gets. the plus side is that the code seems pretty straightforward and easy to read despite the amount of it anyway, like i said, i'm still digging through the rendering code. if i made a mistake, feel free to tell me hydroflame, do you know a fix for this? I got my texture to work but it plunges my world into darkness: before: after: Code: package co.uk.silvania.roads.block.tess.renderers; import org.lwjgl.opengl.GL11; import co.uk.silvania.roads.client.ClientProxy; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.util.Icon; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ShortRampRenderer implements ISimpleBlockRenderingHandler { public static final ResourceLocation texture = new ResourceLocation("roads", "textures/blocks/roadBlockMiscSingles0.png"); Tessellator tes = Tessellator.instance; //Whole renderInventoryBlock Method borrowed from another mod purely for testing purposes, so I can be sure my block is using this render class. //It will be removed and rewritten before compiling @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderblocks) { if(modelID == ClientProxy.RoadsRampShortRenderID) { for(int i = 1; i <= 21; ++i) { switch(i) { //top row case 1: renderblocks.setRenderBounds(0.15D, 0.0D, 0.15D, 0.25D, 1.0D, 0.25D); break; case 2: renderblocks.setRenderBounds(0.45D, 0.0D, 0.15D, 0.55D, 1.0D, 0.25D); break; case 3: renderblocks.setRenderBounds(0.75D, 0.0D, 0.15D, 0.85D, 1.0D, 0.25D); break; //middle row case 4: renderblocks.setRenderBounds(0.15D, 0.0D, 0.45D, 0.25D, 1.0D, 0.55D); break; case 5: renderblocks.setRenderBounds(0.45D, 0.0D, 0.45D, 0.55D, 1.0D, 0.55D); break; case 6: renderblocks.setRenderBounds(0.75D, 0.0D, 0.45D, 0.85D, 1.0D, 0.55D); break; } GL11.glTranslatef(-0.5F, -0.5F, -0.5F); float var7 = 0.0F; tes.startDrawingQuads(); tes.setNormal(0.0F, -1.0F, 0.0F); renderblocks.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(0)); tes.draw(); tes.startDrawingQuads(); tes.setNormal(0.0F, 1.0F, 0.0F); renderblocks.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(1)); tes.draw(); tes.startDrawingQuads(); tes.setNormal(0.0F, 0.0F, -1.0F); tes.addTranslation(0.0F, 0.0F, var7); renderblocks.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(2)); tes.addTranslation(0.0F, 0.0F, -var7); tes.draw(); tes.startDrawingQuads(); tes.setNormal(0.0F, 0.0F, 1.0F); tes.addTranslation(0.0F, 0.0F, -var7); renderblocks.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(3)); tes.addTranslation(0.0F, 0.0F, var7); tes.draw(); tes.startDrawingQuads(); tes.setNormal(-1.0F, 0.0F, 0.0F); tes.addTranslation(var7, 0.0F, 0.0F); renderblocks.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(4)); tes.addTranslation(-var7, 0.0F, 0.0F); tes.draw(); tes.startDrawingQuads(); tes.setNormal(1.0F, 0.0F, 0.0F); tes.addTranslation(-var7, 0.0F, 0.0F); renderblocks.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(5)); tes.addTranslation(var7, 0.0F, 0.0F); tes.draw(); GL11.glTranslatef(0.5F, 0.5F, 0.5F); } } } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { if(modelId == ClientProxy.RoadsRampShortRenderID) return RenderShortRamp(block, x, y, z, renderer); else return false; } public boolean shouldRender3DInInventory() { return true; } @Override public int getRenderId() { return 0; } public Icon getBlockIconFromSide(Block par1Block, int par2) { return this.getIconSafe(par1Block.getBlockTextureFromSide(par2)); } public Icon getIconSafe(Icon par1Icon) { if (par1Icon == null) { par1Icon = ((TextureMap)Minecraft.getMinecraft().func_110434_K().func_110581_b(TextureMap.field_110575_b)).func_110572_b("missingno"); } return (Icon)par1Icon; } @SideOnly(Side.CLIENT) public boolean RenderShortRamp(Block block, int x, int y, int z, RenderBlocks render) { Icon icon = this.getBlockIconFromSide(block, 0); if (render.hasOverrideBlockTexture()) { icon = render.overrideBlockTexture; } GL11.glPushMatrix(); Minecraft.getMinecraft().renderEngine.func_110577_a(texture); GL11.glPopMatrix(); tes.addVertexWithUV(0, 0, 0, 0, 0); tes.addVertexWithUV(0, 1, 0, 0, 1); tes.addVertexWithUV(1, 1, 0, 1, 1); tes.addVertexWithUV(1, 0, 0, 1, 0); tes.addVertexWithUV(0, 0, 0, 0, 0); tes.addVertexWithUV(1, 0, 0, 0, 1); tes.addVertexWithUV(1, 1, 0, 1, 1); tes.addVertexWithUV(0, 1, 0, 1, 0); return true; } } Did I do something wrong somewhere?
-
Alright, where do I register the texture exaclty? Do you have an example? When I tried using the ResourceLocation, very very strange things started happening... mostly involving chunks de-rendering
-
Oh I get it, so I can have startDrawingQuads, then say 12 vertex, then draw, without anything in the middle and the code will be clever and know thats 3 different quads? Cool Ah fair enough. I'll toy around with that. Also, with your tutorial - is it ok if I fix a few spelling mistakes etc? Just noticed a couple is all. Thanks, I'll look there if I get stuck
-
off-topic, but nice to see another Spouter has come here. I promise you'll enjoy it, everything is so much smoother here than it was in Spout.
-
I made that part, and no I don't have any idea how it works. Noone on IRC was able to help so I was literally stabbing in the dark, trial-and-error to see what I could do. I was basing off the little knowledge of quads I had. I figured that the 5 doubles were the x/y/z of the vertices, and then I assumed the x/y coords from the texture (You say it's actually tiling the texture though?) I also figured you'd need four vertices to make a quad, one for each corner. The draw and startDrawing were a guess as to a way to seperate one quad from the next. The reason I don't have them at the start or end is because that's handled in the borrowed code - if I put startDrawingQuads before everything, the game crashes. It's only that part I'm even having issues with. The in-hand rendering (the borrowed code) works: I hadn't seen any tutorial at all, been trying to find one all day. Can you link me to yours?
-
Hey guys, I want to get the hang of the Tessellator. One of the mods I'm working on is almost entirely modelled stuff, so if I can use the tessellator to model them without a tile entity, then that would be a huge bonus! However, I seem to be struggling on the texturing part. As far as I can tell my quads are ok (maybe not? Can't see them to check!) but I can't even get the purple/black missing texture to show. I've tried looking through RenderBlocks to no avail. here's the code. Can anyone point me in the right direction? package co.uk.silvania.roads.block.tess.renderers; import org.lwjgl.opengl.GL11; import co.uk.silvania.roads.client.ClientProxy; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.util.Icon; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ShortRampRenderer implements ISimpleBlockRenderingHandler { Tessellator tes = Tessellator.instance; //Whole renderInventoryBlock Method borrowed from another mod purely for testing purposes, so I can be sure my block is using this render class. //It will be removed and rewritten before compiling @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderblocks) { if(modelID == ClientProxy.RoadsRampShortRenderID) { for(int i = 1; i <= 21; ++i) { switch(i) { //top row case 1: renderblocks.setRenderBounds(0.15D, 0.0D, 0.15D, 0.25D, 1.0D, 0.25D); break; case 2: renderblocks.setRenderBounds(0.45D, 0.0D, 0.15D, 0.55D, 1.0D, 0.25D); break; case 3: renderblocks.setRenderBounds(0.75D, 0.0D, 0.15D, 0.85D, 1.0D, 0.25D); break; //middle row case 4: renderblocks.setRenderBounds(0.15D, 0.0D, 0.45D, 0.25D, 1.0D, 0.55D); break; case 5: renderblocks.setRenderBounds(0.45D, 0.0D, 0.45D, 0.55D, 1.0D, 0.55D); break; case 6: renderblocks.setRenderBounds(0.75D, 0.0D, 0.45D, 0.85D, 1.0D, 0.55D); break; } GL11.glTranslatef(-0.5F, -0.5F, -0.5F); float var7 = 0.0F; tes.startDrawingQuads(); tes.setNormal(0.0F, -1.0F, 0.0F); renderblocks.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(0)); tes.draw(); tes.startDrawingQuads(); tes.setNormal(0.0F, 1.0F, 0.0F); renderblocks.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(1)); tes.draw(); tes.startDrawingQuads(); tes.setNormal(0.0F, 0.0F, -1.0F); tes.addTranslation(0.0F, 0.0F, var7); renderblocks.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(2)); tes.addTranslation(0.0F, 0.0F, -var7); tes.draw(); tes.startDrawingQuads(); tes.setNormal(0.0F, 0.0F, 1.0F); tes.addTranslation(0.0F, 0.0F, -var7); renderblocks.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(3)); tes.addTranslation(0.0F, 0.0F, var7); tes.draw(); tes.startDrawingQuads(); tes.setNormal(-1.0F, 0.0F, 0.0F); tes.addTranslation(var7, 0.0F, 0.0F); renderblocks.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(4)); tes.addTranslation(-var7, 0.0F, 0.0F); tes.draw(); tes.startDrawingQuads(); tes.setNormal(1.0F, 0.0F, 0.0F); tes.addTranslation(-var7, 0.0F, 0.0F); renderblocks.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, block.getBlockTextureFromSide(5)); tes.addTranslation(var7, 0.0F, 0.0F); tes.draw(); GL11.glTranslatef(0.5F, 0.5F, 0.5F); } } } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { if(modelId == ClientProxy.RoadsRampShortRenderID) return RenderShortRamp(block, x, y, z, renderer); else return false; } public boolean shouldRender3DInInventory() { return true; } @Override public int getRenderId() { return 0; } public Icon getBlockIconFromSide(Block par1Block, int par2) { return this.getIconSafe(par1Block.getBlockTextureFromSide(par2)); } public Icon getIconSafe(Icon par1Icon) { if (par1Icon == null) { par1Icon = ((TextureMap)Minecraft.getMinecraft().func_110434_K().func_110581_b(TextureMap.field_110575_b)).func_110572_b("missingno"); } return (Icon)par1Icon; } @SideOnly(Side.CLIENT) public boolean RenderShortRamp(Block block, int x, int y, int z, RenderBlocks render) { Icon icon = this.getBlockIconFromSide(block, 0); if (render.hasOverrideBlockTexture()) { icon = render.overrideBlockTexture; } tes.addVertexWithUV(0.0, 1.0, 1.0, 12, 24); tes.addVertexWithUV(1.0, 1.0, 1.0, 12, 24); tes.addVertexWithUV(1.0, 1.0, 0.0, 12, 24); tes.addVertexWithUV(0.0, 1.0, 0.0, 12, 24); tes.draw(); tes.startDrawingQuads(); tes.addVertexWithUV(0.0, 0.0, 1.0, 12, 24); tes.addVertexWithUV(0.0, 1.0, 1.0, 12, 24); tes.addVertexWithUV(0.0, 1.0, 0.0, 12, 24); tes.addVertexWithUV(0.0, 0.0, 0.0, 12, 24); return true; } } From my understanding of quads, the above should theoretically draw two full faces of a standard block. I've only ever touched quads in a simple block modeller used for a spout plugin though, never actually coded with them. Once I understand this, I want to take the above modeller and modify it, so anyone else who wants to use the tessellator can make their actual models in there and just import the code. As this thread is 4 posts long, I'll save you all SOME time if you're trying to learn from it. Below is my current ISBRH, fully working. It's up to you to figure out the implementation. The model in this example is a simple slope, similar to that Slopes mod from a while ago. I thought it was a good, simple model to use for the example throughout this post, but remember with the ISBRH and tessellator you can make things much more complex than in Techne. package co.uk.silvania.roads.block.tess.renderers; import org.lwjgl.opengl.GL11; import co.uk.silvania.roads.client.ClientProxy; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.Icon; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ShortRampRenderer implements ISimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { } @Override @SideOnly(Side.CLIENT) public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { int meta = world.getBlockMetadata(x, y, z); Icon c = block.getIcon(0, meta); Icon b = block.getIcon(1, meta); int brightness = Block.blocksList[block.stone.blockID].getMixedBrightnessForBlock(world, x, y, z); float u = c.getMinU(); float v = c.getMinV(); float U = c.getMaxU(); float V = c.getMaxV(); float u1 = b.getMinU(); float v1 = b.getMinV(); float U1 = b.getMaxU(); float V1 = b.getMaxV(); Tessellator tess = Tessellator.instance; tess.addTranslation(x, y, z); tess.setBrightness(brightness); tess.setColorOpaque_F(1.0F, 1.0F, 1.0F); //Base tess.addVertexWithUV(0, -0.25, 1, u, v); tess.addVertexWithUV(0, -0.25, 0, u, V); tess.addVertexWithUV(1, -0.25, 0, U, V); tess.addVertexWithUV(1, -0.25, 1, U, v); //Top Slope tess.addVertexWithUV(0, -0.25, 1, u1, v1); tess.addVertexWithUV(1, 0.75, 1, u1, V1); tess.addVertexWithUV(1, 0.75, 0, U1, V1); tess.addVertexWithUV(0, -0.25, 0, U1, v1); tess.addVertexWithUV(1, -0.25, 0, u, v); tess.addVertexWithUV(1, 0.75, 0, u, V); tess.addVertexWithUV(1, 0.75, 1, U, V); tess.addVertexWithUV(1, -0.25, 1, U, v); tess.addVertexWithUV(1, 0.75, 0, u, v); tess.addVertexWithUV(1, -0.25, 0, u, V); tess.addVertexWithUV(0, -0.25, 0, U, V); tess.addVertexWithUV(1, 0.75, 0, U, v); tess.addVertexWithUV(1, 0.75, 1, u, v); tess.addVertexWithUV(0, -0.25, 1, u, V); tess.addVertexWithUV(1, -0.25, 1, U, V); tess.addVertexWithUV(1, 0.75, 1, U, v); tess.addTranslation(-x, -y, -z); return true; } @Override public boolean shouldRender3DInInventory() { return false; } @Override public int getRenderId() { return ClientProxy.RoadsRampShortRenderID; } }
-
hydroflame - any chance I can see that example? I've been trying to do this for a while too. I wouldn't know where to start with the tessellator
-
Hey guys, I've got a GUI in my mod. When I test in eclipse, all is well - but when I compile, the GUI texture wont load, I just get a purple/black background with all my slots on. I've checked, the path is correct and capitalization all matches. I'm getting this issue in three different mods, only affecting GUIs and only once compiled. So, there must be something wrong with my actual code Here's the code. Any ideas? package co.uk.silvania.roads.tileentities; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.util.ResourceLocation; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import org.lwjgl.opengl.GL11; import co.uk.silvania.roads.tileentities.entities.TileEntityRoadPainterEntity; public class GuiRoadPainter extends GuiContainer { public GuiRoadPainter (InventoryPlayer inventoryPlayer, World world, int x, int y, int z) { super(new ContainerRoadPainter(inventoryPlayer, world, x, y, z)); } protected int xSize = 176; protected int ySize = 204; @Override protected void drawGuiContainerForegroundLayer(int param1, int param2) { fontRenderer.drawString("Road Painter", 8, -12, 4210752); fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 113, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().renderEngine.func_110577_a(new ResourceLocation("roads", "/textures/gui/roadpaintergui.png")); int x = (width - xSize) / 2; int y = (height - ySize) / 2; this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); } }
-
I have a block which can pass redstone horizontally but it doesn't work if there is more than one of the block touching. Any use to you? I'm away from my PC right now so can't get to it, but if you find "FlenixRoads" on GitHub it's the "PowerPoleMed" or something along those lines. I was experimenting so only the medium size worked- small and large don't.