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

Hi there,

 

It is possible to rotate an ISBRH like we can do for TESR?

 

Basically I want to avoid remaking all my ISBRH for the 4 directions.

 

I tried some GL11.glRotatef but it rotates the whole chunk, and using GL11.glPushMatrix(); and GL11.glPopMatrix(); does nothing (no rotation at all).

 

Hope there is a way or I'm good for more ISBRH  long coding....

 

Thanks!

glRotate should most definitely only be rotating your block, not the whole chunk. I'm guessing you put glRotate between glPush and glPop and rendered your block afterward, but you have to render your block after rotating and before popping.

 

Show your code.

  • Author

Here is the code:

 

 

 

package net.killermapper.roadstuff.client.render;

 

import org.lwjgl.opengl.GL11;

 

import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;

import net.killermapper.roadstuff.common.tiles.TileEntityBlockTrafficSign;

import net.killermapper.roadstuff.proxy.ClientProxy;

import net.minecraft.block.Block;

import net.minecraft.client.renderer.RenderBlocks;

import net.minecraft.client.renderer.Tessellator;

import net.minecraft.tileentity.TileEntity;

import net.minecraft.world.IBlockAccess;

 

public class RenderTrafficSign implements ISimpleBlockRenderingHandler

{

    @Override

    public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)

    {

        Tessellator tessellator = Tessellator.instance;

 

        renderer.setRenderBounds(0.4375F, 0.0F, 0.5625F, 0.5625F, 1F, 0.625F);

        this.renderInInventory(tessellator, renderer, block, metadata);

        renderer.setRenderBounds(0.4375F, 0.0F, 0.5F, 0.46875F, 1F, 0.625F);

        this.renderInInventory(tessellator, renderer, block, metadata);

        renderer.setRenderBounds(0.53125F, 0.0F, 0.5F, 0.5625F, 1F, 0.625F);

        this.renderInInventory(tessellator, renderer, block, metadata);

 

        if(metadata == 1)

        {

            renderer.setRenderBounds(0.3125F, 0.0F, 0.625F, 0.6875F, 0.0625F, 0.6875F);

            this.renderInInventory(tessellator, renderer, block, metadata);

            renderer.setRenderBounds(0.1875F, 0.0625F, 0.625F, 0.8125F, 0.125F, 0.6875F);

            this.renderInInventory(tessellator, renderer, block, metadata);

            renderer.setRenderBounds(0.125F, 0.125F, 0.625F, 0.875F, 0.1875F, 0.6875F);

            this.renderInInventory(tessellator, renderer, block, metadata);

            renderer.setRenderBounds(0.0625F, 0.1875F, 0.625F, 0.9375F, 0.3125F, 0.6875F);

            this.renderInInventory(tessellator, renderer, block, metadata);

            renderer.setRenderBounds(0.0F, 0.3125F, 0.625F, 1F, 0.6875F, 0.6875F);

            this.renderInInventory(tessellator, renderer, block, metadata);

            renderer.setRenderBounds(0.0625F, 0.6875F, 0.625F, 0.9375F, 0.8125F, 0.6875F);

            this.renderInInventory(tessellator, renderer, block, metadata);

            renderer.setRenderBounds(0.125F, 0.8125F, 0.625F, 0.875F, 0.875F, 0.6875F);

            this.renderInInventory(tessellator, renderer, block, metadata);

            renderer.setRenderBounds(0.1875F, 0.875F, 0.625F, 0.8125F, 0.9375F, 0.6875F);

            this.renderInInventory(tessellator, renderer, block, metadata);

            renderer.setRenderBounds(0.3125F, 0.9375F, 0.625F, 0.6875F, 1F, 0.6875F);

            this.renderInInventory(tessellator, renderer, block, metadata);

        }

    }

 

    @Override

    public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)

    {

        TileEntity tile = world.getTileEntity(x, y, z);

        if(tile instanceof TileEntityBlockTrafficSign)

        {

            TileEntityBlockTrafficSign tileSign = (TileEntityBlockTrafficSign)tile;

 

            GL11.glPushMatrix();

            GL11.glRotatef(90F * tileSign.getSignDirection(), 0.0F, 1.0F, 0.0F);

 

            renderer.setRenderBounds(0.4375F, 0.0F, 0.5625F, 0.5625F, 1F, 0.625F);

            renderer.renderStandardBlock(block, x, y, z);

            renderer.setRenderBounds(0.4375F, 0.0F, 0.5F, 0.46875F, 1F, 0.5625F);

            renderer.renderStandardBlock(block, x, y, z);

            renderer.setRenderBounds(0.53125F, 0.0F, 0.5F, 0.5625F, 1F, 0.5625F);

            renderer.renderStandardBlock(block, x, y, z);

 

            if(world.getBlockMetadata(x, y, z) != 0)

            {

                switch(tileSign.getSignShape())

                {

                    case 0:

                        renderer.setRenderBounds(0.0F, 0.0F, 0.625F, 1F, 1F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        break;

                    case 1:

                        renderer.setRenderBounds(0.3125F, 0.0F, 0.625F, 0.6875F, 0.0625F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.1875F, 0.0625F, 0.625F, 0.8125F, 0.125F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.125F, 0.125F, 0.625F, 0.875F, 0.1875F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.0625F, 0.1875F, 0.625F, 0.9375F, 0.3125F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.0F, 0.3125F, 0.625F, 1F, 0.6875F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.0625F, 0.6875F, 0.625F, 0.9375F, 0.8125F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.125F, 0.8125F, 0.625F, 0.875F, 0.875F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.1875F, 0.875F, 0.625F, 0.8125F, 0.9375F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.3125F, 0.9375F, 0.625F, 0.6875F, 1F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        break;

                    case 2:

                        renderer.setRenderBounds(0.0F, 0.0F, 0.625F, 1F, 0.25F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.0625F, 0.25F, 0.625F, 0.9375F, 0.375F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.125F, 0.375F, 0.625F, 0.8875F, 0.5F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.1875F, 0.5F, 0.625F, 0.8225F, 0.625F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.25F, 0.625F, 0.625F, 0.75F, 0.75F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.3125F, 0.75F, 0.625F, 0.6875F, 0.875F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.375F, 0.875F, 0.625F, 0.625F, 1F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        break;

                    case 3:

                        renderer.setRenderBounds(0.375F, 0.0F, 0.625F, 0.625F, 0.0625F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.3125F, 0.0625F, 0.625F, 0.6875F, 0.125F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.25F, 0.125F, 0.625F, 0.75F, 0.1875F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.1875F, 0.1875F, 0.625F, 0.8125F, 0.25F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.125F, 0.25F, 0.625F, 0.875F, 0.3125F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.0625F, 0.3125F, 0.625F, 0.9375F, 0.375F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.0F, 0.375F, 0.625F, 1F, 0.625F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.0625F, 0.625F, 0.625F, 0.9375F, 0.6875F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.125F, 0.6875F, 0.625F, 0.875F, 0.75F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.1875F, 0.75F, 0.625F, 0.8125F, 0.8125F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.25F, 0.8125F, 0.625F, 0.75F, 0.875F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.3125F, 0.875F, 0.625F, 0.6875F, 0.9375F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        renderer.setRenderBounds(0.375F, 0.9375F, 0.625F, 0.625F, 1F, 0.6875F);

                        renderer.renderStandardBlock(block, x, y, z);

                        break;

                }

            }

            GL11.glPopMatrix();

        }

        return true;

    }

 

    @Override

    public boolean shouldRender3DInInventory(int modelId)

    {

        return true;

    }

 

    @Override

    public int getRenderId()

    {

        return ClientProxy.renderSignPostId;

    }

 

    private void renderInInventory(Tessellator tessellator, RenderBlocks renderer, Block block, int metadata)

    {

        GL11.glTranslatef(-0.5F, -0.5F, -0.5F);

        tessellator.startDrawingQuads();

        tessellator.setNormal(0.0F, -1F, 0.0F);

        renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(0, metadata));

        tessellator.draw();

        tessellator.startDrawingQuads();

        tessellator.setNormal(0.0F, 1.0F, 0.0F);

        renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(1, metadata));

        tessellator.draw();

        tessellator.startDrawingQuads();

        tessellator.setNormal(0.0F, 0.0F, -1F);

        renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(2, metadata));

        tessellator.draw();

        tessellator.startDrawingQuads();

        tessellator.setNormal(0.0F, 0.0F, 1.0F);

        renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(3, metadata));

        tessellator.draw();

        tessellator.startDrawingQuads();

        tessellator.setNormal(-1F, 0.0F, 0.0F);

        renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(4, metadata));

        tessellator.draw();

        tessellator.startDrawingQuads();

        tessellator.setNormal(1.0F, 0.0F, 0.0F);

        renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(5, metadata));

        tessellator.draw();

        GL11.glTranslatef(0.5F, 0.5F, 0.5F);

    }

 

}

 

 

 

Just make a tile entity, those are rerendered every frame.

"you seem to be THE best modder I've seen imo."

~spynathan

 

ლ(́◉◞౪◟◉‵ლ

  • Author

I really want to avoid TESR especially for decorating blocks. This is why I use ISBRH when I can.

 

I've searched everywhere if someone did rotate ISBRH but I couldn't find something... So looks like it's not possible to rotate, well I wanted to be sure before attacking the 3 other rotations. Thanks all of you.

Maybe glRotate specifically isn't supported, but if you're adventurous, take a look at the rendering for levers. You can do that same type of code in an ISBRH and it will be able to render your block in various rotations - painful, yes, but it can be done.

  • Author

I checked the lever code, but looks like they render it by specifying each part depending to the orientation. Only the lever itself use rotations but it's only to make a shape which isn't following regular axes.

 

So I guess I'm good for remaking my render for each direction.

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.