Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

Hey, I made a block with a transparent texture on the sides, but it looks ugly because it doesn't draw the textures on the inner sides :

 

width=761 height=517TeFde20.png?1 [/img]

 

(I overrode the isOpaqueCube function to return false so it renders block that are next to mine)

Is there a way I can render a texture inside the block ?

  • Author

I just tried, it doesn't work

 

@Override
public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) {
return true;
}

 

 

I'm guessing it's because the textures are drawn on planes, which only have one side rendered

Hi

 

I think you can achieve this by rendering your block in pass 1, which turns off back-face culling  - Block.getRenderBlockPass() or Block.canRenderInPass().  It also turns on alpha blending but if you set your alpha to 1 it won't look any different.

 

-TGG

  • Author

Thanks everyone, I tried to use a custom renderer with a tessellator, couldn't really get how I was supposed to do it, so I tried TGG's solution, and added this to my block's class

@Override
public int getRenderBlockPass() {
return 1;
}

@Override
public boolean canRenderInPass(int pass) {
return (pass == 1)? true : false;
}

 

But I don't think I'm doing this right, and it didn't change anything

 

Hmm that should have worked.  Perhaps I'm wrong, I last tested it in 1.6.4 I think.

 

Instead, you could use an ISimpleBlockRenderingHandler and use GL11.glDisable(GL11.GL_CULL_FACE), then call the vanilla block rendering method, then change CULL_FACE back again.

 

http://greyminecraftcoder.blogspot.com.au/2013/07/rendering-non-standard-blocks.html

and

http://greyminecraftcoder.blogspot.com.au/2013/07/block-rendering.html

 

-TGG

 

  • Author

Hey, thanks for the link ! I was curious and looked at your blog, found this very interesting post on the Tessellator. It explains everything I need, I'll try again using the Tesselator because it's really interesting and I might need it later on. Thanks a lot !

  • Author

Alright, spent a lot of time on this thing, but it was worth it !

JBY9piJ.png

Had some problems too with the render in inventory, thanks again TGG found a solution of yours on another topic. My block looks really nice now

Code for my renderer, not really commented but you can find anything you need on TGG's blog

 

package com.niverton.concretemod.client;

import org.lwjgl.opengl.GL11;

import com.niverton.concretemod.blocks.BlockScaffold;

import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;

public class RendererScaffoldBlock implements ISimpleBlockRenderingHandler {
public static int renderID;

public RendererScaffoldBlock() {
	renderID = RenderingRegistry.getNextAvailableRenderId();
}

@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
	GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
	Tessellator tessellator = Tessellator.instance;

	//Get icons from custom register (useful for renderers and fluids)
	IIcon side = ConcreteModClientProxy.getIcon(BlockScaffold.name.toLowerCase() + "_side");
	IIcon top = ConcreteModClientProxy.getIcon(BlockScaffold.name.toLowerCase() + "_top");

	tessellator.startDrawingQuads();
                tessellator.setNormal(0.0F, -1.0F, 0.0F);
                renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, top);
                tessellator.draw();
                tessellator.startDrawingQuads();
                tessellator.setNormal(0.0F, 1.0F, 0.0F);
      	        renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, top);
                tessellator.draw();
                tessellator.startDrawingQuads();
                tessellator.setNormal(0.0F, 0.0F, -1.0F);
      	        renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side);
                tessellator.draw();
                tessellator.startDrawingQuads();
                tessellator.setNormal(0.0F, 0.0F, 1.0F);
      	        renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side);
                tessellator.draw();
                tessellator.startDrawingQuads();
                tessellator.setNormal(-1.0F, 0.0F, 0.0F);
      	        renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side);
                tessellator.draw();
                tessellator.startDrawingQuads();
                tessellator.setNormal(1.0F, 0.0F, 0.0F);
      	        renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side);
                tessellator.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) {

	renderer.renderStandardBlock(block, x, y, z);
	Tessellator tes = Tessellator.instance;
	tes.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));

	IIcon side = ConcreteModClientProxy.getIcon(BlockScaffold.name.toLowerCase() + "_side");

	//South
	tes.addVertexWithUV(x+0, y+0, z+0.999, side.getMinU(), side.getMaxV()); //0.999 instead of 1 for Z fighting (textures overlapping)
	tes.addVertexWithUV(x+0, y+1, z+0.999, side.getMinU(), side.getMinV());
	tes.addVertexWithUV(x+1, y+1, z+0.999, side.getMaxU(), side.getMinV());
	tes.addVertexWithUV(x+1, y+0, z+0.999, side.getMaxU(), side.getMaxV());
	//East
	tes.addVertexWithUV(x+0.999, y+0, z+1, side.getMinU(), side.getMaxV());
	tes.addVertexWithUV(x+0.999, y+1, z+1, side.getMinU(), side.getMinV());
	tes.addVertexWithUV(x+0.999, y+1, z+0, side.getMaxU(), side.getMinV());
	tes.addVertexWithUV(x+0.999, y+0, z+0, side.getMaxU(), side.getMaxV());
	//North
	tes.addVertexWithUV(x+1, y+0, z+0.001, side.getMinU(), side.getMaxV());
	tes.addVertexWithUV(x+1, y+1, z+0.001, side.getMinU(), side.getMinV());
	tes.addVertexWithUV(x+0, y+1, z+0.001, side.getMaxU(), side.getMinV());
	tes.addVertexWithUV(x+0, y+0, z+0.001, side.getMaxU(), side.getMaxV());
	//West
	tes.addVertexWithUV(x+0.001, y+0, z+0, side.getMinU(), side.getMaxV());
	tes.addVertexWithUV(x+0.001, y+1, z+0, side.getMinU(), side.getMinV());
	tes.addVertexWithUV(x+0.001, y+1, z+1, side.getMaxU(), side.getMinV());
	tes.addVertexWithUV(x+0.001, y+0, z+1, side.getMaxU(), side.getMaxV());

	IIcon top = ConcreteModClientProxy.getIcon(BlockScaffold.name.toLowerCase() + "_top");

	//Top
	tes.addVertexWithUV(x+0, y+0.999, z+1, top.getMinU(), top.getMaxV());
	tes.addVertexWithUV(x+0, y+0.999, z+0, top.getMinU(), top.getMinV());
	tes.addVertexWithUV(x+1, y+0.999, z+0, top.getMaxU(), top.getMinV());
	tes.addVertexWithUV(x+1, y+0.999, z+1, top.getMaxU(), top.getMaxV()); 
	//Bottom
	tes.addVertexWithUV(x+0, y+0.001, z+0, top.getMinU(), top.getMaxV());
	tes.addVertexWithUV(x+0, y+0.001, z+1, top.getMinU(), top.getMinV());
	tes.addVertexWithUV(x+1, y+0.001, z+1, top.getMaxU(), top.getMinV());
	tes.addVertexWithUV(x+1, y+0.001, z+0, top.getMaxU(), top.getMaxV());

	return true;
}

@Override
public boolean shouldRender3DInInventory(int modelId) {
	return true;
}

@Override
public int getRenderId() {
	return renderID;
}

}

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.