Jump to content

[Solved]Disable block rendering using metadata & Rendering TESR when not in FOV


Recommended Posts

Posted

I have two questions involving rendering.

 

1. Is there a way to prevent a blocks texture from rendering based on its state.

Normally when i use a custom model for a tile i would use.

@Override
public int getRenderType() {
return -1;
}

But what i need is something like

@Override
public int getRenderType(int metadata) {
if (metadata == 1)
             return -1;
        else
             super.getRenderType(int metadata)
}

Is there a way to do this?

 

2. How can i make a TESR render if the block the tile belongs to is not in the players FOV?

I know this is possible because beacons do it (when you look up the beam dose not disappear) I would check the beacon code but for some reason ether a bug in the forge version im using or a problem with my dev environment i cant look at a lot of the minecraft src code.

 

 

I am the author of Draconic Evolution

Posted

I have two questions involving rendering.

 

1. Is there a way to prevent a blocks texture from rendering based on its state.

Normally when i use a custom model for a tile i would use.

@Override
public int getRenderType() {
return -1;
}

But what i need is something like

@Override
public int getRenderType(int metadata) {
if (metadata == 1)
             return -1;
        else
             super.getRenderType(int metadata)
}

Is there a way to do this?

 

2. How can i make a TESR render if the block the tile belongs to is not in the players FOV?

I know this is possible because beacons do it (when you look up the beam dose not disappear) I would check the beacon code but for some reason ether a bug in the forge version im using or a problem with my dev environment i cant look at a lot of the minecraft src code.

 

 

 

There is no way to do this. You have to either render your whole block manually, or not. All metadata distinguishing has to be done in your renderer.

 

Decided to reopen this thread because it turns out there is actually a way to do this and it may prove useful to some people.

 

It uses "shouldSideBeRendered" in the block class which gives you the world the x, y, z coords of the adjacent block and the side of the block the adjacent block is on. if you return false the side of the block wont be rendered (this is called for every side of the block being rendered)

 

With that information you can use ForgeDirection to get the coords of the block being rendered which allows you to get the block metadata or TileEntity

The following is an example of how to use this to prevent a block from rendering if its metadata == 1.

 

@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) {
        int meta = world.getBlockMetadata(x - ForgeDirection.getOrientation(side).offsetX, y - ForgeDirection.getOrientation(side).offsetY, z - ForgeDirection.getOrientation(side).offsetZ)

        if (meta == 1) return false;
        else return super.shouldSideBeRendered(world, x, y, z, side);
}

 

If there is a problem with this please let me know but so far it seems to work just fine in my tests.

     

I am the author of Draconic Evolution

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.